Unsigned multiply of the accumulator by the source. If \ a byte value, then AL is used as the other multiplicand and the result is placed in AX. If \ multiplied by \ If \
a double word value, then EAX is multiplied by \ receives the result. The 386+ uses an early out algorithm which makes multiplying any size value in EAX as fast as in the 8 or 16 bit registers.
Clocks Size Operands 808x 286 386 486 Bytes reg8 70-77 13 9-14 13-18 2 reg16 118-113 21 9-22 13-26 2 reg32 - - 9-38 13-42 2-4 mem8 (76-83)+EA 16 12-17 13-18 2-4 mem16 (124-139)+EA 24 12-25 13-26 2-4 mem32 - - 12-21 13-42 2-4
NEG - Two's Complement Negation Usage: NEG dest
Modifies flags: AF CF OF PF SF ZF
Subtracts the destination from 0 and saves the 2s complement of \
Clocks Size Operands 808x 286 386 486 Bytes reg 3 2 2 1 2
mem 16+EA 7 6 3 2-4
NOP - No Operation (90h) Usage: NOP
Modifies flags: None
This is a do nothing instruction. It results in occupation of both space and time and is most useful for patching code segments. (This is the original XCHG AL,AL instruction)
Clocks Size Operands 808x 286 386 486 Bytes none 3 3 3 1 1
NOT - One's Compliment Negation (Logical NOT) Usage: NOT dest Modifies flags: None
Inverts the bits of the \ Clocks Size Operands 808x 286 386 486 Bytes reg 3 2 2 1 2
(W88=24+EA) mem 16+EA 7 6 3 2-4 (W88=24+EA)
OR - Inclusive Logical OR
Usage: OR dest,src
Modifies flags: CF OF PF SF ZF (AF undefined)
Logical inclusive OR of the two operands returning the result in the destination. Any bit set in either operand will be set in the destination.
Clocks Size Operands 808x 286 386 486 Bytes reg,reg 3 2 2 1 2
mem,reg 16+EA 7 7 3 2-4 (W88=24+EA) reg,mem 9+EA 7 6 2 2-4 (W88=13+EA) reg,immed 4 3 2 1 3-4 mem8,immed8 17+EA 7 7 3 3-6 mem16,immed16 25+EA 7 7 3 3-6 accum,immed 4 3 2 1 2-3
OUT - Output Data to Port
Usage: OUT port,accum Modifies flags: None
Transfers byte in AL,word in AX or dword in EAX to the specified hardware port address. If the port number is in the range of 0-255 it can be specified as an immediate. If greater than 255 then the port number must be specified in DX. Since the PC only decodes 10 bits of the port address, values over 1023 can only be decoded by third party vendor equipment and also map to the port range 0-1023. Clocks Size Operands 808x 286 386 486 Bytes immed8,accum 10/14 3 10 16 2 immed8,accum (PM) - - 4/24 11/31/29 2 DX,accum 8/12 3 11 16 1 DX,accum (PM) - - 5/25 10/30/29 1 - 386+ protected mode timings depend on privilege levels. first number is the timing when: CPL ≤ IOPL second number is the timing when: CPL > IOPL
third number is the timing when: virtual mode on 486 processor
OUTS - Output String to Port (80188+) Usage: OUTS port,src OUTSB OUTSW
OUTSD (386+) Modifies flags: None
Transfers a byte, word or doubleword from \ port specified in DX. For instructions with no operands the \ is located at DS:SI and SI is incremented or decremented by the size of the operand or the size dictated by the instruction format. When the Direction Flag is set SI is decremented, when clear, SI is incremented. If the port number is in the range of 0-255 it can be specified as an immediate. If greater than 255 then the port
number must be specified in DX. Since the PC only decodes 10 bits of the port address, values over 1023 can only be decoded by third party vendor equipment and also map to the port range 0-1023. Clocks Size Operands 808x 286 386 486 Bytes port,src - 5 14 17 1 port,src (PM) - - 8/28 10/32/30 1 - 386+ protected mode timings depend on privilege levels. first number is the timing when: CPL ≤ IOPL second number is the timing when: CPL > IOPL
third number is the timing when: virtual mode on 486 processor
POP - Pop Word off Stack
Usage: POP dest Modifies flags: None
Transfers word at the current stack top (SS:SP) to the destination then increments SP by two to point to the new stack top. CS is not a valid destination.
Clocks Size Operands 808x 286 386 486 Bytes reg16 8 5 4 4 1 reg32 4 - - 4 1 segreg 8 5 7 3 1 mem16 17+EA 5 5 6 2-4 mem32 5 - - 6 2-4
POPA/POPAD - Pop All Registers onto Stack (80188+) Usage: POPA
POPAD (386+) Modifies flags: None
Pops the top 8 words off the stack into the 8 general purpose 16/32 bit registers. Registers are popped in the following order: (E)DI,
(E)SI, (E)BP, (E)SP, (E)DX, (E)CX and (E)AX. The (E)SP value popped from the stack is actually discarded.
Clocks Size Operands 808x 286 386 486 Bytes none - 19 24 9 1
POPF/POPFD - Pop Flags off Stack Usage: POPF
POPFD (386+) Modifies flags: all flags
Pops word/doubleword from stack into the Flags Register and then increments SP by 2 (for POPF) or 4 (for POPFD).
Clocks Size Operands 808x 286 386 486 Bytes
none 8/12 5 5 9 1 (W88=12) none (PM) - - 5 6 1
PUSH - Push Word onto Stack Usage: PUSH src
PUSH immed (80188+ only) Modifies flags: None
Decrements SP by the size of the operand (two or four, byte values are sign extended) and transfers one word from source to the stack top (SS:SP).
Clocks Size Operands 808x 286 386 486 Bytes reg16 11/15 3 2 1 1 reg32 - - 2 1 1
mem16 16+EA 5 5 4 2-4 (W88=24+EA) mem32 - - 5 4 2-4 segreg 10/14 3 2 3 1 immed - 3 2 1 2-3
PUSHA/PUSHAD - Push All Registers onto Stack (80188+) Usage: PUSHA
PUSHAD (386+) Modifies flags: None
Pushes all general purpose registers onto the stack in the following
order: (E)AX, (E)CX, (E)DX, (E)BX, (E)SP, (E)BP, (E)SI, (E)DI. The value of SP is the value before the actual push of SP.
Clocks Size Operands 808x 286 386 486 Bytes none - 19 24 11 1
PUSHF/PUSHFD - Push Flags onto Stack Usage: PUSHF
PUSHFD (386+) Modifies flags: None
Transfers the Flags Register onto the stack. PUSHF saves a 16 bit
value while PUSHFD saves a 32 bit value.
Clocks Size Operands 808x 286 386 486 Bytes none 10/14 3 4 4 1 none (PM) - - 4 3 1
RCL - Rotate Through Carry Left
Usage: RCL dest,count Modifies flags: CF OF
+-+ +---------------+ +-+|C|<+--+|7 <---------- 0|<-+ | +-+ +---------------+ | +-----------------------------+
Rotates the bits in the destination to the left \ all data pushed out the left side re-entering on the right. The Carry Flag holds the last bit rotated out.
Clocks Size Operands 808x 286 386 486 Bytes reg,1 2 2 9 3 2
mem,1 15+EA 7 10 4 2-4 (W88=23+EA) reg,CL 8+4n 5+n 9 8-30 2
mem,CL 20+EA+4n 8+n 10 9-31 2-4 (W88=28+EA+4n) reg,immed8 - 5+n 9 8-30 3 mem,immed8 - 8+n 10 9-31 3-5
RCR - Rotate Through Carry Right
Usage: RCR dest,count Modifies flags: CF OF
+---------------+ +-+ +->|7 +---------> 0|+--->|C|+-+ | +---------------+ +-+ | +-----------------------------+
Rotates the bits in the destination to the right \ all data pushed out the right side re-entering on the left. The Carry Flag holds the last bit rotated out.
Clocks Size Operands 808x 286 386 486 Bytes reg,1 2 2 9 3 2
mem,1 15+EA 7 10 4 2-4 (W88=23+EA) reg,CL 8+4n 5+n 9 8-30 2
mem,CL 20+EA+4n 8+n 10 9-31 2-4 (W88=28+EA+4n) reg,immed8 - 5+n 9 8-30 3 mem,immed8 - 8+n 10 9-31 3-5