8086 一般命令(分岐命令、ストリング命令、プレフィクス命令を除く)



命令 オペランド サイズ 説明 フラグ
AAA   1 加算結果の AL 値をアンパック BCD 数に補正/桁上がり時は AH を+1 ODITSZAPC
?...??X?X
AAD   2 AX にあるアンパック BCD 数を 2 進数に補正 ODITSZAPC
?...XX?X?
AAM   2 乗算結果の AL 値をアンパック BCD 数に補正し AX へ ODITSZAPC
?...XX?X?
AAS   1 減算結果の AL 値をアンパック BCD 数に補正/ボロー時は AH をー1 ODITSZAPC
?...??X?X
ADC R * RM
A , I
RM, I
2+M
1+M
2+M+I
加算(キャリー考慮)
OP1 ← OP1 + OP2 + CF
ODITSZAPC
X...XXXXX
ADD R * RM
A , I
RM, I
2+M
1+I
2+M+I
加算
OP1 ← OP1 + OP2
ODITSZAPC
X...XXXXX
AND R * RM
A , I
RM, I
2+M
1+I
2+M+I
論理 AND 演算
OP1 ← OP1 AND OP2
ODITSZAPC
0...XX?X0
CBW   1 AL の最上位ビットを AH の全ビットにコピー(符号拡張) ODITSZAPC
.........
CLC   1 CF をクリア ........0
CLD   1 DF をクリア .0.......
CLI   1 IF をクリア ..0......
CMI   1 CF を反転 ........X
CMP R * RM
A , I
RM, I
2+M
1+I
2+M+I
比較
OP1 - OP2
フラグのみ設定し、OP1 はそのまま
ODITSZAPC
X...XXXXX
CWD   1 AX の最上位ビットを DX の全ビットにコピー(符号拡張) ODITSZAPC
.........
DAA   1 加算結果 AL 値をパック BCD 数に補正 ?...XXXXX
DAS   1 減算結果 AL 値をパック BCD 数に補正 ?...XXXXX
DEC R16
RM
1
2+M
デクリメント
OP ← OP - 1
ODITSZAPC
X...XXXX.
DIV RM 2+M 符号なし除算
DX:AX(AX)を OP で割り、商をAX(AL)、余りを DX(AH)に入れる/括弧内は 8 ビット OP 時
ODITSZAPC
?...?????
ESC I, RM 2+M 数値演算コプロセッサ命令の簡略形OP1 は命令を表す 6 ビット値 ODITSZAPC
.........
HLT   1 プロセッサをホールト状態にする .........
IDIV RM 2+M 符号付き除算
詳細は DIV 命令に準ずる
ODITSZAPC
?...?????
IMUL RM 2+M 符号付き乗算
詳細は MUL 命令に準ずる
ODITSZAPC
X...????X
IN A, I8
A, DX
2
1
指定番号の I/O ポートから AX
(AL)に入力する
ODITSZAPC
.........
INC R16
RM
1
2+M
インクリメント
OP ← OP + 1
ODITSZAPC
X...XXXX.
INT 3
I8
1
2
ソフトウェア割り込み ODITSZAPC
..00.....
INTO   1 OF セット時にソフトウェア割り込み4 番を発生 ODITSZAPC
..XX.....
IRET   1 割り込み先からのリターン
フラグレジスタを復元
ODITSZAPC
XXXXXXXXX
LAHF   1 AH ← FLAGS 下位 8 ビット .........
LDS R16,M32 2+M DS:OP1 ← OP2
OP2 の下位が OP1、上位が DS へ
ODITSZAPC
.........
LEA R16, M 2+M OP1 ← OP2 のオフセット .........
LES R16,M32 2+M ES:OP1 ← OP2
OP2 の下位が OP1、上位が ES へ
ODITSZAPC
.........
MOV A * M
R * RM
R , I
RM, I
SR, RM
1+M
2+M
1+I
2+M+I
2+M
代入
OP1 ← OP2
ODITSZAPC
.........
MUL RM 2+M 符号なし乗算
AX(AL)に OP を掛け、結果をDX:AX(AX)に入れる(括弧内は 8 ビット OP 時)
ODITSZAPC
X...????X
NEG RM 2+M 2 の補数を得る(符号反転)
OP1 ← - OP1
ODITSZAPC
X...XXXXX
NOP   1 なにもしない .........
NOT RM 2+M 1 の補数を得る(ビット反転)
OP1 ← NOT OP1
ODITSZAPC
.........
OR R * RM
A , I
RM, I
2+M
1+I
2+M+I
論理 OR 演算
OP1 ← OP1 OR OP2
ODITSZAPC
0...XX?X0
OUT I8, A
DX, A
2
1
指定番号の I/O ポートへ AX(AL)を出力する ODITSZAPC
.........
POP R16
M
SR
1
2+M
1
スタックのポップ
@ OP ← SS:[SP]
A SP ← SP + 2
拡張構文
ODITSZAPC
.........
POPF   1 フラグレジスタへスタックをポップ XXXXXXXXX
PUSH R16
M
SR
1
2+M
1
スタックのプッシュ
@ SP ← SP - 2
A SS:[SP] ← OP
拡張構文
PUSHW/PUSHD
ODITSZAPC
.........
PUSHF   1 フラグレジスタをスタックへプッシュ .........
RCL RM, 1
RM, CL
2+M
2+M
左ビット回転(キャリーをはさむ)
OP2 はカウント数
CF ← MSB ... ← ... LSB ← CF
ODITSZAPC
X.......X
RCR RM, 1
RM, CL
2+M
2+M
右ビット回転(キャリーをはさむ)
OP2 はカウント数
CF → MSB ... → ... LSB → CF
ODITSZAPC
X.......X
RET
I
1
3
サブルーチンからのリターン ODITSZAPC
.........
RETF
I
1
3
FAR サブルーチンからのリターン ODITSZAPC
.........
RETN
I
1
3
NEAR サブルーチンからのリターン ODITSZAPC
.........
ROL RM, 1
RM, CL
2+M
2+M
左ビット回転/OP2 はカウント数
CF ← MSB ... ← ... LSB ← MSB
ODITSZAPC
X.......X
ROR RM, 1
RM, CL
2+M
2+M
右ビット回転/OP2 はカウント数
LSB → MSB ... → ... LSB → CF
ODITSZAPC
X.......X
SAHF   1 FLAGS 下位 8 ビット ← AH ....XXXXX
SAL RM, 1
RM, CL
2+M
2+M
左ビットシフト/OP2 はカウント数
CF ← MSB ... ← ... LSB ← 0
SHL と同等
ODITSZAPC
X...XX?XX
SAR RM, 1
RM, CL
2+M
2+M
右ビットシフト/OP2 はカウント数
MSB → MSB ... → ... LSB → CF
符号(MSB)は保存
ODITSZAPC
0...XX?XX
SBB R * RM
A , I
RM, I
2+M
1+M
2+M+I
減算(キャリー考慮)
OP1 ← OP1 - OP2 - CF
ODITSZAPC
X...XXXXX
SHL RM, 1
RM, CL
2+M
2+M
左ビットシフト/OP2 はカウント数
CF ← MSB ... ← ... LSB ← 0
ODITSZAPC
X...XX?XX
SHR RM, 1
RM, CL
2+M
2+M
右ビットシフト/OP2 はカウント数
0 → MSB ... → ... LSB → CF
ODITSZAPC
0...XX?XX
STC   1 CF をセット ........1
STD   1 DF をセット .1.......
STI   1 IF をセット ..1......
SUB R * RM
A , I
RM, I
2+M
1+M
2+M+I
減算
OP1 ← OP1 - OP2
ODITSZAPC
X...XXXXX
TEST R * RM
A , I
RM, I
2+M
1+I
2+M+I
テスト
OP1 AND OP2
フラグのみ設定し、OP1 はそのまま
ODITSZAPC
0...XX?X0
WAIT   1 プロセッサをウェイト状態にする .........
XCHG AX* R16
R , RM
1
2+M
入れ替え
OP1 ← OP2、OP2 ← OP1
ODITSZAPC
.........
XLAT
M
1
1
テーブル変換 AL ← [BX+AL]
SR 使用時はダミーOP を指定
ODITSZAPC
.........
XOR R * RM
A , I
RM, I
2+M
1+I
2+M+I
論理 XOR 演算
OP1 ← OP1 XOR OP2
ODITSZAPC
0...XX?X0



[目次]