| 命令フォーマットと表記法 |
アセンブラソースプログラムに類似したフォーマットでアセンブラのフォーマット別ニモニック、オプション、使用可能なアドレッシングモード、サイズ、及びビットパターンを説明します。
一般形命令フォーマットは第5章で説明しています。大部分の2オペランド命令は、命令コードが2つの部分に別れています。最初の半分は第1ハーフワード内に第1オペランドフィールド(例
: src, sx)を伴って存在し、残りの半分は第2ハーフワード内に第2オペランドフィールド(例
: dest, sy)を伴って存在します。
オペランドアドレスでは下記のアドレッシングモードを指定できます。
| レジスタ直接 レジスタ間接 レジスタ相対間接 即値 絶対 PC相対間接 |
スタックポップ スタックプッシュ レジスタベース多段間接 PCベース多段間接 絶対多段間接 |

| MOV:G | : | フォーマット別ニモニック。これは総称ニモニック(MOV)とフォーマット指定子(G-フォーマット)で構成されます。 | |
| src.sx [Gen/r] | : | ビットパターンのsrcフィールドで示される第1(ソース)オペランドアドレスが[Gen/r]で示されるアドレッシングモードで指定されます。src の位置のオペランドアクセスサイズはsxで指定されます。 | |
| dest.sy [Gen/w] | : | ビットパターンのdestフィールドで示される第2(デスティネーション)オペランドアドレスが[Gen/w]で示されるアドレッシングモードに指定されます。destの位置のオペランドアクセスサイズはsyで指定されます。 | |
| Gen | : | アドレッシングモード。オペランドアドレスフィールドの一般形(8ビット)アドレッシングを指定します。 | |
| /r | : | アクセスモード。ソースオペランドのリードアクセスを指定します。@-SPアドレッシングモード(スタックプッシュ)は暗に禁止されます。 | |
| /w | : | アクセスモード。デスティネーションオペランドのライトアクセスを指定します。@SP+(スタックポップ)と#exp(即値)アドレッシングモードは暗に禁止されます。 |

| POP | : | データ転送命令スタックポップの総称ニモニック。 | |
| dest.s [Gen-S/w] | : | ビットパターンのdestフィールドで示される第1(デスティネーション)オペランドアドレスが[Gen-S/w]で示されるアドレッシングモードに示されます。destの位置のオペランドアクセスサイズはsで指定されます。 | |
| Gen | : | アドレッシングモード。オペランドアドレスフィールドの一般形(8ビット)アドレッシングを指定します。 | |
| -S | : | destアドレスの@-SP(スタックプッシュ)と@SP+(スタックポップ)アドレッシングモードを禁止します。 | |
| /w | : | アクセスモード。デスティネーションオペランドのライトアクセスを指定します。@SP+(スタックポップ)と#exp(即値)アドレッシングモードは暗に禁止されます。 |

| SMOV | : | ストリング転送命令の総称ニモニック。 | |
| /eeee | : | 命令オプション。SMOV命令の割出し条件を指定します。 | |
| /b | : | 命令オプション。SMOV命令の処理方向を指定します。 | |
| .sx | : | ストリングの転送に使用する要素サイズを指定します。 |
(1) オペランドのサイズ
オペランドアドレスでアクセスするオペランドのサイズはビットパターン内のフィールド(.sまたは.sx,
.sy, .sz)として命令そのものに指定できます。
サイズフィールドはオペランドのサイズを下記のように定義します。
sフィールド
s = 0 32ビットオペランド s = 1 64ビットオペランド(32ビット仕様では実現されていません)
sx, sy, szフィールド
sx, sy, sz = 00 8ビットオペランド sx, sy, sz = 01 16ビットオペランド sx, sy, sz = 10 32ビットオペランド sx, sy, sz = 11 64ビットオペランド(32ビット仕様では実現されていません)
固定サイズフィールドは大文字のB,HまたはWを用いて下記のように定義します。イタリック体は用いません。
.B : 8ビット固定サイズオペランド .H : 16ビット固定サイズオペランド .W : 32ビット固定サイズオペランド
即値またはリテラルオペランドの場合、以下の(2)で説明するオペランド属性とビット数によって指定します。s, sx, sy, szフィールド及び.B、.H、.Wパラメータは使用しません。
(2) オペランドの属性
下記の2フォーマットを使用します。
1. [#(サイズ)/(エンコード方法)]
このフォーマットはオペランド値にリテラルまたは即値を指定する場合に使用します。この方法では、#(サイズ)により、即値またはリテラル値を示すフィールドのビット数を指定し、さらに(エンコード方法)によりビットフィールドのパターンをエンコードするときに使用する方法を以下のように指定します。
(エンコード方法)
s 符号付き2進数。 u 符号なし2進数。 un 符号なし2進数 ; ビットパターン"00..0"はB'100..0のオペランド値を表します。 cn 補数のリテラル ; ビットパターンは2の補数を表します。 sn 符号付き2進数 ; ビットパターン"00..0"はB'010..0のオペランド値を表します。 sd 符号付き2進数 ; 2倍値として解釈されます。 l レジスタリスト。
3ビットのリテラル(#3)に関する様々なエンコード方法の例を表に示します。
![]()
2. [(アドレッシングモード)/(アクセス方法)]
リテラルまたは即値以外のすべてのオペランドにはこのフォーマットを使用します。
(基本アドレッシングモード) :
Gen 8ビット一般形アドレッシングモード Sho 6ビット短縮形アドレッシングモード Reg レジスタ番号
(修飾子)
-I #expモードを禁止します。 -R Rnモードを禁止します。 -S @SP+モードと@-SPモードを禁止します。 -C 多段間接モードを禁止します。 -M すべてのメモリアドレッシングモードを禁止します。
Rn及び#expのみを許可します(暗に-Cと-Sの意味を含みます)。
(アクセス方法):
r リード w ライト m リードモディファイライト a アドレス生成のみ f ビットまたはビットフィールドアクセス
(修飾子)
"〜u" と"〜x"は"r", "w", "m" の修飾子です。"〜i"は"m"と"f"を修飾します。"c〜"と"p〜"は"(アクセス方法)"の前に付き、"〜u", "〜i", "〜x"は"(アクセス方法)"の後に付きます。
c〜 制御空間のアクセス。 p〜 物理空間のアクセス。 〜u データを符号なしとしてアクセス。 〜i バスインタロックを伴うアクセス。 〜x 複数データに関するアクセス。
"〜u"で修飾されたオペランドが異種サイズのときには、演算でオペランドがゼロ拡張されます。他のオペランドについては、異種サイズのオペランドに関する演算で小さい方のオペランドが符号拡張されます。
アクセス方法を指定すると、アドレッシングの範囲が限定されます。つまり、指定したアクセス方法と共存できないアドレッシングモードはデフォルトで禁止されます。
アクセス方法の指定により、デフォルトで禁止されるアドレッシングモードが決まります。デフォルトで禁止されるアドレッシングモードには次のものがあります。
なお、インプリメントの制約によるアドレッシングモードの制限や、命令再実行のためのアドレッシングモードの制限は、デフォルトではなく-Sまたは-C等の修飾子を使用して禁止します。
r @-SPを禁止 w @-SP, @SP+, #exp, Rnを禁止 m @-SP, @SP+, #expを禁止 f @-SP, @SP+, #expを禁止 a @-SP, @SP+, #exp, Rnを禁止
例: POP dest.s [Gen-S/w]
destオペランドは8ビット一般形アドレッシングモードではライトアクセスとして指定されます。/w属性は@SP+と#expアドレッシングモードを暗に禁止します。さらに、-S修飾子は@-SPアドレッシングモードを禁止します。