マイクロプロセッサ-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 −オーバーフローフラグOF = 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 −割り込みサービスからメインプログラムに戻るために使用されます