CSDN技术中心 INTEL 汇编指令集
来源:百度文库 编辑:神马文学网 时间:2024/04/27 14:06:54
INTEL 汇编指令集
Intel Assemble Instruction Set
CONTENT
Intel 8086 Family ArchitectureInstruction Clock Cycle Calculation8088/8086 Effective Address (EA) CalculationTask State CalculationFLAGS - Intel 8086 Family Flags RegisterMSW - Machine Status Word (286+ only)8086/80186/80286/80386/80486 Instruction SetAAA - Ascii Adjust for AdditionAAD - Ascii Adjust for DivisionAAM - Ascii Adjust for MultiplicationAAS - Ascii Adjust for SubtractionADC - Add With CarryADD - Arithmetic AdditionAND - Logical AndARPL - Adjusted Requested Privilege Level of Selector (286+ PM)BOUND - Array Index Bound Check (80188+)BSF - Bit Scan Forward (386+)BSR - Bit Scan Reverse (386+)BSWAP - Byte Swap (486+)BT - Bit Test (386+)BTC - Bit Test with Compliment (386+)BTR - Bit Test with Reset (386+)BTS - Bit Test and Set (386+)CALL - Procedure CallCBW - Convert Byte to WordCDQ - Convert Double to Quad (386+)CLC - Clear CarryCLD - Clear Direction FlagCLI - Clear Interrupt Flag (disable)CLTS - Clear Task Switched Flag (286+ privileged)CMC - Complement Carry FlagCMP - CompareCMPS - Compare String (Byte, Word or Doubleword)CMPXCHG - Compare and ExchangeCWD - Convert Word to DoublewordCWDE - Convert Word to Extended Doubleword (386+)DAA - Decimal Adjust for AdditionDAS - Decimal Adjust for SubtractionDEC - DecrementDIV - DivideENTER - Make Stack Frame (80188+)ESC - EscapeHLT - Halt CPUIDIV - Signed Integer DivisionIMUL - Signed MultiplyIN - Input Byte or Word From PortINC - IncrementINS - Input String from Port (80188+)INT - InterruptINTO - Interrupt on OverflowINVD - Invalidate Cache (486+)INVLPG - Invalidate Translation Look-Aside Buffer Entry (486+)IRET/IRETD - Interrupt ReturnJxx - Jump Instructions TableJCXZ/JECXZ - Jump if Register (E)CX is ZeroJMP - Unconditional JumpLAHF - Load Register AH From FlagsLAR - Load Access Rights (286+ protected)LDS - Load Pointer Using DSLEA - Load Effective AddressLEAVE - Restore Stack for Procedure Exit (80188+)LES - Load Pointer Using ESLFS - Load Pointer Using FS (386+)LGDT - Load Global Descriptor Table (286+ privileged)LIDT - Load Interrupt Descriptor Table (286+ privileged)LGS - Load Pointer Using GS (386+)LLDT - Load Local Descriptor Table (286+ privileged)LMSW - Load Machine Status Word (286+ privileged)LOCK - Lock BusLODS - Load String (Byte, Word or Double)LOOP - Decrement CX and Loop if CX Not ZeroLOOPE/LOOPZ - Loop While Equal / Loop While ZeroLOOPNZ/LOOPNE - Loop While Not Zero / Loop While Not EqualLSL - Load Segment Limit (286+ protected)LSS - Load Pointer Using SS (386+)LTR - Load Task Register (286+ privileged)MOV - Move Byte or WordMOVS - Move String (Byte or Word)MOVSX - Move with Sign Extend (386+)MOVZX - Move with Zero Extend (386+)MUL - Unsigned MultiplyNEG - Two's Complement NegationNOP - No Operation (90h)NOT - One's Compliment Negation (Logical NOT)OR - Inclusive Logical OROUT - Output Data to PortOUTS - Output String to Port (80188+)POP - Pop Word off StackPOPA/POPAD - Pop All Registers onto Stack (80188+)POPF/POPFD - Pop Flags off StackPUSH - Push Word onto StackPUSHA/PUSHAD - Push All Registers onto Stack (80188+)PUSHF/PUSHFD - Push Flags onto StackRCL - Rotate Through Carry LeftRCR - Rotate Through Carry RightREP - Repeat String OperationREPE/REPZ - Repeat Equal / Repeat ZeroREPNE/REPNZ - Repeat Not Equal / Repeat Not ZeroRET/RETF - Return From ProcedureROL - Rotate LeftROR - Rotate RightSAHF - Store AH Register into FLAGSSAL/SHL - Shift Arithmetic Left / Shift Logical LeftSAR - Shift Arithmetic RightSBB - Subtract with Borrow/CarrySCAS - Scan String (Byte, Word or Doubleword)SETAE/SETNB - Set if Above or Equal / Set if Not Below (386+)SETB/SETNAE - Set if Below / Set if Not Above or Equal (386+)SETBE/SETNA - Set if Below or Equal / Set if Not Above (386+)SETE/SETZ - Set if Equal / Set if Zero (386+)SETNE/SETNZ - Set if Not Equal / Set if Not Zero (386+)SETL/SETNGE - Set if Less / Set if Not Greater or Equal (386+)SETGE/SETNL - Set if Greater or Equal / Set if Not Less (386+)SETLE/SETNG - Set if Less or Equal / Set if Not greater or Equal (386+)SETG/SETNLE - Set if Greater / Set if Not Less or Equal (386+)SETS - Set if Signed (386+)SETNS - Set if Not Signed (386+)SETC - Set if Carry (386+)SETNC - Set if Not Carry (386+)SETO - Set if Overflow (386+)SETNO - Set if Not Overflow (386+)SETP/SETPE - Set if Parity / Set if Parity Even (386+)SETNP/SETPO - Set if No Parity / Set if Parity Odd (386+)SGDT - Store Global Descriptor Table (286+ privileged)SIDT - Store Interrupt Descriptor Table (286+ privileged)SHL - Shift Logical LeftSHR - Shift Logical RightSHLD/SHRD - Double Precision Shift (386+)SLDT - Store Local Descriptor Table (286+ privileged)SMSW - Store Machine Status Word (286+ privileged)STC - Set CarrySTD - Set Direction FlagSTI - Set Interrupt Flag (Enable Interrupts)STOS - Store String (Byte, Word or Doubleword)STR - Store Task Register (286+ privileged)SUB - SubtractTEST - Test For Bit PatternVERR - Verify Read (286+ protected)VERW - Verify Write (286+ protected)WAIT/FWAIT - Event WaitWBINVD - Write-Back and Invalidate Cache (486+)XCHG - ExchangeXLAT/XLATB - TranslateXOR - Exclusive OR
TEXTIntel 8086 Family ArchitectureGeneral Purpose Registers Segment RegistersAH/AL AX (EAX) Accumulator CS Code SegmentBH/BL BX (EBX) Base DS Data SegmentCH/CL CX (ECX) Counter SS Stack SegmentDH/DL DX (EDX) Data ES Extra Segment(FS) 386 and newer(Exx) indicates 386+ 32 bit register (GS) 386 and newerPointer Registers Stack RegistersSI (ESI) Source Index SP (ESP) Stack PointerDI (EDI) Destination Index BP (EBP) Base PointerIP Instruction PointerStatus RegistersFLAGS Status Flags (see FLAGS)Special Registers (386+ only)CR0 Control Register 0 DR0 Debug Register 0CR2 Control Register 2 DR1 Debug Register 1CR3 Control Register 3 DR2 Debug Register 2DR3 Debug Register 3TR4 Test Register 4 DR6 Debug Register 6TR5 Test Register 5 DR7 Debug Register 7TR6 Test Register 6TR7 Test Register 7Register Default Segment Valid OverridesBP SS DS, ES, CSSI or DI DS ES, SS, CSDI strings ES NoneSI strings DS ES, SS, CS- see CPU DETECTING Instruction TimingInstruction Clock Cycle CalculationSome instructions require additional clock cycles due to a "NextInstruction Component" identified by a "+m" in the instructionclock cycle listings. This is due to the prefetch queue beingpurge on a control transfers. Below is the general rule forcalculating "m":88/86 not applicable286 "m" is the number of bytes in the next instruction386 "m" is the number of components in the next instruction(the instruction coding (each byte), plus the data andthe displacement are all considered components)8088/8086 Effective Address (EA) CalculationDescription Clock CyclesDisplacement 6Base or Index (BX,BP,SI,DI) 5Displacement+(Base or Index) 9Base+Index (BP+DI,BX+SI) 7Base+Index (BP+SI,BX+DI) 8Base+Index+Displacement (BP+DI,BX+SI) 11Base+Index+Displacement (BP+SI+disp,BX+DI+disp) 12- add 4 cycles for word operands at odd addresses- add 2 cycles for segment override- 80188/80186 timings differ from those of the 8088/8086/80286Task State Calculation"TS" is defined as switching from VM/486 or 80286 TSS to one ofthe following:+---------------------------------------+| New Task |+-------+-------+-------+-------+-------++---------------+486 TSS|486 TSS|386 TSS|386 TSS|286 TSS|| Old Task | (VM=0)| (VM=1)| (VM=0)| (VM=1)| |+---------------+-------+-------+-------+-------+-------+386 TSS (VM=0) | | | 309 | 226 | 282 |+-------+-------+-------+-------+-------+386 TSS (VM=1) | | | 314 | 231 | 287 |+-------+-------+-------+-------+-------+386 CPU/286 TSS | | | 307 | 224 | 280 |+-------+-------+-------+-------+-------+486 CPU/286 TSS | 199 | 177 | | | 180 |+---------------------------------------+Miscellaneous- all timings are for best case and do not take into account waitstates, instruction alignment, the state of the prefetch queue,DMA refresh cycles, cache hits/misses or exception processing.- to convert clocks to nanoseconds divide one microsecond by theprocessor speed in MegaHertz:(1000MHz/(n MHz)) = X nanoseconds- see 8086 ArchitectureFLAGS - Intel 8086 Family Flags Register|11|10|F|E|D|C|B|A|9|8|7|6|5|4|3|2|1|0|| | | | | | | | | | | | | | | | | +--- CF Carry Flag| | | | | | | | | | | | | | | | +--- 1| | | | | | | | | | | | | | | +--- PF Parity Flag| | | | | | | | | | | | | | +--- 0| | | | | | | | | | | | | +--- AF Auxiliary Flag| | | | | | | | | | | | +--- 0| | | | | | | | | | | +--- ZF Zero Flag| | | | | | | | | | +--- SF Sign Flag| | | | | | | | | +--- TF Trap Flag (Single Step)| | | | | | | | +--- IF Interrupt Flag| | | | | | | +--- DF Direction Flag| | | | | | +--- OF Overflow flag| | | | +----- IOPL I/O Privilege Level (286+ only)| | | +----- NT Nested Task Flag (286+ only)| | +----- 0| +----- RF Resume Flag (386+ only)+------ VM Virtual Mode Flag (386+ only)- see PUSHF POPF STI CLI STD CLDMSW - Machine Status Word (286+ only)|31|30-5|4|3|2|1|0| Machine Status Word| | | | | | +---- Protection Enable (PE)| | | | | +----- Math Present (MP)| | | | +------ Emulation (EM)| | | +------- Task Switched (TS)| | +-------- Extension Type (ET)| +---------- Reserved+------------- Paging (PG)Bit 0 PE Protection Enable, switches processor betweenprotected and real modeBit 1 MP Math Present, controls function of the WAITinstructionBit 2 EM Emulation, indicates whether coprocessor functionsare to be emulatedBit 3 TS Task Switched, set and interrogated by coprocessoron task switches and when interpretting coprocessorinstructionsBit 4 ET Extension Type, indicates type of coprocessor insystemBits 5-30 Reservedbit 31 PG Paging, indicates whether the processor uses pagetables to translate linear addresses to physicaladdresses- see SMSW LMSW8086/80186/80286/80386/80486 Instruction SetAAA - Ascii Adjust for AdditionUsage: AAAModifies flags: AF CF (OF,PF,SF,ZF undefined)Changes contents of AL to valid unpacked decimal. The high ordernibble is zeroed.Clocks SizeOperands 808x 286 386 486 Bytesnone 8 3 4 3 1AAD - Ascii Adjust for DivisionUsage: AADModifies flags: SF ZF PF (AF,CF,OF undefined)Used before dividing unpacked decimal numbers. Multiplies AH by10 and the adds result into AL. Sets AH to zero. This instructionis also known to have an undocumented behavior.AL := 10*AH+ALAH := 0Clocks SizeOperands 808x 286 386 486 Bytesnone 60 14 19 14 2AAM - Ascii Adjust for MultiplicationUsage: AAMModifies flags: PF SF ZF (AF,CF,OF undefined)AH := AL / 10AL := AL mod 10Used after multiplication of two unpacked decimal numbers, thisinstruction adjusts an unpacked decimal number. The high ordernibble of each byte must be zeroed before using this instruction.This instruction is also known to have an undocumented behavior.Clocks SizeOperands 808x 286 386 486 Bytesnone 83 16 17 15 2AAS - Ascii Adjust for SubtractionUsage: AASModifies flags: AF CF (OF,PF,SF,ZF undefined)Corrects result of a previous unpacked decimal subtraction in AL.High order nibble is zeroed.Clocks SizeOperands 808x 286 386 486 Bytesnone 8 3 4 3 1ADC - Add With CarryUsage: ADC dest,srcModifies flags: AF CF OF SF PF ZFSums two binary operands placing the result in the destination.If CF is set, a 1 is added to the destination.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 3 2 2 1 2mem,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-4mem,immed 17+EA 7 7 3 3-6 (W88=23+EA)accum,immed 4 3 2 1 2-3ADD - Arithmetic AdditionUsage: ADD dest,srcModifies flags: AF CF OF PF SF ZFAdds "src" to "dest" and replacing the original contents of "dest".Both operands are binary.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 3 2 2 1 2mem,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-4mem,immed 17+EA 7 7 3 3-6 (W88=23+EA)accum,immed 4 3 2 1 2-3AND - Logical AndUsage: AND dest,srcModifies flags: CF OF PF SF ZF (AF undefined)Performs a logical AND of the two operands replacing the destinationwith the result.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 3 2 2 1 2mem,reg 16+EA 7 7 3 2-4 (W88=24+EA)reg,mem 9+EA 7 6 1 2-4 (W88=13+EA)reg,immed 4 3 2 1 3-4mem,immed 17+EA 7 7 3 3-6 (W88=23+EA)accum,immed 4 3 2 1 2-3ARPL - Adjusted Requested Privilege Level of Selector (286+ PM)Usage: ARPL dest,src(286+ protected mode)Modifies flags: ZFCompares the RPL bits of "dest" against "src". If the RPL bitsof "dest" are less than "src", the destination RPL bits are setequal to the source RPL bits and the Zero Flag is set. Otherwisethe Zero Flag is cleared.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg - 10 20 9 2mem,reg - 11 21 9 4BOUND - Array Index Bound Check (80188+)Usage: BOUND src,limitModifies flags: NoneArray index in source register is checked against upper and lowerbounds in memory source. The first word located at "limit" isthe lower boundary and the word at "limit+2" is the upper array bound.Interrupt 5 occurs if the source value is less than or higher thanthe source.Clocks SizeOperands 808x 286 386 486 Bytesreg16,mem32 - nj=13 nj=10 7 2reg32,mem64 - nj=13 nj=10 7 2- nj = no jump takenBSF - Bit Scan Forward (386+)Usage: BSF dest,srcModifies flags: ZFScans source operand for first bit set. Sets ZF if a bit is foundset and loads the destination with an index to first set bit. ClearsZF is no bits are found set. BSF scans forward across bit pattern(0-n) while BSR scans in reverse (n-0).Clocks SizeOperands 808x 286 386 486 Bytesreg,reg - - 10+3n 6-42 3reg,mem - - 10+3n 7-43 3-7reg32,reg32 - - 10+3n 6-42 3-7reg32,mem32 - - 10+3n 7-43 3-7BSR - Bit Scan Reverse (386+)Usage: BSR dest,srcModifies flags: ZFScans source operand for first bit set. Sets ZF if a bit is foundset and loads the destination with an index to first set bit. ClearsZF is no bits are found set. BSF scans forward across bit pattern(0-n) while BSR scans in reverse (n-0).Clocks SizeOperands 808x 286 386 486 Bytesreg,reg - - 10+3n 6-103 3reg,mem - - 10+3n 7-104 3-7reg32,reg32 - - 10+3n 6-103 3-7reg32,mem32 - - 10+3n 7-104 3-7BSWAP - Byte Swap (486+)Usage: BSWAP reg32Modifies flags: noneChanges the byte order of a 32 bit register from big endian tolittle endian or vice versa. Result left in destination registeris undefined if the operand is a 16 bit register.Clocks SizeOperands 808x 286 386 486 Bytesreg32 - - - 1 2BT - Bit Test (386+)Usage: BT dest,srcModifies flags: CFThe destination bit indexed by the source value is copied into theCarry Flag.Clocks SizeOperands 808x 286 386 486 Bytesreg16,immed8 - - 3 3 4-8mem16,immed8 - - 6 6 4-8reg16,reg16 - - 3 3 3-7mem16,reg16 - - 12 12 3-7BTC - Bit Test with Compliment (386+)Usage: BTC dest,srcModifies flags: CFThe destination bit indexed by the source value is copied into theCarry Flag after being complimented (inverted).Clocks SizeOperands 808x 286 386 486 Bytesreg16,immed8 - - 6 6 4-8mem16,immed8 - - 8 8 4-8reg16,reg16 - - 6 6 3-7mem16,reg16 - - 13 13 3-7BTR - Bit Test with Reset (386+)Usage: BTR dest,srcModifies flags: CFThe destination bit indexed by the source value is copied into theCarry Flag and then cleared in the destination.Clocks SizeOperands 808x 286 386 486 Bytesreg16,immed8 - - 6 6 4-8mem16,immed8 - - 8 8 4-8reg16,reg16 - - 6 6 3-7mem16,reg16 - - 13 13 3-7BTS - Bit Test and Set (386+)Usage: BTS dest,srcModifies flags: CFThe destination bit indexed by the source value is copied into theCarry Flag and then set in the destination.Clocks SizeOperands 808x 286 386 486 Bytesreg16,immed8 - - 6 6 4-8mem16,immed8 - - 8 8 4-8reg16,reg16 - - 6 6 3-7mem16,reg16 - - 13 13 3-7CALL - Procedure CallUsage: CALL destinationModifies flags: NonePushes Instruction Pointer (and Code Segment for far calls) ontostack and loads Instruction Pointer with the address of proc-name.Code continues with execution at CS:IP.ClocksOperands 808x 286 386 486rel16 (near, IP relative) 19 7 7+m 3rel32 (near, IP relative) - - 7+m 3reg16 (near, register indirect) 16 7 7+m 5reg32 (near, register indirect) - - 7+m 5mem16 (near, memory indirect) 21+EA 11 10+m 5mem32 (near, memory indirect) - - 10+m 5ptr16:16 (far, full ptr supplied) 28 13 17+m 18ptr16:32 (far, full ptr supplied) - - 17+m 18ptr16:16 (far, ptr supplied, prot. mode) - 26 34+m 20ptr16:32 (far, ptr supplied, prot. mode) - - 34+m 20m16:16 (far, indirect) 37+EA 16 22+m 17m16:32 (far, indirect) - - 22+m 17m16:16 (far, indirect, prot. mode) - 29 38+m 20m16:32 (far, indirect, prot. mode) - - 38+m 20ptr16:16 (task, via TSS or task gate) - 177 TS 37+TSm16:16 (task, via TSS or task gate) - 180/185 5+TS 37+TSm16:32 (task) - - TS 37+TSm16:32 (task) - - 5+TS 37+TSptr16:16 (gate, same privilege) - 41 52+m 35ptr16:32 (gate, same privilege) - - 52+m 35m16:16 (gate, same privilege) - 44 56+m 35m16:32 (gate, same privilege) - - 56+m 35ptr16:16 (gate, more priv, no parm) - 82 86+m 69ptr16:32 (gate, more priv, no parm) - - 86+m 69m16:16 (gate, more priv, no parm) - 83 90+m 69m16:32 (gate, more priv, no parm) - - 90+m 69ptr16:16 (gate, more priv, x parms) - 86+4x 94+4x+m 77+4xptr16:32 (gate, more priv, x parms) - - 94+4x+m 77+4xm16:16 (gate, more priv, x parms) - 90+4x 98+4x+m 77+4xm16:32 (gate, more priv, x parms) - - 98+4x+m 77+4xCBW - Convert Byte to WordUsage: CBWModifies flags: NoneConverts byte in AL to word Value in AX by extending sign of ALthroughout register AH.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 3 3 1CDQ - Convert Double to Quad (386+)Usage: CDQModifies flags: NoneConverts signed DWORD in EAX to a signed quad word in EDX:EAX byextending the high order bit of EAX throughout EDXClocks SizeOperands 808x 286 386 486 Bytesnone - - 2 3 1CLC - Clear CarryUsage: CLCModifies flags: CFClears the Carry Flag.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 2 2 1CLD - Clear Direction FlagUsage: CLDModifies flags: DFClears the Direction Flag causing string instructions to incrementthe SI and DI index registers.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 2 2 1CLI - Clear Interrupt Flag (disable)Usage: CLIModifies flags: IFDisables the maskable hardware interrupts by clearing the Interruptflag. NMI's and software interrupts are not inhibited.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 3 5 1CLTS - Clear Task Switched Flag (286+ privileged)Usage: CLTSModifies flags: NoneClears the Task Switched Flag in the Machine Status Register. Thisis a privileged operation and is generally used only by operatingsystem code.Clocks SizeOperands 808x 286 386 486 Bytesnone - 2 5 7 2CMC - Complement Carry FlagUsage: CMCModifies flags: CFToggles (inverts) the Carry FlagClocks SizeOperands 808x 286 386 486 Bytesnone 2 2 2 2 1CMP - CompareUsage: CMP dest,srcModifies flags: AF CF OF PF SF ZFSubtracts source from destination and updates the flags but doesnot save result. Flags can subsequently be checked for conditions.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 3 2 2 1 2mem,reg 9+EA 7 5 2 2-4 (W88=13+EA)reg,mem 9+EA 6 6 2 2-4 (W88=13+EA)reg,immed 4 3 2 1 3-4mem,immed 10+EA 6 5 2 3-6 (W88=14+EA)accum,immed 4 3 2 1 2-3CMPS - Compare String (Byte, Word or Doubleword)Usage: CMPS dest,srcCMPSBCMPSWCMPSD (386+)Modifies flags: AF CF OF PF SF ZFSubtracts destination value from source without saving results.Updates flags based on the subtraction and the index registers(E)SI and (E)DI are incremented or decremented depending on thestate of the Direction Flag. CMPSB inc/decrements the indexregisters by 1, CMPSW inc/decrements by 2, while CMPSD incrementsor decrements by 4. The REP prefixes can be used to processentire data items.Clocks SizeOperands 808x 286 386 486 Bytesdest,src 22 8 10 8 1 (W88=30)CMPXCHG - Compare and ExchangeUsage: CMPXCHG dest,src (486+)Modifies flags: AF CF OF PF SF ZFCompares the accumulator (8-32 bits) with "dest". If equal the"dest" is loaded with "src", otherwise the accumulator is loadedwith "dest".Clocks SizeOperands 808x 286 386 486 Bytesreg,reg - - - 6 2mem,reg - - - 7 2- add 3 clocks if the "mem,reg" comparison failsCWD - Convert Word to DoublewordUsage: CWDModifies flags: NoneExtends sign of word in register AX throughout register DX forminga doubleword quantity in DX:AX.Clocks SizeOperands 808x 286 386 486 Bytesnone 5 2 2 3 1CWDE - Convert Word to Extended Doubleword (386+)Usage: CWDEModifies flags: NoneConverts a signed word in AX to a signed doubleword in EAX byextending the sign bit of AX throughout EAX.Clocks SizeOperands 808x 286 386 486 Bytesnone - - 3 3 1DAA - Decimal Adjust for AdditionUsage: DAAModifies flags: AF CF PF SF ZF (OF undefined)Corrects result (in AL) of a previous BCD addition operation.Contents of AL are changed to a pair of packed decimal digits.Clocks SizeOperands 808x 286 386 486 Bytesnone 4 3 4 2 1DAS - Decimal Adjust for SubtractionUsage: DASModifies flags: AF CF PF SF ZF (OF undefined)Corrects result (in AL) of a previous BCD subtraction operation.Contents of AL are changed to a pair of packed decimal digits.Clocks SizeOperands 808x 286 386 486 Bytesnone 4 3 4 2 1DEC - DecrementUsage: DEC destModifies flags: AF OF PF SF ZFUnsigned binary subtraction of one from the destination.Clocks SizeOperands 808x 286 386 486 Bytesreg8 3 2 2 1 2mem 15+EA 7 6 3 2-4reg16/32 3 2 2 1 1DIV - DivideUsage: DIV srcModifies flags: (AF,CF,OF,PF,SF,ZF undefined)Unsigned binary division of accumulator by source. If the sourcedivisor is a byte value then AX is divided by "src" and the quotientis placed in AL and the remainder in AH. If source operand is a wordvalue, then DX:AX is divided by "src" and the quotient is stored in AXand the remainder in DX.Clocks SizeOperands 808x 286 386 486 Bytesreg8 80-90 14 14 16 2reg16 144-162 22 22 24 2reg32 - - 38 40 2mem8 (86-96)+EA 17 17 16 2-4mem16 (150-168)+EA 25 25 24 2-4 (W88=158-176+EA)mem32 - - 41 40 2-4ENTER - Make Stack Frame (80188+)Usage: ENTER locals,levelModifies flags: NoneModifies stack for entry to procedure for high level language.Operand "locals" specifies the amount of storage to be allocatedon the stack. "Level" specifies the nesting level of the routine.Paired with the LEAVE instruction, this is an efficient method ofentry and exit to procedures.Clocks SizeOperands 808x 286 386 486 Bytesimmed16,0 - 11 10 14 4immed16,1 - 15 12 17 4immed16,immed8 - 12+4(n-1) 15+4(n-1) 17+3n 4ESC - EscapeUsage: ESC immed,srcModifies flags: NoneProvides access to the data bus for other resident processors.The CPU treats it as a NOP but places memory operand on bus.Clocks SizeOperands 808x 286 386 486 Bytesimmed,reg 2 9-20 ? 2immed,mem 2 9-20 ? 2-4HLT - Halt CPUUsage: HLTModifies flags: NoneHalts CPU until RESET line is activated, NMI or maskable interruptreceived. The CPU becomes dormant but retains the current CS:IPfor later restart.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 5 4 1IDIV - Signed Integer DivisionUsage: IDIV srcModifies flags: (AF,CF,OF,PF,SF,ZF undefined)Signed binary division of accumulator by source. If source is abyte value, AX is divided by "src" and the quotient is stored inAL and the remainder in AH. If source is a word value, DX:AX isdivided by "src", and the quotient is stored in AL and theremainder in DX.Clocks SizeOperands 808x 286 386 486 Bytesreg8 101-112 17 19 19 2reg16 165-184 25 27 27 2reg32 - - 43 43 2mem8 (107-118)+EA 20 22 20 2-4mem16 (171-190)+EA 38 30 28 2-4 (W88=175-194)mem32 - - 46 44 2-4IMUL - Signed MultiplyUsage: IMUL srcIMUL src,immed (286+)IMUL dest,src,immed8 (286+)IMUL dest,src (386+)Modifies flags: CF OF (AF,PF,SF,ZF undefined)Signed multiplication of accumulator by "src" with result placedin the accumulator. If the source operand is a byte value, itis multiplied by AL and the result stored in AX. If the sourceoperand is a word value it is multiplied by AX and the result isstored in DX:AX. Other variations of this instruction allowspecification of source and destination registers as well as athird immediate factor.Clocks SizeOperands 808x 286 386 486 Bytesreg8 80-98 13 9-14 13-18 2reg16 128-154 21 9-22 13-26 2reg32 - - 9-38 12-42 2mem8 86-104 16 12-17 13-18 2-4mem16 134-160 24 12-25 13-26 2-4mem32 - - 12-41 13-42 2-4reg16,reg16 - - 9-22 13-26 3-5reg32,reg32 - - 9-38 13-42 3-5reg16,mem16 - - 12-25 13-26 3-5reg32,mem32 - - 12-41 13-42 3-5reg16,immed - 21 9-22 13-26 3reg32,immed - 21 9-38 13-42 3-6reg16,reg16,immed - 2 9-22 13-26 3-6reg32,reg32,immed - 21 9-38 13-42 3-6reg16,mem16,immed - 24 12-25 13-26 3-6reg32,mem32,immed - 24 12-41 13-42 3-6IN - Input Byte or Word From PortUsage: IN accum,portModifies flags: NoneA byte, word or dword is read from "port" and placed in AL, AX orEAX respectively. If the port number is in the range of 0-255it can be specified as an immediate, otherwise the port numbermust be specified in DX. Valid port ranges on the PC are 0-1024,though values through 65535 may be specified and recognized bythird party vendors and PS/2's.Clocks SizeOperands 808x 286 386 486 Bytesaccum,immed8 10/14 5 12 14 2accum,immed8 (PM) 6/26 8/28/27 2accum,DX 8/12 5 13 14 1accum,DX (PM) 7/27 8/28/27 1- 386+ protected mode timings depend on privilege levels.first number is the timing if: CPL ?IOPLsecond number is the timing if: CPL > IOPL or in VM 86 mode (386)CPL ?IOPL (486)third number is the timing when: virtual mode on 486 processor- 486 virtual mode always requires 27 cyclesINC - IncrementUsage: INC destModifies flags: AF OF PF SF ZFAdds one to destination unsigned binary operand.Clocks SizeOperands 808x 286 386 486 Bytesreg8 3 2 2 1 2reg16 3 2 2 1 1reg32 3 2 2 1 1mem 15+EA 7 6 3 2-4 (W88=23+EA)INS - Input String from Port (80188+)Usage: INS dest,portINSBINSWINSD (386+)Modifies flags: NoneLoads data from port to the destination ES:(E)DI (even if adestination operand is supplied). (E)DI is adjusted by the sizeof the operand and increased if the Direction Flag is cleared anddecreased if the Direction Flag is set. For INSB, INSW, INSD nooperands are allowed and the size is determined by the mnemonic.Clocks SizeOperands 808x 286 386 486 Bytesdest,port - 5 15 17 1dest,port (PM) - 5 9/29 10/32/30 1none - 5 15 17 1none (PM) - 5 9/29 10/32/30 1- 386+ protected mode timings depend on privilege levels.first number is the timing if: CPL ?IOPLsecond number is the timing if: CPL > IOPLthird number is the timing if: virtual mode on 486 processorINT - InterruptUsage: INT numModifies flags: TF IFInitiates a software interrupt by pushing the flags, clearing theTrap and Interrupt Flags, pushing CS followed by IP and loadingCS:IP with the value found in the interrupt vector table. Executionthen begins at the location addressed by the new CS:IPClocks SizeOperands 808x 286 386 486 Bytes3 (constant) 52/72 23+m 33 26 23 (prot. mode, same priv.) - 40+m 59 44 23 (prot. mode, more priv.) - 78+m 99 71 23 (from VM86 to PL 0) - - 119 82 23 (prot. mode via task gate) - 167+m TS 37+TS 2immed8 51/71 23+m 37 30 1immed8 (prot. mode, same priv.) - 40+m 59 44 1immed8 (prot. mode, more priv.) - 78+m 99 71 1immed8 (from VM86 to PL 0) - - 119 86 1immed8 (prot. mode, via task gate) - 167+m TS 37+TS 1INTO - Interrupt on OverflowUsage: INTOModifies flags: IF TFIf the Overflow Flag is set this instruction generates an INT 4which causes the code addressed by 0000:0010 to be executed.Clocks SizeOperands 808x 286 386 486 Bytesnone: jump 53/73 24+m 35 28 1no jump 4 3 3 3(prot. mode, same priv.) - - 59 46 1(prot. mode, more priv.) - - 99 73 1(from VM86 to PL 0) - - 119 84 1(prot. mode, via task gate) - TS 39+TS 1INVD - Invalidate Cache (486+)Usage: INVDModifies flags: noneFlushes CPU internal cache. Issues special function bus cyclewhich indicates to flush external caches. Data in write-backexternal caches is lost.Clocks SizeOperands 808x 286 386 486 Bytesnone - - - 4 2INVLPG - Invalidate Translation Look-Aside Buffer Entry (486+)Usage: INVLPGModifies flags: noneInvalidates a single page table entry in the TranslationLook-Aside Buffer. Intel warns that this instruction may beimplemented differently on future processors.Clocks SizeOperands 808x 286 386 486 Bytesnone - - - 12 2- timing is for TLB entry hit only.IRET/IRETD - Interrupt ReturnUsage: IRETIRETD (386+)Modifies flags: AF CF DF IF PF SF TF ZFReturns control to point of interruption by popping IP, CSand then the Flags from the stack and continues execution atthis location. CPU exception interrupts will return to theinstruction that cause the exception because the CS:IP placedon the stack during the interrupt is the address of the offendinginstruction.Clocks SizeOperands 808x 286 386 486 Bytesiret 32/44 17+m 22 15 1iret (prot. mode) - 31+m 38 15 1iret (to less privilege) - 55+m 82 36 1iret (different task, NT=1) - 169+m TS TS+32 1iretd - - 22/38 15 1iretd (to less privilege) - - 82 36 1iretd (to VM86 mode) - - 60 15 1iretd (different task, NT=1) - - TS TS+32 1- 386 timings are listed as real-mode/protected-modeJxx - Jump Instructions TableMnemonic Meaning Jump ConditionJA Jump if Above CF=0 and ZF=0JAE Jump if Above or Equal CF=0JB Jump if Below CF=1JBE Jump if Below or Equal CF=1 or ZF=1JC Jump if Carry CF=1JCXZ Jump if CX Zero CX=0JE Jump if Equal ZF=1JG Jump if Greater (signed) ZF=0 and SF=OFJGE Jump if Greater or Equal (signed) SF=OFJL Jump if Less (signed) SF != OFJLE Jump if Less or Equal (signed) ZF=1 or SF != OFJMP Unconditional Jump unconditionalJNA Jump if Not Above CF=1 or ZF=1JNAE Jump if Not Above or Equal CF=1JNB Jump if Not Below CF=0JNBE Jump if Not Below or Equal CF=0 and ZF=0JNC Jump if Not Carry CF=0JNE Jump if Not Equal ZF=0JNG Jump if Not Greater (signed) ZF=1 or SF != OFJNGE Jump if Not Greater or Equal (signed) SF != OFJNL Jump if Not Less (signed) SF=OFJNLE Jump if Not Less or Equal (signed) ZF=0 and SF=OFJNO Jump if Not Overflow (signed) OF=0JNP Jump if No Parity PF=0JNS Jump if Not Signed (signed) SF=0JNZ Jump if Not Zero ZF=0JO Jump if Overflow (signed) OF=1JP Jump if Parity PF=1JPE Jump if Parity Even PF=1JPO Jump if Parity Odd PF=0JS Jump if Signed (signed) SF=1JZ Jump if Zero ZF=1Clocks SizeOperands 808x 286 386 486 BytesJx: jump 16 7+m 7+m 3 2no jump 4 3 3 1Jx near-label - - 7+m 3 4no jump - - 3 1- It's a good programming practice to organize code so theexpected case is executed without a jump since the actualjump takes longer to execute than falling through the test.- see JCXZ and JMP for their respective timingsJCXZ/JECXZ - Jump if Register (E)CX is ZeroUsage: JCXZ labelJECXZ label (386+)Modifies flags: NoneCauses execution to branch to "label" if register CX is zero. Usesunsigned comparision.Clocks SizeOperands 808x 286 386 486 Byteslabel: jump 18 8+m 9+m 8 2no jump 6 4 5 5JMP - Unconditional JumpUsage: JMP targetModifies flags: NoneUnconditionally transfers control to "label". Jumps by defaultare within -32768 to 32767 bytes from the instruction followingthe jump. NEAR and SHORT jumps cause the IP to be updated while FARjumps cause CS and IP to be updated.ClocksOperands 808x 286 386 486rel8 (relative) 15 7+m 7+m 3rel16 (relative) 15 7+m 7+m 3rel32 (relative) - - 7+m 3reg16 (near, register indirect) 11 7+m 7+m 5reg32 (near, register indirect) - - 7+m 5mem16 (near, mem indirect) 18+EA 11+m 10+m 5mem32 (near, mem indirect) 24+EA 15+m 10+m 5ptr16:16 (far, dword immed) - - 12+m 17ptr16:16 (far, PM dword immed) - - 27+m 19ptr16:16 (call gate, same priv.) - 38+m 45+m 32ptr16:16 (via TSS) - 175+m TS 42+TSptr16:16 (via task gate) - 180+m TS 43+TSmem16:16 (far, indirect) - - 43+m 13mem16:16 (far, PM indirect) - - 31+m 18mem16:16 (call gate, same priv.) - 41+m 49+m 31mem16:16 (via TSS) - 178+m 5+TS 41+TSmem16:16 (via task gate) - 183+m 5+TS 42+TSptr16:32 (far, 6 byte immed) - - 12+m 13ptr16:32 (far, PM 6 byte immed) - - 27+m 18ptr16:32 (call gate, same priv.) - - 45+m 31ptr16:32 (via TSS) - - TS 42+TSptr16:32 (via task state) - - TS 43+TSm16:32 (far, address at dword) - - 43+m 13m16:32 (far, address at dword) - - 31+m 18m16:32 (call gate, same priv.) - - 49+m 31m16:32 (via TSS) - - 5+TS 41+TSm16:32 (via task state) - - 5+TS 42+TSLAHF - Load Register AH From FlagsUsage: LAHFModifies flags: NoneCopies bits 0-7 of the flags register into AH. This includes flagsAF, CF, PF, SF and ZF other bits are undefined.AH := SF ZF xx AF xx PF xx CFClocks SizeOperands 808x 286 386 486 Bytesnone 4 2 2 3 1LAR - Load Access Rights (286+ protected)Usage: LAR dest,srcModifies flags: ZFThe high byte of the of the destination register is overwritten bythe value of the access rights byte and the low order byte is zeroeddepending on the selection in the source operand. The Zero Flag isset if the load operation is successful.Clocks SizeOperands 808x 286 386 486 Bytesreg16,reg16 - 14 15 11 3reg32,reg32 - - 15 11 3reg16,mem16 - 16 16 11 3-7reg32,mem32 - - 16 11 3-7LDS - Load Pointer Using DSUsage: LDS dest,srcModifies flags: NoneLoads 32-bit pointer from memory source to destination registerand DS. The offset is placed in the destination register and thesegment is placed in DS. To use this instruction the word at thelower memory address must contain the offset and the word at thehigher address must contain the segment. This simplifies the loadingof far pointers from the stack and the interrupt vector table.Clocks SizeOperands 808x 286 386 486 Bytesreg16,mem32 16+EA 7 7 6 2-4reg,mem (PM) - - 22 12 5-7LEA - Load Effective AddressUsage: LEA dest,srcModifies flags: NoneTransfers offset address of "src" to the destination register.Clocks SizeOperands 808x 286 386 486 Bytesreg,mem 2+EA 3 2 1 2-4- the MOV instruction can often save clock cycles when used inplace of LEA on 8088 processorsLEAVE - Restore Stack for Procedure Exit (80188+)Usage: LEAVEModifies flags: NoneReleases the local variables created by the previous ENTERinstruction by restoring SP and BP to their condition beforethe procedure stack frame was initialized.Clocks SizeOperands 808x 286 386 486 Bytesnone - 5 4 5 1LES - Load Pointer Using ESUsage: LES dest,srcModifies flags: NoneLoads 32-bit pointer from memory source to destination registerand ES. The offset is placed in the destination register and thesegment is placed in ES. To use this instruction the word at thelower memory address must contain the offset and the word at thehigher address must contain the segment. This simplifies the loadingof far pointers from the stack and the interrupt vector table.Clocks SizeOperands 808x 286 386 486 Bytesreg,mem 16+EA 7 7 6 2-4 (W88=24+EA)reg,mem (PM) - - 22 12 5-7LFS - Load Pointer Using FS (386+)Usage: LFS dest,srcModifies flags: NoneLoads 32-bit pointer from memory source to destination registerand FS. The offset is placed in the destination register and thesegment is placed in FS. To use this instruction the word at thelower memory address must contain the offset and the word at thehigher address must contain the segment. This simplifies the loadingof far pointers from the stack and the interrupt vector table.Clocks SizeOperands 808x 286 386 486 Bytesreg,mem - - 7 6 5-7reg,mem (PM) - - 22 12 5-7LGDT - Load Global Descriptor Table (286+ privileged)Usage: LGDT srcModifies flags: NoneLoads a value from an operand into the Global Descriptor Table(GDT) register.Clocks SizeOperands 808x 286 386 486 Bytesmem64 - 11 11 11 5LIDT - Load Interrupt Descriptor Table (286+ privileged)Usage: LIDT srcModifies flags: NoneLoads a value from an operand into the Interrupt Descriptor Table(IDT) register.Clocks SizeOperands 808x 286 386 486 Bytesmem64 - 12 11 11 5LGS - Load Pointer Using GS (386+)Usage: LGS dest,srcModifies flags: NoneLoads 32-bit pointer from memory source to destination registerand GS. The offset is placed in the destination register and thesegment is placed in GS. To use this instruction the word at thelower memory address must contain the offset and the word at thehigher address must contain the segment. This simplifies the loadingof far pointers from the stack and the interrupt vector table.Clocks SizeOperands 808x 286 386 486 Bytesreg,mem - - 7 6 5-7reg,mem (PM) - - 22 12 5-7LLDT - Load Local Descriptor Table (286+ privileged)Usage: LLDT srcModifies flags: NoneLoads a value from an operand into the Local Descriptor TableRegister (LDTR).Clocks SizeOperands 808x 286 386 486 Bytesreg16 - 17 20 11 3mem16 - 19 24 11 5LMSW - Load Machine Status Word (286+ privileged)Usage: LMSW srcModifies flags: NoneLoads the Machine Status Word (MSW) from data found at "src"Clocks SizeOperands 808x 286 386 486 Bytesreg16 - 3 10 13 3mem16 - 6 13 13 5LOCK - Lock BusUsage: LOCKLOCK: (386+ prefix)Modifies flags: NoneThis instruction is a prefix that causes the CPU assert bus locksignal during the execution of the next instruction. Used toavoid two processors from updating the same data location. The286 always asserts lock during an XCHG with memory operands. Thisshould only be used to lock the bus prior to XCHG, MOV, IN andOUT instructions.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 0 0 1 1LODS - Load String (Byte, Word or Double)Usage: LODS srcLODSBLODSWLODSD (386+)Modifies flags: NoneTransfers string element addressed by DS:SI (even if an operand issupplied) to the accumulator. SI is incremented based on the sizeof the operand or based on the instruction used. If the DirectionFlag is set SI is decremented, if the Direction Flag is clear SIis incremented. Use with REP prefixes.Clocks SizeOperands 808x 286 386 486 Bytessrc 12/16 5 5 5 1LOOP - Decrement CX and Loop if CX Not ZeroUsage: LOOP labelModifies flags: NoneDecrements CX by 1 and transfers control to "label" if CX is notZero. The "label" operand must be within -128 or 127 bytes of theinstruction following the loop instructionClocks SizeOperands 808x 286 386 486 Byteslabel: jump 18 8+m 11+m 6 2no jump 5 4 ? 2LOOPE/LOOPZ - Loop While Equal / Loop While ZeroUsage: LOOPE labelLOOPZ labelModifies flags: NoneDecrements CX by 1 (without modifying the flags) and transferscontrol to "label" if CX != 0 and the Zero Flag is set. The"label" operand must be within -128 or 127 bytes of the instructionfollowing the loop instruction.Clocks SizeOperands 808x 286 386 486 Byteslabel: jump 18 8+m 11+m 9 2no jump 5 4 ? 6LOOPNZ/LOOPNE - Loop While Not Zero / Loop While Not EqualUsage: LOOPNZ labelLOOPNE labelModifies flags: NoneDecrements CX by 1 (without modifying the flags) and transferscontrol to "label" if CX != 0 and the Zero Flag is clear. The"label" operand must be within -128 or 127 bytes of the instructionfollowing the loop instruction.Clocks SizeOperands 808x 286 386 486 Byteslabel: jump 19 8+m 11+m 9 2no jump 5 4 ? 6LSL - Load Segment Limit (286+ protected)Usage: LSL dest,srcModifies flags: ZFLoads the segment limit of a selector into the destination registerif the selector is valid and visible at the current privilege level.If loading is successful the Zero Flag is set, otherwise it iscleared.Clocks SizeOperands 808x 286 386 486 Bytesreg16,reg16 - 14 20/25 10 3reg32,reg32 - - 20/25 10 3reg16,mem16 - 16 21/26 10 5reg32,mem32 - - 21/26 10 5- 386 times are listed "byte granular" / "page granular"LSS - Load Pointer Using SS (386+)Usage: LSS dest,srcModifies flags: NoneLoads 32-bit pointer from memory source to destination registerand SS. The offset is placed in the destination register and thesegment is placed in SS. To use this instruction the word at thelower memory address must contain the offset and the word at thehigher address must contain the segment. This simplifies the loadingof far pointers from the stack and the interrupt vector table.Clocks SizeOperands 808x 286 386 486 Bytesreg,mem - - 7 6 5-7reg,mem (PM) - - 22 12 5-7LTR - Load Task Register (286+ privileged)Usage: LTR srcModifies flags: NoneLoads the current task register with the value specified in "src".Clocks SizeOperands 808x 286 386 486 Bytesreg16 - 17 23 20 3mem16 - 19 27 20 5MOV - Move Byte or WordUsage: MOV dest,srcModifies flags: NoneCopies byte or word from the source operand to the destinationoperand. If the destination is SS interrupts are disabled excepton early buggy 808x CPUs. Some CPUs disable interrupts if thedestination is any of the segment registersClocks SizeOperands 808x 286 386 486 Bytesreg,reg 2 2 2 1 2mem,reg 9+EA 3 2 1 2-4 (W88=13+EA)reg,mem 8+EA 5 4 1 2-4 (W88=12+EA)mem,immed 10+EA 3 2 1 3-6 (W88=14+EA)reg,immed 4 2 2 1 2-3mem,accum 10 3 2 1 3 (W88=14)accum,mem 10 5 4 1 3 (W88=14)segreg,reg16 2 2 2 3 2segreg,mem16 8+EA 5 5 9 2-4 (W88=12+EA)reg16,segreg 2 2 2 3 2mem16,segreg 9+EA 3 2 3 2-4 (W88=13+EA)reg32,CR0/CR2/CR3 - - 6 4CR0,reg32 - - 10 16CR2,reg32 - - 4 4 3CR3,reg32 - - 5 4 3reg32,DR0/DR1/DR2/DR3 - 22 10 3reg32,DR6/DR7 - - 22 10 3DR0/DR1/DR2/DR3,reg32 - 22 11 3DR6/DR7,reg32 - - 16 11 3reg32,TR6/TR7 - - 12 4 3TR6/TR7,reg32 - - 12 4 3reg32,TR3 3TR3,reg32 6- when the 386 special registers are used all operands are 32 bitsMOVS - Move String (Byte or Word)Usage: MOVS dest,srcMOVSBMOVSWMOVSD (386+)Modifies flags: NoneCopies data from addressed by DS:SI (even if operands are given) tothe location ES:DI destination and updates SI and DI based on thesize of the operand or instruction used. SI and DI are incrementedwhen the Direction Flag is cleared and decremented when the DirectionFlag is Set. Use with REP prefixes.Clocks SizeOperands 808x 286 386 486 Bytesdest,src 18 5 7 7 1 (W88=26)MOVSX - Move with Sign Extend (386+)Usage: MOVSX dest,srcModifies flags: NoneCopies the value of the source operand to the destination registerwith the sign extended.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg - - 3 3 3reg,mem - - 6 3 3-7MOVZX - Move with Zero Extend (386+)Usage: MOVZX dest,srcModifies flags: NoneCopies the value of the source operand to the destination registerwith the zeroes extended.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg - - 3 3 3reg,mem - - 6 3 3-7MUL - Unsigned MultiplyUsage: MUL srcModifies flags: CF OF (AF,PF,SF,ZF undefined)Unsigned multiply of the accumulator by the source. If "src" isa byte value, then AL is used as the other multiplicand and theresult is placed in AX. If "src" is a word value, then AX ismultiplied by "src" and DX:AX receives the result. If "src" isa double word value, then EAX is multiplied by "src" and EDX:EAXreceives the result. The 386+ uses an early out algorithm whichmakes multiplying any size value in EAX as fast as in the 8 or 16bit registers.Clocks SizeOperands 808x 286 386 486 Bytesreg8 70-77 13 9-14 13-18 2reg16 118-113 21 9-22 13-26 2reg32 - - 9-38 13-42 2-4mem8 (76-83)+EA 16 12-17 13-18 2-4mem16 (124-139)+EA 24 12-25 13-26 2-4mem32 - - 12-21 13-42 2-4NEG - Two's Complement NegationUsage: NEG destModifies flags: AF CF OF PF SF ZFSubtracts the destination from 0 and saves the 2s complement of"dest" back into "dest".Clocks SizeOperands 808x 286 386 486 Bytesreg 3 2 2 1 2mem 16+EA 7 6 3 2-4 (W88=24+EA)NOP - No Operation (90h)Usage: NOPModifies flags: NoneThis is a do nothing instruction. It results in occupation of bothspace and time and is most useful for patching code segments.(This is the original XCHG AL,AL instruction)Clocks SizeOperands 808x 286 386 486 Bytesnone 3 3 3 1 1NOT - One's Compliment Negation (Logical NOT)Usage: NOT destModifies flags: NoneInverts the bits of the "dest" operand forming the 1s complement.Clocks SizeOperands 808x 286 386 486 Bytesreg 3 2 2 1 2mem 16+EA 7 6 3 2-4 (W88=24+EA)OR - Inclusive Logical ORUsage: OR dest,srcModifies flags: CF OF PF SF ZF (AF undefined)Logical inclusive OR of the two operands returning the result inthe destination. Any bit set in either operand will be set in thedestination.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 3 2 2 1 2mem,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-4mem8,immed8 17+EA 7 7 3 3-6mem16,immed16 25+EA 7 7 3 3-6accum,immed 4 3 2 1 2-3OUT - Output Data to PortUsage: OUT port,accumModifies flags: NoneTransfers byte in AL,word in AX or dword in EAX to the specifiedhardware port address. If the port number is in the range of 0-255it can be specified as an immediate. If greater than 255 then theport number must be specified in DX. Since the PC only decodes 10bits of the port address, values over 1023 can only be decoded bythird party vendor equipment and also map to the port range 0-1023.Clocks SizeOperands 808x 286 386 486 Bytesimmed8,accum 10/14 3 10 16 2immed8,accum (PM) - - 4/24 11/31/29 2DX,accum 8/12 3 11 16 1DX,accum (PM) - - 5/25 10/30/29 1- 386+ protected mode timings depend on privilege levels.first number is the timing when: CPL ≤ IOPLsecond number is the timing when: CPL > IOPLthird number is the timing when: virtual mode on 486 processorOUTS - Output String to Port (80188+)Usage: OUTS port,srcOUTSBOUTSWOUTSD (386+)Modifies flags: NoneTransfers a byte, word or doubleword from "src" to the hardwareport specified in DX. For instructions with no operands the "src"is located at DS:SI and SI is incremented or decremented by thesize of the operand or the size dictated by the instruction format.When the Direction Flag is set SI is decremented, when clear, SI isincremented. If the port number is in the range of 0-255 it canbe specified as an immediate. If greater than 255 then the portnumber must be specified in DX. Since the PC only decodes 10 bitsof the port address, values over 1023 can only be decoded by thirdparty vendor equipment and also map to the port range 0-1023.Clocks SizeOperands 808x 286 386 486 Bytesport,src - 5 14 17 1port,src (PM) - - 8/28 10/32/30 1- 386+ protected mode timings depend on privilege levels.first number is the timing when: CPL ≤ IOPLsecond number is the timing when: CPL > IOPLthird number is the timing when: virtual mode on 486 processorPOP - Pop Word off StackUsage: POP destModifies flags: NoneTransfers word at the current stack top (SS:SP) to the destinationthen increments SP by two to point to the new stack top. CS is nota valid destination.Clocks SizeOperands 808x 286 386 486 Bytesreg16 8 5 4 4 1reg32 4 - - 4 1segreg 8 5 7 3 1mem16 17+EA 5 5 6 2-4mem32 5 - - 6 2-4POPA/POPAD - Pop All Registers onto Stack (80188+)Usage: POPAPOPAD (386+)Modifies flags: NonePops the top 8 words off the stack into the 8 general purpose 16/32bit 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 poppedfrom the stack is actually discarded.Clocks SizeOperands 808x 286 386 486 Bytesnone - 19 24 9 1POPF/POPFD - Pop Flags off StackUsage: POPFPOPFD (386+)Modifies flags: all flagsPops word/doubleword from stack into the Flags Register and thenincrements SP by 2 (for POPF) or 4 (for POPFD).Clocks SizeOperands 808x 286 386 486 Bytesnone 8/12 5 5 9 1 (W88=12)none (PM) - - 5 6 1PUSH - Push Word onto StackUsage: PUSH srcPUSH immed (80188+ only)Modifies flags: NoneDecrements SP by the size of the operand (two or four, byte valuesare sign extended) and transfers one word from source to the stacktop (SS:SP).Clocks SizeOperands 808x 286 386 486 Bytesreg16 11/15 3 2 1 1reg32 - - 2 1 1mem16 16+EA 5 5 4 2-4 (W88=24+EA)mem32 - - 5 4 2-4segreg 10/14 3 2 3 1immed - 3 2 1 2-3PUSHA/PUSHAD - Push All Registers onto Stack (80188+)Usage: PUSHAPUSHAD (386+)Modifies flags: NonePushes all general purpose registers onto the stack in the followingorder: (E)AX, (E)CX, (E)DX, (E)BX, (E)SP, (E)BP, (E)SI, (E)DI. Thevalue of SP is the value before the actual push of SP.Clocks SizeOperands 808x 286 386 486 Bytesnone - 19 24 11 1PUSHF/PUSHFD - Push Flags onto StackUsage: PUSHFPUSHFD (386+)Modifies flags: NoneTransfers the Flags Register onto the stack. PUSHF saves a 16 bitvalue while PUSHFD saves a 32 bit value.Clocks SizeOperands 808x 286 386 486 Bytesnone 10/14 3 4 4 1none (PM) - - 4 3 1RCL - Rotate Through Carry LeftUsage: RCL dest,countModifies flags: CF OF+-+ +---------------++-+|C|<+--+|7 <---------- 0|<-+| +-+ +---------------+ |+-----------------------------+Rotates the bits in the destination to the left "count" times withall data pushed out the left side re-entering on the right. TheCarry Flag holds the last bit rotated out.Clocks SizeOperands 808x 286 386 486 Bytesreg,1 2 2 9 3 2mem,1 15+EA 7 10 4 2-4 (W88=23+EA)reg,CL 8+4n 5+n 9 8-30 2mem,CL 20+EA+4n 8+n 10 9-31 2-4 (W88=28+EA+4n)reg,immed8 - 5+n 9 8-30 3mem,immed8 - 8+n 10 9-31 3-5RCR - Rotate Through Carry RightUsage: RCR dest,countModifies flags: CF OF+---------------+ +-++->|7 +---------> 0|+--->|C|+-+| +---------------+ +-+ |+-----------------------------+Rotates the bits in the destination to the right "count" times withall data pushed out the right side re-entering on the left. TheCarry Flag holds the last bit rotated out.Clocks SizeOperands 808x 286 386 486 Bytesreg,1 2 2 9 3 2mem,1 15+EA 7 10 4 2-4 (W88=23+EA)reg,CL 8+4n 5+n 9 8-30 2mem,CL 20+EA+4n 8+n 10 9-31 2-4 (W88=28+EA+4n)reg,immed8 - 5+n 9 8-30 3mem,immed8 - 8+n 10 9-31 3-5REP - Repeat String OperationUsage: REPModifies flags: NoneRepeats execution of string instructions while CX != 0. Aftereach string operation, CX is decremented and the Zero Flag istested. The combination of a repeat prefix and a segment overrideon CPU's before the 386 may result in errors if an interrupt occursbefore CX=0. The following code shows code that is susceptible tothis and how to avoid it:again: rep movs byte ptr ES:[DI],ES:[SI] ; vulnerable instr.jcxz next ; continue if REP successfulloop again ; interrupt goofed countnext:Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 2 1REPE/REPZ - Repeat Equal / Repeat ZeroUsage: REPEREPZModifies flags: NoneRepeats execution of string instructions while CX != 0 and the ZeroFlag is set. CX is decremented and the Zero Flag tested aftereach string operation. The combination of a repeat prefix and asegment override on processors other than the 386 may result inerrors if an interrupt occurs before CX=0.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 2 1REPNE/REPNZ - Repeat Not Equal / Repeat Not ZeroUsage: REPNEREPNZModifies flags: NoneRepeats execution of string instructions while CX != 0 and the ZeroFlag is clear. CX is decremented and the Zero Flag tested aftereach string operation. The combination of a repeat prefix and asegment override on processors other than the 386 may result inerrors if an interrupt occurs before CX=0.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 2 1RET/RETF - Return From ProcedureUsage: RET nBytesRETF nBytesRETN nBytesModifies flags: NoneTransfers control from a procedure back to the instruction addresssaved on the stack. "n bytes" is an optional number of bytes torelease. Far returns pop the IP followed by the CS, while nearreturns pop only the IP register.Clocks SizeOperands 808x 286 386 486 Bytesretn 16/20 11+m 10+m 5 1retn immed 20/24 11+m 10+m 5 3retf 26/34 15+m 18+m 13 1retf (PM, same priv.) - 32+m 18 1retf (PM, lesser priv.) - 68 33 1retf immed 25/33 15+m 18+m 14 3retf immed (PM, same priv.) 32+m 17 1retf immed (PM, lesser priv.) 68 33 1ROL - Rotate LeftUsage: ROL dest,countModifies flags: CF OF+-+ +---------------+|C|<++-+|7 <---------- 0|<-++-+ | +---------------+ |+---------------------+Rotates the bits in the destination to the left "count" times withall data pushed out the left side re-entering on the right. TheCarry Flag will contain the value of the last bit rotated out.Clocks SizeOperands 808x 286 386 486 Bytesreg,1 2 2 3 3 2mem,1 15+EA 7 7 4 2-4 (W88=23+EA)reg,CL 8+4n 5+n 3 3 2mem,CL 20+EA+4n 8+n 7 4 2-4 (W88=28+EA+4n)reg,immed8 - 5+n 3 2 3mem,immed8 - 8+n 7 4 3-5ROR - Rotate RightUsage: ROR dest,countModifies flags: CF OF+---------------+ +-++->|7 +---------> 0|+-+->|C|| +---------------+ | +-++---------------------+Rotates the bits in the destination to the right "count" times withall data pushed out the right side re-entering on the left. TheCarry Flag will contain the value of the last bit rotated out.Clocks SizeOperands 808x 286 386 486 Bytesreg,1 2 2 3 3 2mem,1 15+EA 7 7 4 2-4 (W88=23+EA)reg,CL 8+4n 5+n 3 3 2mem,CL 20+EA+4n 8+n 7 4 2-4 (W88=28+EA+4n)reg,immed8 - 5+n 3 2 3mem,immed8 - 8+n 7 4 3-5SAHF - Store AH Register into FLAGSUsage: SAHFModifies flags: AF CF PF SF ZFTransfers bits 0-7 of AH into the Flags Register. This includesAF, CF, PF, SF and ZF.Clocks SizeOperands 808x 286 386 486 Bytesnone 4 2 3 2 1SAL/SHL - Shift Arithmetic Left / Shift Logical LeftUsage: SAL dest,countSHL dest,countModifies flags: CF OF PF SF ZF (AF undefined)+-+ +---------------+ +-+|C|<---+|7 <---------- 0|<---+|0|+-+ +---------------+ +-+Shifts the destination left by "count" bits with zeroes shiftedin on right. The Carry Flag contains the last bit shifted out.Clocks SizeOperands 808x 286 386 486 Bytesreg,1 2 2 3 3 2mem,1 15+EA 7 7 4 2-4 (W88=23+EA)reg,CL 8+4n 5+n 3 3 2mem,CL 20+EA+4n 8+n 7 4 2-4 (W88=28+EA+4n)reg,immed8 - 5+n 3 2 3mem,immed8 - 8+n 7 4 3-5SAR - Shift Arithmetic RightUsage: SAR dest,countModifies flags: CF OF PF SF ZF (AF undefined)+---------------+ +-++-+|7 ----------> 0|---+>|C|| +---------------+ +-++---^Shifts the destination right by "count" bits with the current signbit replicated in the leftmost bit. The Carry Flag contains thelast bit shifted out.Clocks SizeOperands 808x 286 386 486 Bytesreg,1 2 2 3 3 2mem,1 15+EA 7 7 4 2-4 (W88=23+EA)reg,CL 8+4n 5+n 3 3 2mem,CL 20+EA+4n 8+n 7 4 2-4 (W88=28+EA+4n)reg,immed8 - 5+n 3 2 3mem,immed8 - 8+n 7 4 3-5SBB - Subtract with Borrow/CarryUsage: SBB dest,srcModifies flags: AF CF OF PF SF ZFSubtracts the source from the destination, and subtracts 1 extra ifthe Carry Flag is set. Results are returned in "dest".Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 3 2 2 1 2mem,reg 16+EA 7 6 3 2-4 (W88=24+EA)reg,mem 9+EA 7 7 2 2-4 (W88=13+EA)reg,immed 4 3 2 1 3-4mem,immed 17+EA 7 7 3 3-6 (W88=25+EA)accum,immed 4 3 2 1 2-3SCAS - Scan String (Byte, Word or Doubleword)Usage: SCAS stringSCASBSCASWSCASD (386+)Modifies flags: AF CF OF PF SF ZFCompares value at ES:DI (even if operand is specified) from theaccumulator and sets the flags similar to a subtraction. DI isincremented/decremented based on the instruction format (oroperand size) and the state of the Direction Flag. Use with REPprefixes.Clocks SizeOperands 808x 286 386 486 Bytesstring 15 7 7 6 1 (W88=19)SETAE/SETNB - Set if Above or Equal / Set if Not Below (386+)Usage: SETAE destSETNB dest(unsigned, 386+)Modifies flags: noneSets the byte in the operand to 1 if the Carry Flag is clearotherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETB/SETNAE - Set if Below / Set if Not Above or Equal (386+)Usage: SETB destSETNAE dest(unsigned, 386+)Modifies flags: noneSets the byte in the operand to 1 if the Carry Flag is setotherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETBE/SETNA - Set if Below or Equal / Set if Not Above (386+)Usage: SETBE destSETNA dest(unsigned, 386+)Modifies flags: noneSets the byte in the operand to 1 if the Carry Flag or the ZeroFlag is set, otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETE/SETZ - Set if Equal / Set if Zero (386+)Usage: SETE destSETZ destModifies flags: noneSets the byte in the operand to 1 if the Zero Flag is set,otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETNE/SETNZ - Set if Not Equal / Set if Not Zero (386+)Usage: SETNE destSETNZ destModifies flags: noneSets the byte in the operand to 1 if the Zero Flag is clear,otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETL/SETNGE - Set if Less / Set if Not Greater or Equal (386+)Usage: SETL destSETNGE dest(signed, 386+)Modifies flags: noneSets the byte in the operand to 1 if the Sign Flag is not equalto the Overflow Flag, otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETGE/SETNL - Set if Greater or Equal / Set if Not Less (386+)Usage: SETGE destSETNL dest(signed, 386+)Modifies flags: noneSets the byte in the operand to 1 if the Sign Flag equals theOverflow Flag, otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETLE/SETNG - Set if Less or Equal / Set if Not greater or Equal (386+)Usage: SETLE destSETNG dest(signed, 386+)Modifies flags: noneSets the byte in the operand to 1 if the Zero Flag is set or theSign Flag is not equal to the Overflow Flag, otherwise sets theoperand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETG/SETNLE - Set if Greater / Set if Not Less or Equal (386+)Usage: SETG destSETNLE dest(signed, 386+)Modifies flags: noneSets the byte in the operand to 1 if the Zero Flag is clear or theSign Flag equals to the Overflow Flag, otherwise sets the operandto 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETS - Set if Signed (386+)Usage: SETS destModifies flags: noneSets the byte in the operand to 1 if the Sign Flag is set, otherwisesets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETNS - Set if Not Signed (386+)Usage: SETNS destModifies flags: noneSets the byte in the operand to 1 if the Sign Flag is clear,otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETC - Set if Carry (386+)Usage: SETC destModifies flags: noneSets the byte in the operand to 1 if the Carry Flag is set,otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETNC - Set if Not Carry (386+)Usage: SETNC destModifies flags: noneSets the byte in the operand to 1 if the Carry Flag is clear,otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETO - Set if Overflow (386+)Usage: SETO destModifies flags: noneSets the byte in the operand to 1 if the Overflow Flag is set,otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETNO - Set if Not Overflow (386+)Usage: SETNO destModifies flags: noneSets the byte in the operand to 1 if the Overflow Flag is clear,otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETP/SETPE - Set if Parity / Set if Parity Even (386+)Usage: SETP destSETPE destModifies flags: noneSets the byte in the operand to 1 if the Parity Flag is set,otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SETNP/SETPO - Set if No Parity / Set if Parity Odd (386+)Usage: SETNP destSETPO destModifies flags: noneSets the byte in the operand to 1 if the Parity Flag is clear,otherwise sets the operand to 0.Clocks SizeOperands 808x 286 386 486 Bytesreg8 - - 4 3 3mem8 - - 5 4 3SGDT - Store Global Descriptor Table (286+ privileged)Usage: SGDT destModifies flags: noneStores the Global Descriptor Table (GDT) Register into thespecified operand.Clocks SizeOperands 808x 286 386 486 Bytesmem64 - 11 9 10 5SIDT - Store Interrupt Descriptor Table (286+ privileged)Usage: SIDT destModifies flags: noneStores the Interrupt Descriptor Table (IDT) Register into thespecified operand.Clocks SizeOperands 808x 286 386 486 Bytesmem64 - 12 9 10 5SHL - Shift Logical LeftSee: SALSHR - Shift Logical RightUsage: SHR dest,countModifies flags: CF OF PF SF ZF (AF undefined)+-+ +---------------+ +-+|0|---+>|7 ----------> 0|---+>|C|+-+ +---------------+ +-+Shifts the destination right by "count" bits with zeroes shiftedin on the left. The Carry Flag contains the last bit shifted out.Clocks SizeOperands 808x 286 386 486 Bytesreg,1 2 2 3 2mem,1 15+EA 7 7 2-4 (W88=23+EA)reg,CL 8+4n 5+n 3 2mem,CL 20+EA+4n 8+n 7 2-4 (W88=28+EA+4n)reg,immed8 - 5+n 3 3mem,immed8 - 8+n 7 3-5SHLD/SHRD - Double Precision Shift (386+)Usage: SHLD dest,src,countSHRD dest,src,countModifies flags: CF PF SF ZF (OF,AF undefined)SHLD shifts "dest" to the left "count" times and the bit positionsopened are filled with the most significant bits of "src". SHRDshifts "dest" to the right "count" times and the bit positionsopened are filled with the least significant bits of the secondoperand. Only the 5 lower bits of "count" are used.Clocks SizeOperands 808x 286 386 486 Bytesreg16,reg16,immed8 - - 3 2 4reg32,reg32,immed8 - - 3 2 4mem16,reg16,immed8 - - 7 3 6mem32,reg32,immed8 - - 7 3 6reg16,reg16,CL - - 3 3 3reg32,reg32,CL - - 3 3 3mem16,reg16,CL - - 7 4 5mem32,reg32,CL - - 7 4 5SLDT - Store Local Descriptor Table (286+ privileged)Usage: SLDT destModifies flags: noneStores the Local Descriptor Table (LDT) Register into thespecified operand.Clocks SizeOperands 808x 286 386 486 Bytesreg16 - 2 2 2 3mem16 - 2 2 3 5SMSW - Store Machine Status Word (286+ privileged)Usage: SMSW destModifies flags: noneStore Machine Status Word (MSW) into "dest".Clocks SizeOperands 808x 286 386 486 Bytesreg16 - 2 10 2 3mem16 - 3 3 3 5STC - Set CarryUsage: STCModifies flags: CFSets the Carry Flag to 1.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 2 2 1STD - Set Direction FlagUsage: STDModifies flags: DFSets the Direction Flag to 1 causing string instructions toauto-decrement SI and DI instead of auto-increment.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 2 2 1STI - Set Interrupt Flag (Enable Interrupts)Usage: STIModifies flags: IFSets the Interrupt Flag to 1, which enables recognition of allhardware interrupts. If an interrupt is generated by a hardwaredevice, an End of Interrupt (EOI) must also be issued to enableother hardware interrupts of the same or lower priority.Clocks SizeOperands 808x 286 386 486 Bytesnone 2 2 2 5 1STOS - Store String (Byte, Word or Doubleword)Usage: STOS destSTOSBSTOSWSTOSDModifies flags: NoneStores value in accumulator to location at ES:(E)DI (even if operandis given). (E)DI is incremented/decremented based on the size ofthe operand (or instruction format) and the state of the DirectionFlag. Use with REP prefixes.Clocks SizeOperands 808x 286 386 486 Bytesdest 11 3 4 5 1 (W88=15)STR - Store Task Register (286+ privileged)Usage: STR destModifies flags: NoneStores the current Task Register to the specified operand.Clocks SizeOperands 808x 286 386 486 Bytesreg16 - 2 2 2 3mem16 - 3 2 3 5SUB - SubtractUsage: SUB dest,srcModifies flags: AF CF OF PF SF ZFThe source is subtracted from the destination and the result isstored in the destination.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 3 2 2 1 2mem,reg 16+EA 7 6 3 2-4 (W88=24+EA)reg,mem 9+EA 7 7 2 2-4 (W88=13+EA)reg,immed 4 3 2 1 3-4mem,immed 17+EA 7 7 3 3-6 (W88=25+EA)accum,immed 4 3 2 1 2-3TEST - Test For Bit PatternUsage: TEST dest,srcModifies flags: CF OF PF SF ZF (AF undefined)Performs a logical AND of the two operands updating the flagsregister without saving the result.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 3 2 1 1 2reg,mem 9+EA 6 5 1 2-4 (W88=13+EA)mem,reg 9+EA 6 5 2 2-4 (W88=13+EA)reg,immed 5 3 2 1 3-4mem,immed 11+EA 6 5 2 3-6accum,immed 4 3 2 1 2-3VERR - Verify Read (286+ protected)Usage: VERR srcModifies flags: ZFVerifies the specified segment selector is valid and is readableat the current privilege level. If the segment is readable,the Zero Flag is set, otherwise it is cleared.Clocks SizeOperands 808x 286 386 486 Bytesreg16 - 14 10 11 3mem16 - 16 11 11 5VERW - Verify Write (286+ protected)Usage: VERW srcModifies flags: ZFVerifies the specified segment selector is valid and is ratableat the current privilege level. If the segment is writable,the Zero Flag is set, otherwise it is cleared.Clocks SizeOperands 808x 286 386 486 Bytesreg16 - 14 15 11 3mem16 - 16 16 11 5WAIT/FWAIT - Event WaitUsage: WAITFWAITModifies flags: NoneCPU enters wait state until the coprocessor signals it has finishedits operation. This instruction is used to prevent the CPU fromaccessing memory that may be temporarily in use by the coprocessor.WAIT and FWAIT are identical.Clocks SizeOperands 808x 286 386 486 Bytesnone 4 3 6+ 1-3 1WBINVD - Write-Back and Invalidate Cache (486+)Usage: WBINVDModifies flags: NoneFlushes internal cache, then signals the external cache to writeback current data followed by a signal to flush the external cache.Clocks SizeOperands 808x 286 386 486 Bytesnone - - - 5 2XCHG - ExchangeUsage: XCHG dest,srcModifies flags: NoneExchanges contents of source and destination.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 4 3 3 3 2mem,reg 17+EA 5 5 5 2-4 (W88=25+EA)reg,mem 17+EA 5 5 3 2-4 (W88=25+EA)accum,reg 3 3 3 3 1reg,accum 3 3 3 3 1XLAT/XLATB - TranslateUsage: XLAT translation-tableXLATB (masm 5.x)Modifies flags: NoneReplaces the byte in AL with byte from a user table addressed byBX. The original value of AL is the index into the translate table.The best way to discripe this is MOV AL,[BX+AL]Clocks SizeOperands 808x 286 386 486 Bytestable offset 11 5 5 4 1XOR - Exclusive ORUsage: XOR dest,srcModifies flags: CF OF PF SF ZF (AF undefined)Performs a bitwise exclusive OR of the operands and returnsthe result in the destination.Clocks SizeOperands 808x 286 386 486 Bytesreg,reg 3 2 2 1 2mem,reg 16+EA 7 6 3 2-4 (W88=24+EA)reg,mem 9+EA 7 7 2 2-4 (W88=13+EA)reg,immed 4 3 2 1 3-4mem,immed 17+EA 7 7 3 3-6 (W88=25+EA)accum,immed 4 3 2 1 2-3
作者Blog:http://blog.csdn.net/legend_amoy/相关文章 INTEL 汇编指令集 安装程序时出现“16 Bit MS-DOS Subsystem”(16 位 MS-DOS 子系统)错误消息
CSDN技术中心 INTEL 汇编指令集
CSDN技术中心 Log4j
51汇编指令集
51汇编指令集
CSDN技术中心 编译原理
CSDN技术中心 Log4Net使用指南
CSDN技术中心 正则表达式
PowerPC汇编指令集111
CSDN技术中心 数据压缩技术简史
CSDN技术中心 Windows管道技术简述
Intel体系MMX指令
csdn技术中心 mysql 性能优化
csdn技术中心 自己写ant task
CSDN技术中心 再再论指针----篇首语
CSDN技术中心 Java打印程序设计
1CSDN技术中心 编译原理
CSDN技术中心 试用Nutch (1)
Annotation简介 - java - CSDN技术中心
JAVA字符集 - java - CSDN技术中心
CSDN技术中心-网络最经典命令行
CSDN技术中心 Java NIO API详解
CSDN技术中心 oSIP开发者手册
8086汇编指令大全
汇编指令及进位