アセンブリ言語と機械語は、低レベルのプログラミング言語であり、CPUの命令セットアーキテクチャ(ISA)に依存します。アセンブリ言語は、人間が読みやすいニーモニック(命令名)を使い、機械語は0と1のビット列で表現されます。
以下に、x86アーキテクチャに基づくアセンブリ言語と機械語の対応表の例を示します。この表は、基本的な命令に対するもので、詳細は各CPUのマニュアルを参照してください。
x86アセンブリ言語と機械語の対応表
アセンブリ言語命令 | 機械語 (16進) | 説明 |
---|---|---|
MOV AX, BX | 89 D8 | BXの内容をAXにコピーする |
ADD AX, BX | 01 D8 | AXにBXを加算する |
SUB AX, BX | 29 D8 | AXからBXを減算する |
MUL BX | F7 E3 | AXとBXを乗算する |
DIV BX | F7 F3 | AXをBXで除算する |
JMP 0x1234 | E9 34 12 | アドレス0x1234にジャンプする |
CMP AX, BX | 39 D8 | AXとBXを比較する |
JE 0x1234 | 74 12 | 等しい場合にアドレス0x1234にジャンプする |
JNE 0x1234 | 75 12 | 等しくない場合にアドレス0x1234にジャンプする |
PUSH AX | 50 | AXをスタックにプッシュする |
POP AX | 58 | スタックからAXにポップする |
CALL 0x1234 | E8 34 12 | サブルーチン0x1234を呼び出す |
RET | C3 | サブルーチンから戻る |
アセンブリ言語と機械語の詳細な説明
MOV
命令
- アセンブリ:
MOV AX, BX
- 機械語:
89 D8
89
は MOV命令のオペコードD8
はレジスタペア(AXとBX)を表すオペランド
ADD
命令
- アセンブリ:
ADD AX, BX
- 機械語:
01 D8
01
は ADD命令のオペコードD8
はレジスタペア(AXとBX)を表すオペランド
SUB
命令
- アセンブリ:
SUB AX, BX
- 機械語:
29 D8
29
は SUB命令のオペコードD8
はレジスタペア(AXとBX)を表すオペランド
MUL
命令
- アセンブリ:
MUL BX
- 機械語:
F7 E3
F7
は MUL命令のオペコードE3
は BXを表すオペランド
DIV
命令
- アセンブリ:
DIV BX
- 機械語:
F7 F3
F7
は DIV命令のオペコードF3
は BXを表すオペランド
JMP
命令
- アセンブリ:
JMP 0x1234
- 機械語:
E9 34 12
E9
は JMP命令のオペコード34 12
はジャンプ先アドレス0x1234をリトルエンディアン形式で表す
CMP
命令
- アセンブリ:
CMP AX, BX
- 機械語:
39 D8
39
は CMP命令のオペコードD8
はレジスタペア(AXとBX)を表すオペランド
条件ジャンプ命令
- アセンブリ:
JE 0x1234
- 機械語:
74 12
74
は JE (Jump if Equal) 命令のオペコード12
はジャンプ先アドレスオフセットを表す
- アセンブリ:
JNE 0x1234
- 機械語:
75 12
75
は JNE (Jump if Not Equal) 命令のオペコード12
はジャンプ先アドレスオフセットを表す
スタック操作命令
- アセンブリ:
PUSH AX
- 機械語:
50
50
は PUSH命令のオペコードとAXレジスタを表す
- アセンブリ:
POP AX
- 機械語:
58
58
は POP命令のオペコードとAXレジスタを表す
サブルーチン呼び出しと戻り
- アセンブリ:
CALL 0x1234
- 機械語:
E8 34 12
E8
は CALL命令のオペコード34 12
は呼び出し先アドレス0x1234をリトルエンディアン形式で表す
- アセンブリ:
RET
- 機械語:
C3
C3
は RET命令のオペコード
まとめ
アセンブリ言語と機械語の対応表は、CPUのアーキテクチャと命令セットによって異なります。上記の例は、x86アーキテクチャに基づく一般的な命令の対応表です。
実際の開発では、CPUのマニュアルやリファレンスガイドを参照して、各命令の詳細なオペコードとその使用方法を確認することが重要です。
スポンサーリンク