命令セットのニーモニック

ニーモニックは,CPUの種類によって,少しずつ異なるため, 慣れないうちは,三文字程度のアルファベットの意味を類推することが難しい. ここでは,典型的なニーモニックを挙げることで, 意味がわからないニーモニックの意味を類推できるようになる 助けとなればと思う.

典型的なニーモニックの例

命令の種類 典型的なニーモニック ニーモニックの意味 命令の意味
コピー(ロード・ストア) MOV move コピー
LD, LOAD load ロード(メモリ等からレジスタへコピー)
ST, STORE store ストア(レジスタからメモリ等へコピー)
算術 ADD add 加算
SUB subtract 減算
MUL multiply 乗算
DIV divide 除算
INC, DEC increment, decrement 1足す,1引く
論理演算・ビット操作 AND, OR, XOR and, or, exclusive-or 論理積・論理和・排他的論理和
NOT not ビット反転(11111001-->00000110)
NEG negate 符号反転(符号付整数).2の補数.(11111001-->00000111)
TEST, TST, BTST, test, bit test ビットの01をテスト
SLL, SHL, SHLL shift logical left 論理左シフト
SLR, SHR, SHLR shift logical right 論理右シフト
SAL, SHAL shift arithmetic left 算術左シフト
SAR, SHAR shift arithmetic right 算術右シフト(キャリーを含めてシフト)
ROTL, ROL rotate left 左ローテート
ROTR, ROR rotate right 右ローテート
RCL rotate through carry left キャリーを含めて左ローテート
RCR rotate through carry right キャリーを含めて右ローテート
条件分岐 BEQ, JE branch(jump) if equal 前の結果が0なら分岐.ゼロフラグ=1なら分岐.
BNE, JNE branch(jump) if not equal 前の結果が1ならば分岐.ゼロフラグ=0なら分岐.
BLT, JL branch(jump) if less than 前の結果が0より小さければ分岐
BGT, JG branch(jump) if greater than 前の結果が0より大きければ分岐
BLE, JLE branch(jump) if less than or equal 前の結果が0以下なら分岐
BGE, JGE branch(jump) if greater than or equal 前の結果が0以上なら分岐
分岐 BRA, JMP, J branch, jump 分岐,ジャンプ
(※branchよりjumpの方が遠いアドレス)
BSR, JSR, CALL branch subroutine, jump subroutine, call サブルーチンへ分岐
(現在の実行アドレス(PC)をスタックに記憶)
RTS, RET return from subroutine サブルーチンから復帰
(スタックから旧PCをPOP)
BGT, JG branch(jump) if greater than 前の結果が0より大きければ分岐
BLE, JLE branch(jump) if less than or equal 前の結果が0以下なら分岐
BGE, JGE branch(jump) if greater than or equal 前の結果が0以上なら分岐
その他 NOP no operation 何もしない

ニーモニックの前後に付く文字の意味

接尾辞の種類 接尾辞の文字の意味 意味 命令の例
...B byte 1バイト MOVB, ADDB, BRAB
...W word 2バイト MOVW, ADDW, BRAW
...L long 4バイト MOVL, DIVL, JMPL, PUSHL, JL, COMPL
...I,I... integer 整数 DIVSI, IMUL
...S singed 符号付 ADDSL, MULSI, SUBS
...C with carry キャリーやボローを考慮 ADDC, SUBC

レジスタ名の表記色々

レジスタ名の前に%を付ける場合もある。
表記 プロセッサ ビット数 役割
EAX, EBX, ECX, EDX Intel x86互換 (パソコン) 32bit 汎用レジスタ
AX, BX, CX, DX Intel x86互換 (パソコン) 16bit 汎用レジスタ(EAX, EBX, ..)の下位16bit
AH, AL Intel x86互換 (パソコン) 8bit AXの上位8bit, 下位8bit
EBP Intel x86互換 (パソコン) 32bit ベースポインタ
ER0, ER1, ER2, .. SH, H8等 32bit 汎用レジスタ
R0, R1, R2, .. SH, H8等 16bit 汎用レジスタ(下位16ビット)
R0L, R0H SH, H8等 16bit R0の下位8ビット, 上位8bit
D0, D1, D2, .. Motorola 68k等 32bit mov #3, R1 ;R1に3を代入
SP, ESP 多くのCPU 16bit, 32bit 等 スタックポインタ
PC ほぼ全てのCPU CPUのビット数 プログラムカウンタ

アドレッシングモードの表記

表記 アドレッシングモード 意味 利用例
レジスタ名 レジスタ レジスタの値にアクセス add R1, R2, R3 ; R1+R2をR3へ
#数値、$数値 イミディエイト(即値) その数値をそのまま使う mov #3, R1 ; R1に3を代入
@数値、(数値) 直接アドレス 数値をアドレスと解釈したメモリへアクセス(PC相対の場合が多い) mov #3, @#x369C ; メモリアドレス0x369Cに3を書き込み
@レジスタ名、(レジスタ名) レジスタ間接 レジスタが保持しているメモリアドレスにアクセス mov R1, @R2 ; R1の値をR2の値をアドレスと解釈したメモリへ書き込む
@レジスタ名+、(レジスタ名)+ インクリメント付きレジスタ間接 アクセス後にレジスタの保持値に1を足す mov (%eax)+, (%ebx)+ ;eaxの値のメモリアドレスの数値をebxの値のメモリアドレスへ代入し、それぞれのレジスタの値を1増やす

Last modified: Mon Oct 20 01:39:55 JST 2008