8088 Instruction Set Summary

This summary has been compiled from a number of sources, but chiefly from 8086/8088/80286 Assembly Language, by Scanlon, and A86 Macro Assembler and D86 Debugger Reference Manual, by Isaacson.

Instruction Description Flags
    S Z C O P A
AAA

ASCII adjust AL (carry into AH) after addition:ASCII (0-9) + ASCII (0-9) ®Unpacked BCD

?

?

ü

?

?

ü

AAD ASCII adjust before division (AX=10*AH +AL): Unpacked BCD ®Binary

ü

ü

?

?

ü

?

AAM ASCII adjust after multiply (AL/10: AH=Quo, AL=Rem) Single digit BCD * Single digit BCD ® Unpacked BCD

ü

ü

?

?

ü

?

AAS ASCII adjust AL (borrow from AH) after subtraction: ASCII (0-9) - ASCII (0-9) ®Unpacked BCD

?

?

ü

?

?

ü

ADC Add with carry: dest¬dest + source+ CF ü ü ü ü ü ü
ADD Add: dest¬dest+ source ü ü ü ü ü ü
AND And: dest¬dest.AND.source ü ü 0 0 ü ?
CALL CS:IP or IP ¬address of procedure, stack ¬IP or CS:IP of next instruction            
CBW Convert byte to word. AH ¬bit 7of AL            
CLC Clear the carry flag. CF ¬0     0      
CLD Clear the direction bit. String instructions increment SI and DI            
CLI Clear the interrupt enable bit. Maskable interrupts are ignored.            
CMC Complement the carry flag     ü      
CMP dest- source, result not stored ü ü ü ü ü ü
CMPS [DS:SI] - [ES:DI], update DI and SI (based on D flag) CMPSB and CMPSW are size-specific ü ü ü ü ü ü
CWD DX ¬AX15            
DAA Decimal adjust AL after addition, After a byte-wide add of packed BCD digits, adjusts AL to correct BCD result and sets C if result is > 9910 ü ü ü ? ü ü
DAS Decimal adjust after subtraction. Like DAA ü ü ü ? ü ü
DEC Decrement. dest¬dest - 1 ü ü   ü ü ü
DIV Unsigned divide (immediate operand not allowed) AX ¬quo of {DX:AX/(word op)} and DX ¬rem of {DX:AX/(word op)} or AL ¬quo of {AX/(byte op)} and AH ¬rem of {AX/(byte op)} ? ? ? ? ? ?
IDIV Signed divide (immediate operand not allowed) AX, DX ¬quo, rem of {DX:AX/(word op)}, or AL, AH ¬quo, rem of {AX/(byte op)} ? ? ? ? ? ?
ESC put an operand on the data bus            
HLT stop the processor until a RESET or external interrupt            
IMUL Signed multiply (immediate operand not allowed) DX:AX ¬AX * (word op), or AX ¬ AL * (byte op) ? ? ü ü ? ?
IN AL ¬port, or AX ¬ port port is an immediate 8-bit address or DX            
INC dest¬dest+ 1 ü ü   ü ü ü
INT execute a software interrupt            
INTO execute interrupt 4 if overflow flag is set            
IRET return from interrupt ü ü ü ü ü ü
Jxx conditional jumps to a relative address (-128 to +127) JA/JNBE, JAE/JNB, JB/JNAE, JC, JBE/JNA, JCXZ, JE/JZ, JG/JNLE, JGE/JNL, JL/JNGE, JLE/JNG, JNC, JNE/JNZ, JNO, JNP/JPO, JNS, JO, JP/JPE, JS            
JMP Jump, IP or CS:IP ¬operand            
LAHF Load AH from flags. Bits (0,2,4,6,7) ¬(CF, PF, AF, ZF, SF)            
LDS Load pointer using DS DS:dest¬address of operand            
LEA dest¬address of operand            
LES like LDS, except ES:destreceives address            
LOCK A prefix. Bus is locked until execution is completed            
LODS Load String. AX or AL ¬[DS:SI], update SI LODSB and LODSW are size-specific            
LOOP CX ¬CX - 1, then transfer to short labeldestination if CX ¹0; LOOPE/LOOPZ, transfers if CX ¹0 and ZF = 1; LOOPNE/LOOPNZ transfers if CX ¹0 and ZF = 0.            
MOV dest¬operand or data stored at operand address            
MOVS [ES:DI] ¬[DS:SI], adjust SI and DI MOVSB and MOVSW are size-specific            
MUL Unsigned multiply (immediate operand not allowed) DX:AX ¬AX * (word op), or AX ¬ AL * (byte op) ? ? ü ü ? ?
NEG dest¬- dest ü ü ü ü ü ü
NOT dest¬complement{dest}            
OR dest¬dest.OR. source ü ü 0 0 ü ?
OUT port ¬AL or AX operand is 8-bit immediate or DX            
POP dest¬contents of stack, SP ¬ SP + 2            
POPF flags ¬contents of stack, SP ¬ SP + 2 ü ü ü ü ü ü
PUSH stack ¬source, SP ¬ SP - 2            
PUSHF stack ¬flags, SP ¬ SP - 2            
RCL rotate word or byte left including CF (9 bit or 17 bit rotate); source 1 or CL.     ü ?    
RCR rotate word or byte right including CF (9 bit or 17 bit rotate); source is 1 or CL.     ü ?    
RET CS:IP or IP ¬stack            
REP A prefix. Like LOOP for string instructions. REPE/REPZ and REPNE/REPNZ are also valid            
ROL Rotate left 8 or 16 bit dest.; sourceis 1 or CL Bit rotated out is copied to CF     ü ?    
ROR Rotate right 8 or 16 bit dest.; sourceis 1 or CL Bit rotated out is copied to CF     ü ?    
SAHF flags¬AH (used with LAHF) ü ü ü   ü ü
SAR Shift right through CF with sign extension; sourceis 1 or CL ü ü ü ? ü ?
SBB Subtract with borrow. dest¬dest - source- CF ü ü ü ü ü ü
SCAS [ES:DI] - AL or AX. Update DI. SCASB and SCASW are size-specific ü ü ü ü ü ü
SHL or SAL Shift left destthrough CF with 0 fill; sourceis 1 or CL ü ü ü ? ü ?
SHR Shift right destthrough CF with 0 fill; sourceis 1 or CL 0 ü ü ? ü ?
STC CF ¬1     1      
STD DF ¬1 String instructions decrement SI and DI            
STI Set interrupt enable flag. Maskable interrupts are serviced            
STOS [ES:DI] ¬AX or AL. Adjust DI. STOSB and STOSW are size-specific            
SUB dest¬dest- source ü ü ü ü ü ü
TEST dest.AND. source ü ü 0 0 ü ?
WAIT processor idles processing interrupts until the external TEST line is asserted, then continues            
XCHG dest«source            
XLAT AL ¬[DS:(BX + unsigned AL)]            
XOR dest¬dest.XOR. source ü ü 0 0 ü ?