Microprocessor-8086-instruction-sets

提供:Dev Guides
移動先:案内検索

マイクロプロセッサ-8086命令セット

8086マイクロプロセッサは、8種類の命令をサポートしています-

  • データ転送手順
  • 算術命令
  • ビット操作手順
  • 文字列命令
  • プログラム実行転送命令(分岐およびループ命令)
  • プロセッサ制御命令
  • 反復制御命令
  • 割り込み命令

これらの命令セットについて詳しく説明します。

データ転送手順

これらの命令は、ソースオペランドからデスティネーションオペランドにデータを転送するために使用されます。 以下は、このグループの下の指示のリストです-

単語を転送する指示

  • MOV -指定されたソースから指定された宛先にバイトまたはワードをコピーするために使用されます。
  • PPUSH -スタックの一番上に単語を置くために使用されます。
  • POP -スタックの最上部から指定された場所に単語を取得するために使用されます。
  • PUSHA -すべてのレジスタをスタックに入れるために使用されます。
  • POPA -スタックからすべてのレジスタにワードを取得するために使用されます。
  • XCHG -2つの場所からデータを交換するために使用されます。
  • XLAT -メモリ内のテーブルを使用してALのバイトを変換するために使用されます。

入出力ポート転送の手順

  • IN -指定されたポートからアキュムレータにバイトまたはワードを読み取るために使用されます。
  • OUT -アキュムレータから提供されたポートにバイトまたはワードを送信するために使用されます。

アドレスを転送する手順

  • LEA -指定されたレジスタにオペランドのアドレスをロードするために使用されます。
  • LDS -メモリからDSレジスタおよびその他の提供されたレジスタをロードするために使用
  • LES -メモリからESレジスタおよびその他の提供されたレジスタをロードするために使用されます。

フラグレジスタを転送する命令

  • LAHF -AHにフラグレジスタの下位バイトをロードするために使用されます。
  • SAHF -AHレジスタをフラグレジスタの下位バイトに格納するために使用されます。
  • PUSHF -スタックの最上部のフラグレジスタをコピーするために使用されます。
  • POPF -スタックの最上部の単語をフラグレジスタにコピーするために使用されます。

算術命令

これらの命令は、加算、減算、乗算、除算などの算術演算を実行するために使用されます。

以下は、このグループの下の指示のリストです-

追加を実行する手順

  • ADD -提供されたバイトをバイト/ワード/ワードに追加するために使用されます。
  • ADC -キャリーで追加するために使用されます。
  • INC -指定されたバイト/ワードを1増やすために使用されます。
  • AAA -追加後にASCIIを調整するために使用されます。
  • DAA -加算/減算操作後に小数を調整するために使用されます。

減算を実行する手順

  • SUB -ワードからバイト/ワードからバイトを減算するために使用されます。
  • SBB -ボローを使用した減算の実行に使用されます。
  • DEC -指定されたバイト/ワードを1減らすために使用されます。
  • NPG -指定されたバイト/ワードの各ビットを否定し、1/2の補数を追加するために使用されます。
  • CMP -2つの提供されたバイト/ワードを比較するために使用されます。
  • AAS -減算後にASCIIコードを調整するために使用されます。
  • DAS -減算後に小数を調整するために使用されます。

乗算を実行するための命令

  • MUL -符号なしバイトをバイトごと、ワードごとに乗算するために使用されます。
  • IMUL -符号付きバイトとバイト/ワード/ワードを乗算するために使用されます。
  • AAM -乗算後にASCIIコードを調整するために使用されます。

除算の実行手順

  • DIV -符号なしワードをバイト単位または符号なしダブルワード単位で分割するために使用されます。
  • IDIV -符号付きワードをバイト単位または符号付きダブルワード単位で分割するために使用されます。
  • AAD -除算後にASCIIコードを調整するために使用されます。
  • CBW -ワードの上位バイトを下位バイトの符号ビットのコピーで埋めるために使用されます。
  • CWD -ダブルワードの上位ワードを下位ワードの符号ビットで埋めるために使用されます。

ビット操作手順

これらの命令は、データビットが関係する操作を実行するために使用されます。 論理、シフトなどの操作

以下は、このグループの下の指示のリストです-

論理演算を実行する手順

  • NOT -バイトまたはワードの各ビットを反転するために使用されます。
  • AND -バイト/ワードの各ビットを別のバイト/ワードの対応するビットに追加するために使用されます。
  • OR -バイト/ワードの各ビットを別のバイト/ワードの対応するビットで乗算するために使用されます。
  • XOR -バイト/ワードの各ビットと別のバイト/ワードの対応するビットで排他的論理和演算を実行するために使用されます。
  • TEST -オペランドに影響を与えることなく、フラグを更新するためにオペランドを追加するために使用されます。

シフト操作を実行するための指示

  • SHL/SAL -バイト/ワードのビットを左にシフトし、LSBにゼロ(S)を入れるために使用されます。
  • SHR -バイト/ワードのビットを右にシフトし、MSBにゼロ(S)を入れるために使用されます。
  • SAR -バイト/ワードのビットを右にシフトし、古いMSBを新しいMSBにコピーするために使用されます。

回転操作を実行する手順

  • ROL -バイト/ワードのビットを左に回転させるために使用されます。 MSBからLSBおよびキャリーフラグ[CF]。
  • ROR -バイト/ワードのビットを右に回転させるために使用されます。 LSBからMSBおよびキャリーフラグ[CF]へ。
  • RCR -バイト/ワードのビットを右に回転させるために使用されます。 LSBからCFおよびCFからMSB。
  • RCL -バイト/ワードのビットを左に回転させるために使用されます。 MSBからCFおよびCFからLSB。

文字列命令

文字列はバイト/ワードのグループであり、それらのメモリは常に順番に割り当てられます。

以下は、このグループの下の指示のリストです-

  • REP -CX≠0になるまで指定された命令を繰り返すために使用されます。
  • REPE/REPZ -CX = 0またはゼロフラグZF = 1になるまで、指定された命令を繰り返すために使用されます。
  • REPNE/REPNZ -CX = 0またはゼロフラグZF = 1になるまで、指定された命令を繰り返すために使用されます。
  • MOVS/MOVSB/MOVSW -バイト/ワードをある文字列から別の文字列に移動するために使用されます。
  • COMS/COMPSB/COMPSW -2つの文字列バイト/ワードを比較するために使用されます。
  • INS/INSB/INSW -I/Oポートから指定されたメモリ位置への入力文字列/バイト/ワードとして使用されます。
  • OUTS/OUTSB/OUTSW -指定されたメモリ位置からI/Oポートへの出力文字列/バイト/ワードとして使用されます。
  • SCAS/SCASB/SCASW -文字列をスキャンし、そのバイトをALのバイトと比較するか、文字列の単語とAXの単語を比較するために使用されます。
  • LODS/LODSB/LODSW -文字列バイトをALに、または文字列ワードをAXに格納するために使用されます。

プログラム実行転送命令(分岐およびループ命令)

これらの命令は、実行中に命令を転送/分岐するために使用されます。 次の指示が含まれています-

条件なしで実行中に命令を転送する命令-

  • CALL -プロシージャを呼び出し、リターンアドレスをスタックに保存するために使用します。
  • RET -プロシージャからメインプログラムに戻るために使用します。
  • JMP -次の命令に進むために提供されたアドレスにジャンプするために使用されます。

いくつかの条件で実行中に命令を転送する命令-

  • JA/JNBE -上/下/等しくない命令が満たされた場合にジャンプするために使用されます。
  • JAE/JNB -上下の命令が満たされる場合にジャンプするために使用されます。
  • JBE/JNA -命令が以下/等しい/上でない場合にジャンプするために使用されます。
  • JC -キャリーフラグCF = 1の場合にジャンプするために使用
  • JE/JZ -等しい/ゼロのフラグZF = 1の場合にジャンプするために使用
  • JG/JNLE -より大きい/より小さくない/等しい命令が満たされる場合にジャンプするために使用
  • JGE/JNL -命令が満たす以上/等しい/以上の場合にジャンプするために使用されます。
  • JL/JNGE -命令がより小さい/大きくない/等しい場合にジャンプするために使用されます。
  • JLE/JNG -命令が満たすよりも小さい/等しい/大きくない場合にジャンプするために使用されます。
  • JNC -キャリーフラグがない場合のジャンプに使用(CF = 0)
  • JNE/JNZ -等しくない場合のジャンプに使用/フラグZF = 0
  • JNO -オーバーフローフラグがない場合のジャンプに使用される= 0
  • JNP/JPO -パリティ/パリティ奇数ではない場合のジャンプに使用PF = 0
  • JNS -SF = 0に署名しない場合にジャンプするために使用
  • JO -オーバーフローフラグOF = 1の場合にジャンプするために使用
  • JP/JPE -パリティ/パリティがPF = 1の場合にジャンプするために使用
  • JS -符号フラグSF = 1の場合にジャンプするために使用

プロセッサ制御命令

これらの命令は、フラグ値を設定/リセットすることにより、プロセッサの動作を制御するために使用されます。

このグループの下の指示は次のとおりです-

  • STC -キャリーフラグCFを1に設定するために使用
  • CLC -キャリーフラグCFを0にクリア/リセットするために使用
  • CMC -キャリーフラグCFの状態で補数を設定するために使用されます。
  • STD -方向フラグDFを1に設定するために使用
  • CLD -方向フラグDFを0にクリア/リセットするために使用
  • STI -割り込み有効フラグを1に設定するために使用します。つまり、INTR入力を有効にします。
  • CLI -割り込み有効化フラグを0にクリアする、つまりINTR入力を無効にするために使用します。

反復制御命令

これらの命令は、指定された命令を何回も実行するために使用されます。 以下は、このグループの下の指示のリストです-

  • LOOP -条件が満たされるまで、つまりCX = 0になるまで、命令のグループをループするために使用されます
  • LOOPE/LOOPZ -ZF = 1&CX = 0を満たすまで、命令のグループをループするために使用
  • LOOPNE/LOOPNZ -ZF = 0&CX = 0を満たすまで、命令のグループをループするために使用
  • JCXZ -CX = 0の場合、提供されたアドレスにジャンプするために使用

割り込み命令

これらの命令は、プログラム実行中に割り込みを呼び出すために使用されます。

  • INT -実行中にプログラムを中断し、指定されたサービスを呼び出すために使用されます。
  • INTO -OF = 1の場合、実行中にプログラムを中断するために使用
  • IRET -割り込みサービスからメインプログラムに戻るために使用