アセンブリ言語と機械語は、低レベルのプログラミング言語であり、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 D889は MOV命令のオペコードD8はレジスタペア(AXとBX)を表すオペランド
ADD命令
- アセンブリ:
ADD AX, BX - 機械語:
01 D801は ADD命令のオペコードD8はレジスタペア(AXとBX)を表すオペランド
SUB命令
- アセンブリ:
SUB AX, BX - 機械語:
29 D829は SUB命令のオペコードD8はレジスタペア(AXとBX)を表すオペランド
MUL命令
- アセンブリ:
MUL BX - 機械語:
F7 E3F7は MUL命令のオペコードE3は BXを表すオペランド
DIV命令
- アセンブリ:
DIV BX - 機械語:
F7 F3F7は DIV命令のオペコードF3は BXを表すオペランド
JMP命令
- アセンブリ:
JMP 0x1234 - 機械語:
E9 34 12E9は JMP命令のオペコード34 12はジャンプ先アドレス0x1234をリトルエンディアン形式で表す
CMP命令
- アセンブリ:
CMP AX, BX - 機械語:
39 D839は CMP命令のオペコードD8はレジスタペア(AXとBX)を表すオペランド
条件ジャンプ命令
- アセンブリ:
JE 0x1234 - 機械語:
74 1274は JE (Jump if Equal) 命令のオペコード12はジャンプ先アドレスオフセットを表す
- アセンブリ:
JNE 0x1234 - 機械語:
75 1275は JNE (Jump if Not Equal) 命令のオペコード12はジャンプ先アドレスオフセットを表す
スタック操作命令
- アセンブリ:
PUSH AX - 機械語:
5050は PUSH命令のオペコードとAXレジスタを表す
- アセンブリ:
POP AX - 機械語:
5858は POP命令のオペコードとAXレジスタを表す
サブルーチン呼び出しと戻り
- アセンブリ:
CALL 0x1234 - 機械語:
E8 34 12E8は CALL命令のオペコード34 12は呼び出し先アドレス0x1234をリトルエンディアン形式で表す
- アセンブリ:
RET - 機械語:
C3C3は RET命令のオペコード
まとめ
アセンブリ言語と機械語の対応表は、CPUのアーキテクチャと命令セットによって異なります。上記の例は、x86アーキテクチャに基づく一般的な命令の対応表です。
実際の開発では、CPUのマニュアルやリファレンスガイドを参照して、各命令の詳細なオペコードとその使用方法を確認することが重要です。
スポンサーリンク