Complete 8086 Instruction Set Guide
Complete 8086 Instruction Set Guide
Quick reference:
CMPSB MOV
AAA CMPSW JAE JNBE JPO MOVSB RCR SCASB
AAD CWD JB JNC JS MOVSW REP SCASW
AAM DAA JBE JNE JZ MUL REPE SHL
AAS DAS JC JNG LAHF NEG REPNE SHR
ADC DEC JCXZ JNGE LDS NOP REPNZ STC
ADD DIV JE JNL LEA NOT REPZ STD
AND HLT JG JNLE LES OR RET STI
CALL IDIV JGE JNO LODSB OUT RETF STOSB
CBW IMUL JL JNP LODSW POP ROL STOSW
CLC IN JLE JNS LOOP POPA ROR SUB
CLD INC JMP JNZ LOOPE POPF SAHF TEST
CLI INT JNA JO LOOPNE PUSH SAL XCHG
CMC INTO JNAE JP LOOPNZ PUSHA SAR XLATB
CMP IRET JNB JPE LOOPZ PUSHF SBB XOR
JA RCL
Operand types:
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
SREG: DS, ES, SS, and only as second operand: CS.
memory: [BX], [BX+SI+7], variable, etc...(see Memory Access).
immediate: 5, -24, 3Fh, 10001101b, etc...
Notes:
When two operands are required for an instruction they are separated
by comma. For example: REG, memory
When there are two operands, both operands must have the same size
(except shift and rotate instructions). For example:
AL, DL
DX, AX
m1 DB ?
AL, m1
m2 DW ?
AX, m2
Some instructions allow several operand combinations. For example:
memory, immediate
REG, immediate
memory, REG
REG, SREG
Some examples contain macros, so it is advisable to use Shift + F8 hot
key to Step Over (to make macro code execute at maximum speed set
step delay to zero), otherwise emulator will step through each
instruction of a macro. Here is an example that uses PRINTN macro:
#make_COM#
include '[Link]'
ORG 100h
MOV AL, 1
MOV BL, 2
PRINTN 'Hello World!' ; macro.
MOV CL, 3
PRINTN 'Welcome!' ; macro.
RET
C Z S O P A
R ? ? ? ? R
C Z S O P A
? r r ? r ?
RET
C Z S O P A
? r r ? r ?
Algorithm:
if low nibble of AL > 9 or AF = 1 then:
AL = AL - 6
AH = AH - 1
AF = 1
CF = 1
else
No AF = 0
AAS
operands
CF = 0
in both cases:
clear the high nibble of AL.
Example:
MOV AX, 02FFh ; AH = 02, AL = 0FFh
AAS ; AH = 01, AL = 09
RET
C Z S O P A
R ? ? ? ? R
R r r r r R
Add.
Algorithm:
operand1 = operand1 + operand2
REG, Example:
memory
memory, MOV AL, 5 ; AL = 5
REG
ADD AL, -3 ; AL = 2
ADD REG, REG
memory, RET
immediate
REG, C Z S O P A
immediate
R r r r r R
0 r r 0 r
CALL p1
ADD AX, 1
RET ; return to OS.
p1 PROC ; procedure declaration.
MOV AX, 1234h
RET ; return to caller.
p1 ENDP
C Z S O P A
Unchanged
C Z S O P A
unchanged
Compare.
Algorithm:
operand1 - operand2
result is not stored anywhere, flags are set (OF, SF, ZF, AF,
REG, PF, CF) according to result.
memory Example:
memory,
REG MOV AL, 5
CMP REG, REG MOV BL, 5
memory,
immediate CMP AL, BL ; AL = 5, ZF = 1 (so equal!)
REG,
RET
immediate
C Z S O P A
r r r r r r
else
SI = SI - 1
DI = DI - 1
Example:
see [Link] in Samples.
C Z S O P A
r r r r r r
C Z S O P A
r r r r r r
else
DX = 0
Example:
MOV DX, 0 ; DX = 0
MOV AX, 0 ; AX = 0
MOV AX, -5 ; DX AX = 00000h:0FFFBh
CWD ; DX AX = 0FFFFh:0FFFBh
RET
C Z S O P A
unchanged
C Z S O P A
r r r r r r
Algorithm:
if low nibble of AL > 9 or AF = 1 then:
AL = AL - 6
AF = 1
if AL > 9Fh or CF = 1 then:
AL = AL - 60h
CF = 1
Example:
MOV AL, 0FFh ; AL = 0FFh (-1)
DAS ; AL = 99h, CF = 1
RET
C Z S O P A
r r r r r r
Decrement.
Algorithm:
operand = operand - 1
Example:
MOV AL, 255 ; AL = 0FFh (255 or -1)
REG
DEC AL ; AL = 0FEh (254 or -2)
DEC memory
RET
Z S O P A
r r r r r
CF - unchanged!
RET
C Z S O P A
? ? ? ? ? ?
Example:
MOV AX, 5
No HLT
HLT
operands
C Z S O P A
unchanged
C Z S O P A
? ? ? ? ? ?
Signed multiply.
Algorithm:
when operand is a byte:
AX = AL * operand.
when operand is a word:
(DX AX) = AX * operand.
Example:
REG
IMUL memory MOV AL, -2
MOV BL, -4
IMUL BL ; AX = 8
RET
C Z S O P A
r ? ? r ? ?
C Z S O P A
unchanged
Increment.
Algorithm:
operand = operand + 1
Example:
REG MOV AL, 4
INC memory
INC AL ; AL = 5
RET
Z S O P A
r r r r r
CF - unchanged!
Example:
MOV AH, 0Eh ; teletype.
MOV AL, 'A'
INT 10h ; BIOS interrupt.
RET
C Z S O P A I
unchanged 0
Algorithm:
if OF = 1 then INT 4
Example:
; -5 - 127 = -132 (not in -128..127)
No ; the result of SUB is wrong (124),
INTO
operands
; so OF = 1 is set:
MOV AL, -5
SUB AL, 127 ; AL = 7Ch (124)
INTO ; process error.
RET
JNAE label Short Jump if first operand is Not Above and Not Equal to
second operand (as set by CMP instruction). Unsigned.
Algorithm:
if CF = 1 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 2
CMP AL, 5
JNAE label1
PRINT 'AL >= 5.'
JMP exit
label1:
PRINT 'AL < 5.'
exit:
RET
C Z S O P A
unchanged
JNB label Short Jump if first operand is Not Below second operand (as
set by CMP instruction). Unsigned.
Algorithm:
if CF = 0 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 7
CMP AL, 5
JNB label1
PRINT 'AL < 5.'
JMP exit
label1:
PRINT 'AL >= 5.'
exit:
RET
C Z S O P A
unchanged
JNBE label Short Jump if first operand is Not Below and Not Equal to
second operand (as set by CMP instruction). Unsigned.
Algorithm:
if (CF = 0) and (ZF = 0) then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 7
CMP AL, 5
JNBE label1
PRINT 'AL <= 5.'
JMP exit
label1:
PRINT 'AL > 5.'
exit:
RET
C Z S O P A
unchanged
Algorithm:
if CF = 0 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 2
ADD AL, 3
C Z S O P A
unchanged
JNE label Short Jump if first operand is Not Equal to second operand
(as set by CMP instruction). Signed/Unsigned.
Algorithm:
if ZF = 0 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 2
CMP AL, 3
JNE label1
PRINT 'AL = 3.'
JMP exit
label1:
PRINT 'Al <> 3.'
exit:
RET
C Z S O P A
unchanged
JNG label Short Jump if first operand is Not Greater then second
operand (as set by CMP instruction). Signed.
Algorithm:
if (ZF = 1) and (SF <> OF) then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 2
CMP AL, 3
JNG label1
PRINT 'AL > 3.'
JMP exit
label1:
PRINT 'Al <= 3.'
exit:
RET
C Z S O P A
unchanged
JNGE label Short Jump if first operand is Not Greater and Not Equal to
second operand (as set by CMP instruction). Signed.
Algorithm:
if SF <> OF then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 2
CMP AL, 3
JNGE label1
PRINT 'AL >= 3.'
JMP exit
label1:
PRINT 'Al < 3.'
exit:
RET
C Z S O P A
unchanged
JNL label Short Jump if first operand is Not Less then second operand
(as set by CMP instruction). Signed.
Algorithm:
if SF = OF then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 2
CMP AL, -3
JNL label1
PRINT 'AL < -3.'
JMP exit
label1:
PRINT 'Al >= -3.'
exit:
RET
C Z S O P A
unchanged
JNLE label Short Jump if first operand is Not Less and Not Equal to
second operand (as set by CMP instruction). Signed.
Algorithm:
if (SF = OF) and (ZF = 0) then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 2
CMP AL, -3
JNLE label1
PRINT 'AL <= -3.'
JMP exit
label1:
PRINT 'Al > -3.'
exit:
RET
C Z S O P A
unchanged
Algorithm:
if OF = 0 then jump
Example:
; -5 - 2 = -7 (inside -128..127)
; the result of SUB is correct,
; so OF = 0:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, -5
SUB AL, 2 ; AL = 0F9h (-7)
JNO label1
PRINT 'overflow!'
JMP exit
label1:
PRINT 'no overflow.'
exit:
RET
C Z S O P A
unchanged
JNP label Short Jump if No Parity (odd). Only 8 low bits of result are
checked. Set by CMP, SUB, ADD, TEST, AND, OR, XOR
instructions.
Algorithm:
if PF = 0 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 00000111b ; AL = 7
OR AL, 0 ; just set flags.
JNP label1
PRINT 'parity even.'
JMP exit
label1:
PRINT 'parity odd.'
exit:
RET
C Z S O P A
unchanged
JNS label Short Jump if Not Signed (if positive). Set by CMP, SUB,
ADD, TEST, AND, OR, XOR instructions.
Algorithm:
if SF = 0 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 00000111b ; AL = 7
OR AL, 0 ; just set flags.
JNS label1
PRINT 'signed.'
JMP exit
label1:
PRINT 'not signed.'
exit:
RET
C Z S O P A
unchanged
JNZ label Short Jump if Not Zero (not equal). Set by CMP, SUB, ADD,
TEST, AND, OR, XOR instructions.
Algorithm:
if ZF = 0 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 00000111b ; AL = 7
OR AL, 0 ; just set flags.
JNZ label1
PRINT 'zero.'
JMP exit
label1:
PRINT 'not zero.'
exit:
RET
C Z S O P A
unchanged
Algorithm:
if OF = 1 then jump
Example:
; -5 - 127 = -132 (not in -128..127)
; the result of SUB is wrong (124),
; so OF = 1 is set:
include '[Link]'
#make_COM#
org 100h
MOV AL, -5
SUB AL, 127 ; AL = 7Ch (124)
JO label1
PRINT 'no overflow.'
JMP exit
label1:
PRINT 'overflow!'
exit:
RET
C Z S O P A
unchanged
JP label Short Jump if Parity (even). Only 8 low bits of result are
checked. Set by CMP, SUB, ADD, TEST, AND, OR, XOR
instructions.
Algorithm:
if PF = 1 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 00000101b ; AL = 5
OR AL, 0 ; just set flags.
JP label1
PRINT 'parity odd.'
JMP exit
label1:
PRINT 'parity even.'
exit:
RET
C Z S O P A
unchanged
JPE label Short Jump if Parity Even. Only 8 low bits of result are
checked. Set by CMP, SUB, ADD, TEST, AND, OR, XOR
instructions.
Algorithm:
if PF = 1 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 00000101b ; AL = 5
OR AL, 0 ; just set flags.
JPE label1
PRINT 'parity odd.'
JMP exit
label1:
PRINT 'parity even.'
exit:
RET
C Z S O P A
unchanged
JPO label Short Jump if Parity Odd. Only 8 low bits of result are
checked. Set by CMP, SUB, ADD, TEST, AND, OR, XOR
instructions.
Algorithm:
if PF = 0 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 00000111b ; AL = 7
OR AL, 0 ; just set flags.
JPO label1
PRINT 'parity even.'
JMP exit
label1:
PRINT 'parity odd.'
exit:
RET
C Z S O P A
unchanged
JS label Short Jump if Signed (if negative). Set by CMP, SUB, ADD,
TEST, AND, OR, XOR instructions.
Algorithm:
if SF = 1 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 10000000b ; AL = -128
OR AL, 0 ; just set flags.
JS label1
PRINT 'not signed.'
JMP exit
label1:
PRINT 'signed.'
exit:
RET
C Z S O P A
unchanged
JZ label Short Jump if Zero (equal). Set by CMP, SUB, ADD, TEST,
AND, OR, XOR instructions.
Algorithm:
if ZF = 1 then jump
Example:
include '[Link]'
#make_COM#
ORG 100h
MOV AL, 5
CMP AL, 5
JZ label1
PRINT 'AL is not equal to 5.'
JMP exit
label1:
PRINT 'AL is equal to 5.'
exit:
RET
C Z S O P A
unchanged
Algorithm:
AH = flags register
AH bit: 7 6 5 4 3 2 1 0
No
LAHF
operands [SF] [ZF] [0] [AF] [0] [PF] [1] [CF]
bits 1, 3, 5 are reserved.
C Z S O P A
unchanged
Algorithm:
REG = first word
DS = second word
REG,
LDS
memory
Example:
#make_COM#
ORG 100h
LDS AX, m
RET
m DW 1234h
DW 5678h
END
C Z S O P A
unchanged
Algorithm:
REG = address of memory (offset)
Example:
#make_COM#
ORG 100h
REG,
LEA
memory
LEA AX, m
RET
m DW 1234h
END
C Z S O P A
unchanged
LES REG, Load memory double word into word register and ES.
memory
Algorithm:
REG = first word
ES = second word
Example:
#make_COM#
ORG 100h
LES AX, m
RET
m DW 1234h
DW 5678h
END
C Z S O P A
unchanged
LEA SI, a1
MOV CX, 5
MOV AH, 0Eh
m: LODSB
INT 10h
LOOP m
RET
C Z S O P A
unchanged
LEA SI, a1
MOV CX, 5
RET
C Z S O P A
unchanged
Algorithm:
CX = CX - 1
if CX <> 0 then
jump
else
no jump, continue
Example:
include '[Link]'
C Z S O P A
unchanged
LOOPE label Decrease CX, jump to label if CX not zero and Equal (ZF =
1).
Algorithm:
CX = CX - 1
if (CX <> 0) and (ZF = 1) then
jump
else
no jump, continue
Example:
; Loop until result fits into AL alone,
; or 5 times. The result will be over 255
; on third loop (100+100+100),
; so loop will exit.
include '[Link]'
#make_COM#
ORG 100h
MOV AX, 0
MOV CX, 5
label1:
PUTC '*'
ADD AX, 100
CMP AH, 0
LOOPE label1
RET
C Z S O P A
unchanged
LOOPN label Decrease CX, jump to label if CX not zero and Not Equal (ZF
E = 0).
Algorithm:
CX = CX - 1
if (CX <> 0) and (ZF = 0) then
jump
else
no jump, continue
Example:
; Loop until '7' is found,
; or 5 times.
include '[Link]'
#make_COM#
ORG 100h
MOV SI, 0
MOV CX, 5
label1:
PUTC '*'
MOV AL, v1[SI]
C Z S O P A
unchanged
include '[Link]'
#make_COM#
ORG 100h
MOV SI, 0
MOV CX, 5
label1:
PUTC '*'
MOV AL, v1[SI]
C Z S O P A
unchanged
Algorithm:
CX = CX - 1
if (CX <> 0) and (ZF = 1) then
jump
else
no jump, continue
Example:
; Loop until result fits into AL alone,
; or 5 times. The result will be over 255
; on third loop (100+100+100),
; so loop will exit.
include '[Link]'
#make_COM#
ORG 100h
MOV AX, 0
MOV CX, 5
label1:
PUTC '*'
ADD AX, 100
CMP AH, 0
LOOPZ label1
RET
C Z S O P A
unchanged
C Z S O P A
unchanged
LEA SI, a1
LEA DI, a2
MOV CX, 5
REP MOVSB
RET
a1 DB 1,2,3,4,5
a2 DB 5 DUP(0)
C Z S O P A
unchanged
LEA SI, a1
LEA DI, a2
MOV CX, 5
REP MOVSW
RET
a1 DW 1,2,3,4,5
a2 DW 5 DUP(0)
C Z S O P A
unchanged
Unsigned multiply.
Algorithm:
when operand is a byte:
AX = AL * operand.
when operand is a word:
(DX AX) = AX * operand.
Example:
REG
MUL memory MOV AL, 200 ; AL = 0C8h
MOV BL, 4
MUL BL ; AX = 0320h (800)
RET
C Z S O P A
r ? ? r ? ?
C Z S O P A
r r r r r r
No Operation.
Algorithm:
Do nothing
Example:
; do nothing, 3 times:
NOP
No
NOP
operands NOP
NOP
RET
C Z S O P A
unchanged
NOT AL ; AL = 11100100b
RET
C Z S O P A
unchanged
1 OR 1 = 1
1 OR 0 = 1
REG, 0 OR 1 = 1
memory 0 OR 0 = 0
memory,
REG
OR REG, REG Example:
memory,
immediate MOV AL, 'A' ; AL = 01000001b
REG,
OR AL, 00100000b ; AL = 01100001b ('a')
immediate
RET
C Z S O P A
0 r r 0 r ?
C Z S O P A
unchanged
Algorithm:
operand = SS:[SP] (top of the stack)
SP = SP + 2
Example:
REG
MOV AX, 1234h
POP SREG
memory PUSH AX
POP DX ; DX = 1234h
RET
C Z S O P A
unchanged
POPA No Pop all general purpose registers DI, SI, BP, SP, BX, DX, CX,
operands AX from the stack.
SP value is ignored, it is Popped but not set to SP register).
Algorithm:
POP DI
POP SI
POP BP
POP xx (SP value ignored)
POP BX
POP DX
POP CX
POP AX
C Z S O P A
unchanged
Algorithm:
flags = SS:[SP] (top of the stack)
No SP = SP + 2
POPF
operands
C Z S O P A
popped
Example:
MOV AX, 1234h
PUSH AX
POP DX ; DX = 1234h
RET
C Z S O P A
unchanged
Push all general purpose registers AX, CX, DX, BX, SP, BP,
SI, DI in the stack.
Original value of SP register (before PUSHA) is used.
Algorithm:
PUSH AX
PUSH CX
PUSH DX
No
PUSHA PUSH BX
operands
PUSH SP
PUSH BP
PUSH SI
PUSH DI
C Z S O P A
unchanged
C Z S O P A
unchanged
Algorithm:
memory, shift all bits left, the bit that goes off is set to CF and
immediate previous value of CF is inserted to the right-most position.
REG,
immediate
RCL Example:
memory, STC ; set carry (CF=1).
CL
REG, CL MOV AL, 1Ch ; AL = 00011100b
RCL AL, 1 ; AL = 00111001b, CF=0.
RET
C O
r r
RCR memory, Rotate operand1 right through Carry Flag. The number of
immediate rotates is set by operand2.
REG,
immediate Algorithm:
shift all bits right, the bit that goes off is set to CF and
previous value of CF is inserted to the left-most position.
Example:
STC ; set carry (CF=1).
memory, MOV AL, 1Ch ; AL = 00011100b
CL
REG, CL RCR AL, 1 ; AL = 10001110b, CF=0.
RET
C O
r r
Algorithm:
check_cx:
if CX <> 0 then
do following chain instruction
chain
REP CX = CX - 1
instruction
go back to check_cx
else
exit from REP cycle
check_cx:
if CX <> 0 then
do following chain instruction
CX = CX - 1
if ZF = 1 then:
go back to check_cx
else
exit from REPE cycle
else
exit from REPE cycle
Example:
see [Link] in Samples.
Algorithm:
check_cx:
if CX <> 0 then
do following chain instruction
CX = CX - 1
chain if ZF = 0 then:
REPNE
instruction
go back to check_cx
else
exit from REPNE cycle
else
exit from REPNE cycle
Algorithm:
check_cx:
if CX <> 0 then
do following chain instruction
CX = CX - 1
if ZF = 0 then:
go back to check_cx
else
exit from REPNZ cycle
else
exit from REPNZ cycle
Algorithm:
check_cx:
if CX <> 0 then
do following chain instruction
CX = CX - 1
chain if ZF = 1 then:
REPZ
instruction
go back to check_cx
else
exit from REPZ cycle
else
exit from REPZ cycle
immediate Algorithm:
Pop from stack:
IP
if immediate operand is present: SP = SP + operand
Example:
#make_COM#
ORG 100h ; for COM file.
CALL p1
ADD AX, 1
C Z S O P A
unchanged
Algorithm:
Pop from stack:
No IP
operands CS
RETF
or even
immediate if immediate operand is present: SP = SP + operand
C Z S O P A
unchanged
memory, shift all bits left, the bit that goes off is set to CF and the
CL same bit is inserted to the right-most position.
REG, CL Example:
MOV AL, 1Ch ; AL = 00011100b
ROL AL, 1 ; AL = 00111000b, CF=0.
RET
C O
r r
Algorithm:
shift all bits right, the bit that goes off is set to CF and the
memory, same bit is inserted to the left-most position.
immediate
REG, Example:
immediate
ROR MOV AL, 1Ch ; AL = 00011100b
memory, ROR AL, 1 ; AL = 00001110b, CF=0.
CL
REG, CL RET
C O
r r
AH bit: 7 6 5 4 3 2 1 0
[SF] [ZF] [0] [AF] [0] [PF] [1] [CF]
bits 1, 3, 5 are reserved.
C Z S O P A
r r r r r r
Algorithm:
Shift all bits left, the bit that goes off is set to CF.
memory,
immediate Zero bit is inserted to the right-most position.
REG, Example:
immediate
SAL MOV AL, 0E0h ; AL = 11100000b
memory,
SAL AL, 1 ; AL = 11000000b, CF=1.
CL
REG, CL RET
C O
r r
SAR memory, Shift Arithmetic operand1 Right. The number of shifts is set
immediate by operand2.
REG,
immediate Algorithm:
memory, Shift all bits right, the bit that goes off is set to CF.
CL The sign bit that is inserted to the left-most position has the
REG, CL same value as before shift.
Example:
RET
C O
r r
Algorithm:
REG, Example:
memory
memory, STC
REG
MOV AL, 5
SBB REG, REG
memory, SBB AL, 3 ; AL = 5 - 3 - 1 = 1
immediate
REG,
immediate RET
C Z S O P A
r r r r r r
DI = DI + 1
else
DI = DI - 1
C Z S O P A
r r r r r r
Algorithm:
ES:[DI] - AX
set flags according to result:
OF, SF, ZF, AF, PF, CF
if DF = 0 then
No
SCASW DI = DI + 2
operands
else
DI = DI - 2
C Z S O P A
r r r r r r
memory, Shift all bits left, the bit that goes off is set to CF.
CL Zero bit is inserted to the right-most position.
REG, CL
Example:
MOV AL, 11100000b
RET
C O
r r
Algorithm:
Shift all bits right, the bit that goes off is set to CF.
C O
r r
CF = 1
Algorithm:
No
STD DF = 1
operands
D
Algorithm:
No IF = 1
STI
operands
I
if DF = 0 then
DI = DI + 1
else
DI = DI - 1
Example:
#make_COM#
ORG 100h
LEA DI, a1
MOV AL, 12h
MOV CX, 5
REP STOSB
RET
a1 DB 5 dup(0)
C Z S O P A
unchanged
LEA DI, a1
MOV AX, 1234h
MOV CX, 5
REP STOSW
RET
a1 DW 5 dup(0)
C Z S O P A
unchanged
Subtract.
Algorithm:
r r r r r r
Logical AND between all bits of two operands for flags only.
REG, These flags are effected: ZF, SF, PF. Result is not stored
memory anywhere.
memory,
REG These rules apply:
TEST REG, REG
memory, 1 AND 1 = 1
immediate 1 AND 0 = 0
REG, 0 AND 1 = 0
immediate 0 AND 0 = 0
Example:
MOV AL, 00000101b
TEST AL, 1 ; ZF = 0.
TEST AL, 10b ; ZF = 1.
RET
C Z S O P
0 r r 0 r
Algorithm:
Example:
C Z S O P A
unchanged
Algorithm:
Example:
#make_COM#
ORG 100h
LEA BX, dat
MOV AL, 2
XLATB ; AL = 33h
RET
C Z S O P A
unchanged
1 XOR 1 = 0
REG, 1 XOR 0 = 1
memory 0 XOR 1 = 1
memory, 0 XOR 0 = 0
REG
XOR REG, REG
memory, Example:
immediate MOV AL, 00000111b
REG,
immediate XOR AL, 00000010b ; AL = 00000101b
RET
C Z S O P A
0 r r 0 r ?