最終更新:2013-08-05 (月) 18:16:38 (3879d)
IA-32/汎用命令
概要
- 汎用命令は、IA-32 プロセッサ上で動作するアプリケーションとシステム・ソフトウェアを作成するときにプログラマがよく使用する、基本的なデータ転送操作、算術演算、論理演算、プログラム・フロー操作、ストリング操作を実行する。
- 汎用命令は、メモリ内、汎用レジスタ(EAX、EBX?、ECX?、EDX?、EDI?、ESI?、EBP?、ESP)内、EFLAGSレジスタ内のデータを操作する。
- また、汎用命令は、メモリ内、汎用レジスタ内、セグメントレジスタ(CS、DS、SS、ES、FS?、GS?)内のアドレス情報も操作する。
含まれる命令
データ転送命令
メモリと汎用レジスタ/セグメントレジスタの間でデータを転送する。また、データ転送命令は、条件付き転送、スタックアクセス、データ変換などの特殊な操作も実行
2進整数算術命令
- メモリまたは汎用レジスタ内のバイト整数、ワード整数、ダブルワード整数の基本的な2 進整数計算を実行
10進算術命令
論理演算命令
シフト命令とローテート命令
- ワード・オペランドおよびダブルワード・オペランド内のビットのシフトとローテートを実行
ビット命令とバイト命令
- TEST - 論理比較
プログラム制御命令
- ジャンプ、条件付きジャンプ、ループ、コールとリターンの操作を実行して、プログラム・フローを制御
- N - Not
- E - Equal
- Z - Zero
- G - 符号ありGreater
- L - 符号ありLess
- A - Above
- B - Below
JMP Jump ジャンプ JE?/JZ? Jump if equal/Jump if zero 等しい場合はジャンプ/ ゼロの場合はジャンプ JNE?/JNZ Jump if not equal/Jump if not zero 等しくない場合はジャンプ/ ゼロでない場合はジャンプ JA?/JNBE? Jump if above/Jump if not below or equal より大きい場合はジャンプ/ より小さくなく等しくない場合はジャンプ JAE?/JNB? Jump if above or equal/Jump if not below より大きいか等しい場合はジャンプ/ より小さくない場合はジャンプ JB/JNAE? Jump if below/Jump if not above or equal より小さい場合はジャンプ/ より大きくなく等しくない場合はジャンプ JBE?/JNA Jump if below or equal/Jump if not above より小さいか等しい場合はジャンプ/ より大きくない場合はジャンプ JG?/JNLE? Jump if greater/Jump if not less or equal より大きい場合はジャンプ/ より小さくなく等しくない場合はジャンプ JGE?/JNL? Jump if greater or equal/Jump if not less より大きいか等しい場合はジャンプ/ より小さくない場合はジャンプ JL?/JNGE? Jump if less/Jump if not greater or equal より小さい場合はジャンプ/ より大きくなく等しくない場合はジャンプ JLE?/JNG? Jump if less or equal/Jump if not greater より小さいか等しい場合はジャンプ/ より大きくない場合はジャンプ JC? Jump if carry キャリーありの場合はジャンプ JNC? Jump if not carry キャリーなしの場合はジャンプ JO? Jump if overflow オーバーフローありの場合はジャンプ JNO? Jump if not overflow オーバーフローなしの場合はジャンプ JS Jump if sign(negative) 符号付きの場合(負の場合)はジャンプ JNS? Jump if not sign(non-negative) 符号なしの場合(負でない場合)はジャンプ JPO?/JNP? Jump if parity odd/Jump if not parity 奇数パリティの場合はジャンプ/ パリティなしの場合はジャンプ JPE?/JP? Jump if parity even/Jump if parity 偶数パリティの場合はジャンプ/ パリティありの場合はジャンプ JCXZ?/JECXZ? Jump register CX zero/Jump register ECX zero CX レジスタがゼロの場合はジャンプ/ECX レジスタがゼロの場合はジャンプ LOOP? Loop with ECX counter ECX をカウンタとしてループ LOOPZ?/LOOPE? Loop with ECX and zero/Loop with ECX and equal ECX をカウンタに、ゼロの場合はループ/ECX をカウンタに、等しい場合はループ LOOPNZ?/LOOPNE? Loop with ECX and not zero/Loop with ECX and not equal ECX をカウンタに、ゼロでない場合はループ/ECX をカウンタに、等しくない場合はループ CALL Call procedure プロシージャの呼び出し RET? Return 戻る IRET? Return from interrupt 割り込みから戻る INT Software interrupt ソフトウェア割り込み INTO? Interrupt on overflow オーバーフローで割り込み BOUND? Detect value out of range 範囲外の値を検出 ENTER? High-level procedure entry 高度なプロシージャの開始 LEAVE? High-level procedure exit 高度なプロシージャの終了
ストリング命令
- バイト・ストリングを操作し、メモリとの間で転送
I/O 命令
- プロセッサのI/O ポートと、レジスタまたはメモリの間でデータを転送
ENTER?命令とLEAVE?命令
- ブロック構造言語でのプロシージャ・コールに対してマシン語をサポート
フラグ制御命令
- EFLAGSレジスタ内のフラグを操作
セグメント・レジスタ命令
- セグメント・レジスタ内にfar ポインタ(セグメント・アドレス)をロード