アセンブリ言語の命令は、CPUのアーキテクチャに特有の低水準の操作を記述するためのものです。これらの命令は、データの処理やメモリ操作、制御フローの制御など、さまざまな機能を提供します。以下は、一般的なアセンブリ言語命令の種類とその例です。
1. データ移動命令(Data Transfer Instructions)
- MOV: データをレジスタやメモリから別のレジスタやメモリへ移動します。
- 例:
MOV AX, 1
(レジスタAXに即値1を移動)
- 例:
- PUSH: データをスタックにプッシュします。
- 例:
PUSH AX
(レジスタAXの値をスタックにプッシュ)
- 例:
- POP: スタックからデータをポップします。
- 例:
POP BX
(スタックからデータを取り出し、レジスタBXに格納)
- 例:
2. 算術演算命令(Arithmetic Instructions)
- ADD: 2つのオペランドを加算します。
- 例:
ADD AX, BX
(レジスタBXの値をレジスタAXに加算)
- 例:
- SUB: 2つのオペランドを減算します。
- 例:
SUB AX, 2
(レジスタAXから即値2を減算)
- 例:
- MUL: 符号なしの乗算を実行します。
- 例:
MUL BX
(レジスタBXの値とレジスタAXの値を乗算)
- 例:
- DIV: 符号なしの除算を実行します。
- 例:
DIV CX
(レジスタCXの値でレジスタAXの値を除算)
- 例:
3. 論理演算命令(Logical Instructions)
- AND: 2つのオペランドのビットごとのAND演算を行います。
- 例:
AND AX, BX
(レジスタAXとレジスタBXのビットごとAND演算)
- 例:
- OR: 2つのオペランドのビットごとのOR演算を行います。
- 例:
OR AX, 1
(レジスタAXと即値1のビットごとOR演算)
- 例:
- XOR: 2つのオペランドのビットごとのXOR演算を行います。
- 例:
XOR AX, BX
(レジスタAXとレジスタBXのビットごとXOR演算)
- 例:
- NOT: オペランドのビットを反転させます。
- 例:
NOT AX
(レジスタAXのビットを反転)
- 例:
4. 制御フロー命令(Control Flow Instructions)
- JMP: 無条件ジャンプを行います。
- 例:
JMP LABEL
(指定されたラベルにジャンプ)
- 例:
- JE/JZ: 等しい場合またはゼロの場合にジャンプします。
- 例:
JE LABEL
(直前の比較命令が等しい場合にジャンプ)
- 例:
- JNE/JNZ: 等しくない場合またはゼロでない場合にジャンプします。
- 例:
JNE LABEL
(直前の比較命令が等しくない場合にジャンプ)
- 例:
- CALL: サブルーチンを呼び出します。
- 例:
CALL FUNCTION
(指定されたサブルーチンにジャンプ)
- 例:
- RET: サブルーチンから戻ります。
- 例:
RET
(サブルーチンから呼び出し元に戻る)
- 例:
5. 比較命令(Comparison Instructions)
- CMP: 2つのオペランドを比較します。
- 例:
CMP AX, BX
(レジスタAXとレジスタBXを比較)
- 例:
- TEST: 2つのオペランドのビットごとのAND演算を行い、結果をフラグに設定します。
- 例:
TEST AX, 1
(レジスタAXと即値1のAND演算を実行し、結果をフラグに設定)
- 例:
6. シフト命令(Shift Instructions)
- SHL/ROL: 左シフトまたは循環左シフトを行います。
- 例:
SHL AX, 1
(レジスタAXの値を左に1ビットシフト)
- 例:
- SHR/ROR: 右シフトまたは循環右シフトを行います。
- 例:
SHR AX, 1
(レジスタAXの値を右に1ビットシフト)
- 例:
7. 入出力命令(I/O Instructions)
- IN: 入力ポートからデータを読み込みます。
- 例:
IN AL, 60h
(ポート60hからデータを読み込み、レジスタALに格納)
- 例:
- OUT: 出力ポートにデータを書き込みます。
- 例:
OUT 60h, AL
(レジスタALのデータをポート60hに書き込み)
- 例:
アセンブリ言語の命令は、CPUアーキテクチャによって異なるため、具体的な命令の詳細や構文は使用するプロセッサのマニュアルを参照する必要があります。各命令は、ハードウェアの機能に直接アクセスできるため、低レベルの操作が可能です。