📄 80x86-code.htm
字号:
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> reg8 80-98 13 9-14 13-18 2
reg16 128-154 21 9-22 13-26 2
reg32 - - 9-38 12-42 2
mem8 86-104 16 12-17 13-18 2-4
mem16 134-160 24 12-25 13-26 2-4
mem32 - - 12-41 13-42 2-4
reg16,reg16 - - 9-22 13-26 3-5
reg32,reg32 - - 9-38 13-42 3-5
reg16,mem16 - - 12-25 13-26 3-5
reg32,mem32 - - 12-41 13-42 3-5
reg16,immed - 21 9-22 13-26 3
reg32,immed - 21 9-38 13-42 3-6
reg16,reg16,immed - 2 9-22 13-26 3-6
reg32,reg32,immed - 21 9-38 13-42 3-6
reg16,mem16,immed - 24 12-25 13-26 3-6
reg32,mem32,immed - 24 12-41 13-42 3-6
</font></pre>
<pre><font color="#008080">IN - Input Byte or Word From Port</font></pre>
<pre><font color="#008080"> Usage: IN accum,port
Modifies flags: None</font></pre>
<pre><font color="#008080"> A byte, word or dword is read from "port" and placed in AL, AX or
EAX respectively. If the port number is in the range of 0-255
it can be specified as an immediate, otherwise the port number
must be specified in DX. Valid port ranges on the PC are 0-1024,
though values through 65535 may be specified and recognized by
third party vendors and PS/2's.</font></pre>
<pre><font color="#008080"> Clocks Size
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> accum,immed8 10/14 5 12 14 2
accum,immed8 (PM) 6/26 8/28/27 2
accum,DX 8/12 5 13 14 1
accum,DX (PM) 7/27 8/28/27 1</font></pre>
<pre><font color="#008080"> - 386+ protected mode timings depend on privilege levels.</font></pre>
<pre><font color="#008080"> first number is the timing if: CPL ?IOPL
second 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 cycles
INC - Increment</font></pre>
<pre><font color="#008080"> Usage: INC dest
Modifies flags: AF OF PF SF ZF</font></pre>
<pre><font color="#008080"> Adds one to destination unsigned binary operand.</font></pre>
<pre><font color="#008080"> Clocks Size
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> reg8 3 2 2 1 2
reg16 3 2 2 1 1
reg32 3 2 2 1 1
mem 15+EA 7 6 3 2-4 (W88=23+EA)
</font></pre>
<pre><font color="#008080">INS - Input String from Port (80188+)</font></pre>
<pre><font color="#008080"> Usage: INS dest,port
INSB
INSW
INSD (386+)
Modifies flags: None</font></pre>
<pre><font color="#008080"> Loads data from port to the destination ES:(E)DI (even if a
destination operand is supplied). (E)DI is adjusted by the size
of the operand and increased if the Direction Flag is cleared and
decreased if the Direction Flag is set. For INSB, INSW, INSD no
operands are allowed and the size is determined by the mnemonic.</font></pre>
<pre><font color="#008080"> Clocks Size
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> dest,port - 5 15 17 1
dest,port (PM) - 5 9/29 10/32/30 1
none - 5 15 17 1
none (PM) - 5 9/29 10/32/30 1</font></pre>
<pre><font color="#008080"> - 386+ protected mode timings depend on privilege levels.</font></pre>
<pre><font color="#008080"> first number is the timing if: CPL ?IOPL
second number is the timing if: CPL > IOPL
third number is the timing if: virtual mode on 486 processor
</font></pre>
<pre><font color="#008080">INT - Interrupt</font></pre>
<pre><font color="#008080"> Usage: INT num
Modifies flags: TF IF</font></pre>
<pre><font color="#008080"> Initiates a software interrupt by pushing the flags, clearing the
Trap and Interrupt Flags, pushing CS followed by IP and loading
CS:IP with the value found in the interrupt vector table. Execution
then begins at the location addressed by the new CS:IP</font></pre>
<pre><font color="#008080"> Clocks Size
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> 3 (constant) 52/72 23+m 33 26 2
3 (prot. mode, same priv.) - 40+m 59 44 2
3 (prot. mode, more priv.) - 78+m 99 71 2
3 (from VM86 to PL 0) - - 119 82 2
3 (prot. mode via task gate) - 167+m TS 37+TS 2
immed8 51/71 23+m 37 30 1
immed8 (prot. mode, same priv.) - 40+m 59 44 1
immed8 (prot. mode, more priv.) - 78+m 99 71 1
immed8 (from VM86 to PL 0) - - 119 86 1
immed8 (prot. mode, via task gate) - 167+m TS 37+TS 1
INTO - Interrupt on Overflow</font></pre>
<pre><font color="#008080"> Usage: INTO
Modifies flags: IF TF</font></pre>
<pre><font color="#008080"> If the Overflow Flag is set this instruction generates an INT 4
which causes the code addressed by 0000:0010 to be executed.</font></pre>
<pre><font color="#008080"> Clocks Size
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> none: jump 53/73 24+m 35 28 1
no 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 1
</font></pre>
<pre><font color="#008080">INVD - Invalidate Cache (486+)</font></pre>
<pre><font color="#008080"> Usage: INVD
Modifies flags: none</font></pre>
<pre><font color="#008080"> Flushes CPU internal cache. Issues special function bus cycle
which indicates to flush external caches. Data in write-back
external caches is lost.
</font></pre>
<pre><font color="#008080"> Clocks Size
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> none - - - 4 2
</font></pre>
<pre><font color="#008080">INVLPG - Invalidate Translation Look-Aside Buffer Entry (486+)</font></pre>
<pre><font color="#008080"> Usage: INVLPG
Modifies flags: none</font></pre>
<pre><font color="#008080"> Invalidates a single page table entry in the Translation
Look-Aside Buffer. Intel warns that this instruction may be
implemented differently on future processors.
</font></pre>
<pre><font color="#008080"> Clocks Size
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> none - - - 12 2</font></pre>
<pre><font color="#008080"> - timing is for TLB entry hit only.
</font></pre>
<pre><font color="#008080">IRET/IRETD - Interrupt Return</font></pre>
<pre><font color="#008080"> Usage: IRET
IRETD (386+)
Modifies flags: AF CF DF IF PF SF TF ZF</font></pre>
<pre><font color="#008080"> Returns control to point of interruption by popping IP, CS
and then the Flags from the stack and continues execution at
this location. CPU exception interrupts will return to the
instruction that cause the exception because the CS:IP placed
on the stack during the interrupt is the address of the offending
instruction.</font></pre>
<pre><font color="#008080"> Clocks Size
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> iret 32/44 17+m 22 15 1
iret (prot. mode) - 31+m 38 15 1
iret (to less privilege) - 55+m 82 36 1
iret (different task, NT=1) - 169+m TS TS+32 1
iretd - - 22/38 15 1
iretd (to less privilege) - - 82 36 1
iretd (to VM86 mode) - - 60 15 1
iretd (different task, NT=1) - - TS TS+32 1</font></pre>
<pre><font color="#008080"> - 386 timings are listed as real-mode/protected-mode
Jxx - Jump Instructions Table</font></pre>
<pre><font color="#008080"> Mnemonic Meaning Jump Condition</font></pre>
<pre><font color="#008080"> JA Jump if Above CF=0 and ZF=0
JAE Jump if Above or Equal CF=0
JB Jump if Below CF=1
JBE Jump if Below or Equal CF=1 or ZF=1
JC Jump if Carry CF=1
JCXZ Jump if CX Zero CX=0
JE Jump if Equal ZF=1
JG Jump if Greater (signed) ZF=0 and SF=OF
JGE Jump if Greater or Equal (signed) SF=OF
JL Jump if Less (signed) SF != OF
JLE Jump if Less or Equal (signed) ZF=1 or SF != OF
JMP Unconditional Jump unconditional
JNA Jump if Not Above CF=1 or ZF=1
JNAE Jump if Not Above or Equal CF=1
JNB Jump if Not Below CF=0
JNBE Jump if Not Below or Equal CF=0 and ZF=0
JNC Jump if Not Carry CF=0
JNE Jump if Not Equal ZF=0
JNG Jump if Not Greater (signed) ZF=1 or SF != OF
JNGE Jump if Not Greater or Equal (signed) SF != OF
JNL Jump if Not Less (signed) SF=OF
JNLE Jump if Not Less or Equal (signed) ZF=0 and SF=OF
JNO Jump if Not Overflow (signed) OF=0
JNP Jump if No Parity PF=0
JNS Jump if Not Signed (signed) SF=0
JNZ Jump if Not Zero ZF=0
JO Jump if Overflow (signed) OF=1
JP Jump if Parity PF=1
JPE Jump if Parity Even PF=1
JPO Jump if Parity Odd PF=0
JS Jump if Signed (signed) SF=1
JZ Jump if Zero ZF=1</font></pre>
<pre><font color="#008080"> Clocks Size
Operands 808x 286 386 486 Bytes</font></pre>
<pre><font color="#008080"> Jx: jump 16 7+m 7+m 3 2
no jump 4 3 3 1
Jx near-label - - 7+m 3 4
no jump - - 3 1</font></pre>
<pre><font color="#008080"> - It's a good programming practice to organize code so the
expected case is executed without a jump since the actual
jump takes longer to execute than falling through the test.
- see JCXZ and JMP for their respective timings
</font></pre
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -