プロセッサ命令の概観

この節では、プロセッサ命令にどのようなものがあるのか概観します。ここで取り上げる命令はプロセッサ命令のすべてではありません。すべてのプロセッサ命令の一覧が「プロセッサ命令一覧」に示されていますので、そちらもご覧ください。

転送(代入、複写)命令

レジスタやメモリの値をそのままコピーする命令です。定数の代入も可能です。フラグレジスタは変化しません。

    MOV    転送
    XCHG    値を取り替える
    LDS    32 ビット値の転送(16 ビット分は DS へ)
    LES    32 ビット値の転送(16 ビット分は ES へ)
    LEA    オフセットアドレスの代入
    PUSH    スタックプッシュ
    POP    スタックポップ

算術演算命令

整数の四則演算を行います。乗算と除算では、オペランド値が符号を持つかどうかによって別の処理方法を必要とするため、各々2 種類の命令が用意されています。

加算と減算では、オペランド値が符号を持つかどうかによらず同じ命令で処理できます(そうなるように符号付き整数の内部表現形式が定められているからです)。加算と減算では、16 ビット以上の数値に対する演算を考慮して、桁上がりに対応した命令も用意されています。

    ADD    加算
    ADC    加算(桁上がりを考慮)
    SUB    減算
    SBB    減算(桁上がりを考慮)
    MUL    乗算
    IMUL    乗算(符号を考慮)
    DIV    除算
    IDIV    除算(符号を考慮)
    NEG    符号反転

インクリメントとデクリメント

オペランドの値を+1、ー1 する命令です。算術演算と違ってキャリーフラグは変化しません。

    INC    インクリメント(+1)
    DEC    デクリメント(-1)

論理演算命令

ビットごとの論理演算を行う命令です。

    AND    対応ビットが共に 1 なら 1、そうでなければ 0。
    OR    対応ビットが共に 0 なら 0、そうでなければ 1。
    XOR    対応ビットが共に 0 か 1 なら 0、そうでなければ 1。
    NOT    対応ビットが 0 なら 1、1 なら 0。

比較命令

比較命令の演算はフラグレジスタを設定するだけであり、オペランドの値は変更しません。

    CMP    減算による比較
    TEST    AND 演算による比較

シフト命令と回転命令

オペランドの内容をビットシフトします。シフト数を CL レジスタで指定することも可能です。回転(ローテイト)命令では端から桁落ちしたビットが反対側のビットから入ってきます。

    SHL    左シフト
    SHR    右シフト
    SAL    左シフト(SHL と同じ)
    SAR    右シフト(符号ビットを保存)
    ROL    左回転
    ROR    右回転
    RCL    左回転(キャリーフラグを間にはさんだ回転)
    RCR    右回転(キャリーフラグを間にはさんだ回転)

分岐命令

プログラムの流れを変更する命令です。(8086 分岐命令)

ストリング命令

配列のような長大なデータを一括して扱う命令であり、通常リピートプレフィクスとともに使用します。(8086 ストリング命令)

プレフィクス命令

次に続く命令の動作を修飾する命令の総称です。プレフィクス命令にはおもに次の 2 種類があります。(8086 プレフィクス命令)

以上の他にも多くの命令が存在します。「プロセッサ命令一覧」では、すべての命令とその機能、オペランド型、機械語サイズ、フラグレジスタへの影響をくまなく記述します。

[目次]