最近どうっすか?

コンピュータをメインに技術系の話題について書いていけたらいいなぁ。

命令形式

System/360, 370の機械語命令形式についてのまとめ:
System/360には、RR・RX・RS・SI・SSと5種類の形式がある。
370に「S形式」という形式も追加された。
各形式とも先頭の8bit(1Byte)がオペコードを示している。
また、オペコードの先頭2bitによって命令形式(フォーマット)が決まっている。

先頭2bit 命令形式 16進数
00 RR形式 0x00~0x3F
01 RX形式 0x40~0x7F
10 RS/SI形式 0x80~0xBF
11 SS形式 0xC0~0xFF
RR形式

RR形式は16bit(2Byte)命令で先頭の8bit(1Byte)がオペコードに続いて4bitのレジスタ指定子が2つ並ぶ形になっている。

- Reg# Reg#
OpCode (8) R1 (4) R2 (4)
第一オペランド Reg1 レジスタオペランド
第二オペランド Reg2 レジスタオペランド

RR形式命令のアセンブラコード例

XR: eXclusive Or命令

XR Rn, Rn
n番レジスタ同士のeXclusive ORを取る(n番レジスタを0クリアする)

RX形式

RX形式は32bit(4Byte)命令で先頭のオペコードに続いて4bitのレジスタ指定子、4bitのインデックスレジスタ指定子、4bitのベースレジスタ指定子、および12bitのオフセット値が並ぶ形式になっている。

- Reg# Index Base Displacement
OpCode (8) R1 (4) X2 (4) B2 (4) D2 (12)
第一オペランド R1 レジスタオペランド
第二オペランド [X2]+[B2]+D2 メモリアドレスオペランド

RX形式命令のアセンブラコード例

L: Load命令

L n, D2(X2,B2)
n番レジスタに[B2]+[X2]+D2のアドレスのデータをロードする

RS形式

RS形式は32bit(4Byte)命令で先頭のオペコードに続いて4bitのレジスタ指定子が2つ、4bitのベースレジスタ指定子と12bitのオフセット値が並ぶ形式になっている。
オペランドは第三オペランドまであるのが特徴となっている。

- Reg# Reg# Base Displacement
OpCode (8) R1 (4) R3 (4) B2 (4) D2 (12)
第一オペランド R1 レジスタオペランド
第二オペランド [B2]+D2 メモリアドレスオペランド
第三オペランド R3 レジスタオペランド

RS形式命令のアセンブラコード例

LM: Load Multiple命令

LM m, n, D2(B2)
m番レジスタからn番レジスタに(n-m)*4 Byteのデータをアドレス[B2]+D2からロードする。
m>nの場合は(16-m+n+1)となる。
m=nの場合は4Byteが対象となる。

SI形式

SI形式は32bit(4Byte)命令で先頭のオペコードに続いて8bit(1Byte)の即値データ、4bitのベースレジスタ指定子、および12bitのオフセット値が並ぶ形式になっている。

- Immediate Base Displacement
OpCode (8) Imm2 (8) B1 (4) D1 (12)
第一オペランド [B1]+D1 メモリアドレスオペランド
第二オペランド I2 即値オペランド

SI形式命令のアセンブラコード例

OI: Or Immediate命令

OI D1(B1),I2
[B1]+D1のアドレスのデータとI2の値とのORをとる。

SS形式

SS形式は48bit(6Byte)命令で先頭のオペコードに続き、長さを示す8bit分のデータ、アドレスを表す4bitのベースレジスタ指定子と12bitのオフセット値の並びが2つ続く形式になっている。
長さを示す8bit分のデータは8bitのデータとして使われる場合と、4bitのデータが2つとして使われる場合がある。

- Length Length Base Displacement Base Displacement
OpCode (8) LenA (4) LenB (4) B1 (4) D1 (12) B2 (4) D2 (12)
第一オペランド [B1]+D1 メモリアドレスオペランド
第二オペランド [B2]+D2 メモリアドレスオペランド
第三オペランド LenA 長さ指定データ
第四オペランド LenB 長さ指定データ
- Length Base Displacement Base Displacement
OpCode (8) L(8) B1 (4) D1 (12) B2 (4) D2 (12)
第一オペランド [B1]+D1 メモリアドレスオペランド
第二オペランド [B2]+D2 メモリアドレスオペランド
第三オペランド Length 長さ指定データ

SS形式命令のアセンブラコード例

MVC: MoVe Character命令

MVC D1(L,B1),D2(B2)
アドレス[B1]+D1から[B2]+D2へL Byteのデータをコピーする。

S形式(370のみ)

S形式は16bit(2Byte)のオペコードに続き、4bitのベースレジスタ指定子、および12bitのオフセット値が続く形式になっている。

Operation Code (16) Bas2 (4) Displacement2 (12)
第一オペランド [Bas2]+Displacement2 メモリアドレスオペランド