PACKとUNPK(Unpack)

By 神居 - Posted: 2009/11/04 Last updated: 2009/11/04 - 3 Comments

PACK,UNPK(Unpack):パック、アンパック

10進演算を行う際に使用する、10進数字文字と10進数変換を行う、CPU命令です。S/370アーキテクチャーでは加減乗除などの演算は、一般的には2進固定小数点を使用しますが、事務計算処理を行うプログラムでは10進演算も使われます。2進固定小数点では最大10桁(約+21億?-21億)までの数値しか扱えませんが、10進演算では31桁までの長さの数値を処理することができます。このため数百億?兆を超える桁数を必要とする大規模な会計業務などでは、10進演算も利用されます。


PACK命令

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
         PACK  DECIMAL,ZONEDEC

DECIMAL  DC    PL8'0'
ZONEDEC  DC    C'12345678'

命令実行後、ZONEDECにある8バイト(8文字)がパック形式に変換されます。10進演算を行うためには、数値がパック形式になっていなければなりません。


UNPK命令

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
         UNPK  ZONEDEC,DECIMAL

DECIMAL  DC    PL4'1234567'
ZONEDEC  DC    CL8' '

命令実行後、DECIMALにある4バイト(7桁+符号)がゾーン形式に変換されます。符号は最下位桁のゾーン部に設定されます。10進演算の結果を表示、印刷するためには、数値がゾーン形式になっていなければなりません。


2進固定小数点(バイナリー)で済むなら、加減乗除などの演算には一般のADDやSUBTRACTを使うことを勧めます。10進数はメモリーにしか置けず、レジスターは使えません。常にメモリー間演算となります。バイナリー演算命令に比べれば、実行速度も遅く、命令長も長く余計にメモリーを使います。このような特性は知っておくべきです。現在では会計業務などのための、事務計算プログラムの多くはCOBOL言語で書かれています。アセンブラーで10進演算を行う必要性はそう多くないでしょう。ただしPACK/UNPK、ED/EDMK命令は、処理メッセージ・テキストの編集などで常に必要とされますから、マニュアルを見れば使える、と言う程度に理解しておくと応用が拡がります。

Posted in キーワードから(何が知りたいですか) • • Top Of Page

3 Responses to “PACKとUNPK(Unpack)”

Comment from kumi
Time 2012年11月21日 at 19:25

教えてください。

6バイトのエリアで 201212080000 と頭4バイトに数字が入っているとき
これを
F1F2F1F2F0F8 と取り出すには どうすれば いいのですか?

Comment from kumi
Time 2012年11月21日 at 19:27

すみません。言語はアセンブラです。
よろしくお願いします。

Comment from kamii
Time 2012年11月22日 at 08:42

掲示板の方にサンプルを掲載しました。