最終更新:2013-08-05 (月) 18:16:38 (2291d)  

IA-32/汎用命令 はてなブックマークを見る
Top / IA-32 / 汎用命令

概要

  • 汎用命令は、IA-32 プロセッサ上で動作するアプリケーションとシステム・ソフトウェアを作成するときにプログラマがよく使用する、基本的なデータ転送操作、算術演算、論理演算、プログラム・フロー操作、ストリング操作を実行する。
  • 汎用命令は、メモリ内、汎用レジスタEAXEBX?ECX?EDX?EDI?ESI?EBP?ESP)内、EFLAGSレジスタ内のデータを操作する。
  • また、汎用命令は、メモリ内、汎用レジスタ内、セグメントレジスタCSDSSSES?FS?GS?)内のアドレス情報も操作する。

含まれる命令

データ転送命令

メモリ汎用レジスタ/セグメントレジスタの間でデータを転送する。また、データ転送命令は、条件付き転送、スタックアクセス、データ変換などの特殊な操作も実行

2進整数算術命令

  • メモリまたは汎用レジスタ内のバイト整数、ワード整数、ダブルワード整数の基本的な2 進整数計算を実行
    ADDInteger Add
    ADCAdd with Carry
    SUBSubstract
    SBB?Substract with Borrow
    IMUL?Signed multiply
    MULUnsigned multiply
    IDIV?Signed divide
    DIVUnsigned divide
    INC?Increment
    DEC?Decrement
    NEG?Negate
    CMPCompare

10進算術命令

  • 2進化10進数?BCD)データの10進算術演算

論理演算命令

  • バイト値、ワード値、ダブルワード値の基本的なANDORXOR?NOT論理演算を実行

シフト命令とローテート命令

  • ワード・オペランドおよびダブルワード・オペランド内のビットのシフトとローテートを実行

ビット命令とバイト命令

プログラム制御命令

  • ジャンプ、条件付きジャンプ、ループ、コールとリターンの操作を実行して、プログラム・フローを制御
  • N - Not
  • E - Equal
  • Z - Zero
  • G - 符号ありGreater
  • L - 符号ありLess
  • A - Above
  • B - Below
  • JMPJumpジャンプ
    JE?/JZ?Jump if equal/Jump if zero等しい場合はジャンプ/ ゼロの場合はジャンプ
    JNE?/JNZJump 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?/JNAJump 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オーバーフローなしの場合はジャンプ
    JSJump 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 zeroCX レジスタがゼロの場合はジャンプ/ECX レジスタがゼロの場合はジャンプ
    LOOP?Loop with ECX counterECX をカウンタとしてループ
    LOOPZ?/LOOPE?Loop with ECX and zero/Loop with ECX and equalECX をカウンタに、ゼロの場合はループ/ECX をカウンタに、等しい場合はループ
    LOOPNZ?/LOOPNE?Loop with ECX and not zero/Loop with ECX and not equalECX をカウンタに、ゼロでない場合はループ/ECX をカウンタに、等しくない場合はループ
    CALLCall procedureプロシージャの呼び出し
    RET?Return戻る
    IRET?Return from interrupt割り込みから戻る
    INTSoftware 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 ポインタ(セグメント・アドレス)をロード

その他の命令

  • 実効アドレスのロード、「非操作(no-operation)」の実行、プロセッサ識別情報の取得など