| Symbolic | Operation | Flags Affected | Operand Types
|
|---|
| adc srce,dest | add with carry, dest=dest+srce+CF
| AF,CF,OF,PF,SF,ZF | mem,reg; reg,mem; reg,reg; imm,reg; imm,mem
|
| add srce,dest | addition, dest=dest+srce
| AF,CF,OF,PF,SF,ZF | mem,reg; reg,mem; reg,reg; imm,reg; imm,mem
|
| and srce,dest | bitwise and, dest = dest and srce
| PF,SF,ZF,CF=0,OF=0 | mem,reg; reg,mem; reg,reg; imm,reg; imm,mem
|
| call label | save return address on SS, jump to target
| none | label
|
| cbw | convert byte to word, extend sign of AL into AH
| none | none
|
| cdq | convert double to quad, EAX to EDX/EAX
| none | none
|
| clc | clear carry flag | CF=0 | none
|
| cmc | complement carry flag | CF = 1 - CF | none
|
| cmp srce,dest | temp = dest - srce, set flags
| AF,CF,OF,PF,SF,ZF | mem,reg; reg,mem; reg,reg; imm,reg; imm,mem
|
| cwd | convert word to double, extend sign of AX into DX
| none | none
|
| cwde | convert word AX to double EAX, extend sign
| none | none
|
| dec dest | decrement, dest = dest - 1
| AF,OF,PF,SF,ZF | mem; reg;
|
| hlt | stop CPU execution | none | none
|
| idiv srce | signed divide, AL = AX / srce, AX = DX:AX / srce, EAX = EDX:EAX / srce
| PF,SF,ZF,AF,CF,OF | mem; reg
|
| imul srce,dest | signed multiply, dest = dest * srce
| PF,SF,ZF,AF,CF,OF | mem,reg; reg,reg; imm,reg
|
| inc dest | increment, dest = dest + 1
| AF,OF,PF,SF,ZF | mem; reg;
|
| int | save flags, call interrupt handler
| IF=0, TF=0 | none
|
| into | interrupt on overflow, interrupt if CF=1
| IF=0, TF=0 | none
|
| ja label | jump if above, CF=0 and ZF=0
| none | label
|
| jae label | jump if above or equal, CF=0
| none | label
|
| jb label | jump if below, CF=1
| none | label
|
| jbe label | jump if below or equal, CF=1 or ZF=1
| none | label
|
| jc label | jump if carry, CF=1
| none | label
|
| jcxz label | jump if CX register is zero
| none | label
|
| jecxz label | jump if ECX register is zero
| none | label
|
| je label | jump if equal, ZF=1
| none | label
|
| jg label | jump if greater, ZF=0 and SF=OF
| none | label
|
| jge label | jump if greater or equal, SF=OF
| none | label
|
| jl label | jump if less, SF<>OF
| none | label
|
| jle label | jump if less or equal, ZF=1 or SF<>OF
| none | label
|
| jmp label | unconditonal jump to label
| none | label
|
| jna label | jump if not above, CF=1 or ZF=1
| none | label
|
| jnae label | jump if not above or equal, CF=1
| none | label
|
| jnb label | jump if not below, CF=0
| none | label
|
| jnbe label | jump if not below or equal, CF=0 and ZF=0 | none | label
|
| jnc label | jump if not carry, CF=0
| none | label
|
| jne label | jump if not equal, ZF=0
| none | label
|
| jng label | jump if not greater, ZF=1 or SF<>OF
| none | label
|
| jnge label | jump if not greater or equal, SF<>OF
| none | label
|
| jnl label | jump if not less, SF=OF
| none | label
|
| jnle label | jump if not less or equal, ZF=0 and SF=OF | none | label
|
| jno label | jump if not overflow, OF=0
| none | label
|
| jnp label | jump if not parity, PF=0
| none | label
|
| jns label | jump if not sign, SF=0
| none | label
|
| jnz label | jump if not zero, ZF=0
| none | label
|
| jo label | jump if overflow, OF=1
| none | label
|
| jp label | jump if parity, PF=1
| none | label
|
| jpe label | jump if parity even, PF=1
| none | label
|
| jpo label | jump if parity odd, PF=0
| none | label
|
| js label | jump if sign, SF=1
| none | label
|
| jz label | jump if zero, ZF=1
| none | label
|
| lahf | load flags into AH
| AH = SF,ZF,-,AF,-,PF,-,CF | none
|
| lea srce,dest | effective memory address loaded into reg.
| none | mem,reg
|
| loop label | decrement CX, jump if CX != 0
| none | label
|
| mov srce,dest | move, dest = srce | none
| mem,reg; reg,mem; reg,reg; imm,reg; imm,mem
|
| movsx srce,dest | move s.p. to d.p, dest = srce, pad
MSB with sign | none | mem,reg; reg,reg;
|
| movzx srce,dest | move s.p. to d.p, dest = srce, pad
MSB with 0 | none | mem,reg; reg,reg;
|
| neg dest | 2's complement negate dest
| AF,CF,OF,PF,SF,ZF | mem; reg;
|
| nop | no operation | none | none
|
| not dest | bitwise not, 1's complement dest
| none | mem; reg;
|
| or srce,dest | bitwise or, dest = dest or srce
| PF,SF,ZF,CF=0,OF=0 | mem,reg; reg,mem; reg,reg; imm,reg; imm,mem
|
| pop dest | pop from stack to dest
| none | mem; reg; (bytes not allowed)
|
| popa | pop all AX,CX,DX,BX,SP,BP,SI,DI from
stack | none | none
|
| popad | pop all EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
| none | none
|
| popf | pop word from stack to flags register
| all | none
|
| push dest | push dest onto stack
| none | mem; reg; (bytes not allowed)
|
| pusha | push all AX,CX,DX,BX,SP,BP,SI,DI onto
stack | none | none
|
| pushad | push all EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI
| none | none
|
| pushf | push flags register onto stack | none | none
|
| rcl srce,dest | rotate dest left by srce bits through CF
| CF,OF | imm,mem; imm,reg; %cl,mem; %cl,reg;
|
| rcr srce,dest | rotate dest right by srce bits through CF
| CF,OF | imm,mem; imm,reg; %cl,mem; %cl,reg;
|
| ret ? | pop return address from stack, optionally
increment SP | CF,OF | imm
|
| rol srce,dest | rotate dest left by srce bits, into CF
| CF,OF | imm,mem; imm,reg; %cl,mem; %cl,reg;
|
| ror srce,dest | rotate dest right by srce bits, into CF
| CF,OF | imm,mem; imm,reg; %cl,mem; %cl,reg;
|
| sahf | store into flags SF,ZF,-,AF,-,PF,-,CF = AH
| SF,ZF,AF,PF,CF | none
|
| sar srce,dest | shift dest right by srce bits, into CF, sign replicated | CF,OF,PF,SF,ZF | imm,mem; imm,reg; %cl,mem; %cl,reg;
|
| sal/shl srce,dest | shift dest left by srce bits, into CF, 0 pad | CF,OF,PF,SF,ZF | imm,mem; imm,reg; %cl,mem; %cl,reg;
|
| shr srce,dest | shift dest right by srce bits, into CF, 0 pad | CF,OF,PF,SF,ZF | imm,mem; imm,reg; %cl,mem; %cl,reg;
|
| sbb srce,dest | dest = dest - srce - CF
| AF,CF,OF,PF,SF,ZF | mem,reg; reg,mem; reg,reg; imm,reg; imm,mem
|
| stc | set carry flag, CF = 1 | CF=1 | none
|
| sub srce,dest | dest = dest - srce
| AF,CF,OF,PF,SF,ZF | mem,reg; reg,mem; reg,reg; imm,reg; imm,mem
|
| test srce,dest | logical test, flags set for (dest and
srce) | PF,SF,ZF,CF=0,OF=0 | mem,reg; reg,reg; imm,reg; imm,mem
|
| xchg srce,dest | swap dest with srce
| none | mem,reg; reg,reg;
|
| xor srce,dest | bitwise exclusive or, dest = dest xor
srce | PF,SF,ZF,CF=0,OF=0 | mem,reg; reg,mem; reg,reg; imm,reg; imm,mem
|