1.数据传送指令[Top]
1.1、传送指令[Top]
| 指令的语法 | 举例 | 周期数 |
| MOV reg,reg | mov bp,sp | 1 |
| MOV mem,reg | mov array[di],bx | 1 |
| MOV reg,mem | mov bx,pointer | 1 |
| MOV mem,immed | mov [bx],15 | 1 |
| MOV reg,immed | mov cx,256 | 1 |
| MOV mem,accum | mov total,ax | 1 |
| MOV accum,mem | mov al,string | 1 |
| MOV segreg,reg16 | mov ds,ax | 2, 3 |
| MOV segreg,mem16 | mov es,psp | 2, 3 |
| MOV reg16,segreg | mov ax,ds | 1 |
| MOV mem16,segreg | mov stack_save,ss | 1 |
| MOV reg32,controlreg | mov eax,cr0 | 22 |
| mov eax,cr2 | 12 | |
| mov eax,cr3 | 21, 46 | |
| mov eax,cr4 | 14 | |
| MOV controlreg,reg32 | mov cr0,eax | 4 |
| MOV reg32,debugreg | mov edx,dr0 | DR0-DR3, DR6,DR7=11 |
| DR4,DR5=12 | ||
| MOV debugreg,reg32 | mov dr0,ecx | DR0-DR3, |
| DR4,DR5=12 DR6,DR7=11 |
1.2、传送-填充指令[Top]
| MOVSX reg,reg | movsx bx,al | 3 |
| MOVSX reg,mem | movsx eax,bsign | 3 |
| MOVZX reg,reg | movzx bx,al | 3 |
| MOVZX reg,mem | movzx eax,bunsign | 3 |
1.3、交换指令[Top]
| XCHG reg,reg | xchg cx,dx | 3 |
| XCHG reg,mem | xchg bx,pointer | 3 |
| XCHG mem,reg | xchg [bx],ax | 3 |
| XCHG accum,reg | xchg ax,cx | 2 |
| XCHG reg,accum | xchg cx,ax | 2 |
1.4、取段地址和有效地址指令[Top]
| LDS reg,mem | lds si,fpointer | 4 |
| LES reg,mem | les di,fpointer | 4 |
| LFS reg,mem | lfs edi,fpointer | 4 |
| LGS reg,mem | lgs bx,fpointer | 4 |
| LSS reg,mem | lss bp, fpointer | 4, pm=8 |
| LEA reg,mem | lea bx,npointer | 1 |
1.5、进栈指令[Top]
| PUSH reg | push dx | 1 |
| PUSH mem | push [di] | 2 |
| PUSH segreg | push es | 1 |
| PUSH immed | push 15000 | 1 |
| PUSHA | pusha | 5 |
| PUSHAD | pushad | 5 |
| PUSHF | pushf | 4, pm=3 |
| PUSHFD | pushfd | 4, pm=3 |
1.6、出栈指令[Top]
| POP reg | pop cx | 1 |
| POP mem | pop param | 3 |
| POP segreg | pop es | 3 |
| POPA | popa | 5 |
| POPAD | popad | 5 |
| POPF | popf | 6, pm=4 |
| POPFD | popfd | 6, pm=4 |
1.7、转换指令[Top]
| XLAT [[segreg:]mem] | xlat | 4 |
| XLATB [[segreg:]mem] | xlatb es:table | 4 |
1.8、输入指令[Top]
| IN accum,immed | in ax,60h | 7, pm=4,21*(注), vm=19 |
| IN accum,DX | in ax,dx | 7, pm=4,21*, vm=19 |
| INS [ES:]dest, DX | ins es:instr,dx | 9, pm=6,24*, vm=22 |
| INSB | Insb | 9, pm=6,24*, vm=22 |
| INSW | Insw | 9, pm=6,24*, vm=22 |
| INSD | Insd | 9, pm=6,24*, vm=22 |
注:当CPL≤IOPL时,执行时间是第一个时钟周期,否则是第二个时钟周期。
1.9、输出指令[Top]
| OUT immed8,accum | out 60h,al | 12, pm=9,26, VM=24 |
| OUT DX,accum | out dx,ax | 12, pm=9,25, VM=24 |
| OUTS DX,[segreg:]src | outs dx,buffer | 13, pm=10,27, VM=24 |
| OUTSB [DX,[segreg:]src] | outsb | 13, pm=10,27, VM=24 |
| OUTSW [DX,[segreg:]src] | outsw | 13, pm=10,27, VM=24 |
| OUTSD [DX,[segreg:]src] | outsd | 13, pm=10,27, VM=24 |
2.标志位操作指令[Top]
2.1、标志位操作指令[Top]
| 指令的语法 | 举例 | 周期数 |
| CLC | clc | 2 |
| CMC | cmc | 2 |
| STC | stc | 2 |
| CLD | cld | 2 |
| STD | std | 2 |
| CLI | cli | 7 |
| STI | sti | 7 |
2.2、标志位存取操作指令[Top]
| SAHF | Sahf | 2 |
| LAHF | lahf | 2 |
2.3、标志位堆栈操作指令[Top]
| PUSHF | pushf | 4, pm=3 |
| PUSHFD | pushfd | 4, pm=3 |
| POPF | popf | 6, pm=4 |
| POPFD | popfd | 6, pm=4 |
3.算术运算指令[Top]
3.1、加法指令[Top]
| 指令的语法 | 举例 | 周期数 |
| ADC reg,reg | adc dx,cx | 1 |
| ADC mem,reg | adc word ptr m16[2],dx | 3 |
| ADC reg,mem | adc dx,dword ptr m32[2] | 2 |
| ADD reg,reg | add ax,bx | 1 |
| ADD mem,reg | add total, cx | 3 |
| ADD reg,mem | add cx,incr | 2 |
| ADD reg,immed | add bx,6 | 1 |
| ADD mem,immed | add pointers[bx][si],6 | 3 |
| ADD accum,immed | add ax,10 | 1 |
| INC reg | inc bx | 1 |
| INC mem | inc vpage | 3 |
| XADD reg,reg | xadd dl,al | 3 |
| XADD mem,reg | xadd string,bl | 4 |
3.2、减法指令[Top]
| SUB reg,reg | sub ax,bx | 1 |
| SUB mem,reg | sub array[di],bi | 3 |
| SUB reg,mem | sub al,[bx] | 2 |
| SUB reg,immed | sub bl,7 | 1 |
| SUB mem,immed | sub total,4000 | 3 |
| SUB accum,immed | sub ax,32000 | 1 |
| SBB accum,immed | sbb ax,320 | 1 |
| SBB reg,immed | sbb dx,45 | 1 |
| SBB mem,immed | sbb word ptr m32[2],40 | 3 |
| SBB reg,reg | sbb dx,cx | 1 |
| SBB mem,reg | sbb word ptr m32[2],dx | 3 |
| SBB reg,mem | sbb dx,word ptr m32[2] | 2 |
| DEC reg | dec ax | 1 |
| DEC mem | dec counter | 3 |
| NEG reg | neg ax | 1 |
| NEG mem | neg balance | 3 |
3.3、乘法指令[Top]
| MUL reg | mul bx | |
| MUL memX | mul word ptr [bx] | 8,16-bit=11 |
| 32-bit=10 | ||
| IMUL reg | imul dx | 11 |
| IMUL mem | imul factor | 11 |
| IMUL reg,immed | imul cx,25 | 10 |
| IMUL reg,reg,immed | imul dx,ax,18 | 10 |
| IMUL reg,mem,immed | imul bx,[si],60 | 10 |
| IMUL reg,reg | imul cx,ax | 10 |
| IMUL reg,mem | imul dx,[si] | 10 |
3.4、除法指令[Top]
| DIV reg | div cx | byte=17 word=25 |
| DIV mem | div [bx] | dword=41 |
| IDIV reg | idiv dl | 8-bit=22;16-bit=30 |
| IDIV mem | idiv itemp | 32-bit=46 |
3.5、类型转换指令[Top]
| CBW | cbw | 3 |
| CWD | cwd | 2 |
| CWDE | cwde | 3 |
| CDQ | cdq | 2 |
4.逻辑运算指令[Top]
4.1、逻辑与操作指令[Top]
| 指令的语法 | 举例 | 周期数 |
| AND reg,reg | and dx,bx | 1 |
| AND mem,reg | and bitmask,bx | 3 |
| AND reg,mem | and bx,masker | 2 |
| AND reg,immed | and dx,0F7h | 1 |
| AND mem,immed | and masker,100lb | 3 |
| AND accum,immed | and ax,0B6h | 1 |
4.2、逻辑与操作指令[Top]
| OR reg,reg | or ax,dx | 1 |
| OR mem,reg | or bits,dx | 3 |
| OR reg,mem | or dx,color[di] | 2 |
| OR reg,immed | or dx,110110b | 1 |
| OR mem,immed | or flag_rec,8 | 3 |
| OR accum,immed | or ax,40h | 1 |
4.3、逻辑与操作指令[Top]
| NOT reg | not ax | 1 |
| NOT mem | not masker | 3 |
4.4、逻辑异或操作指令[Top]
| XOR reg,reg | xor cx,bx | 1 |
| XOR mem,reg | xor [bp+10],cx | 3 |
| XOR reg,immed | xor bl,1 | 1 |
| XOR mem,immed | xor switches[bx],101b | 3 |
| XOR accum,immed | xor ax,01010101b | 1 |
5.移位操作指令[Top]
5.1、算术左移指令[Top]
| 指令的语法 | 举例 | 周期数 |
| SAL reg,1 | sal bx,1 | 1 |
| SAL mem,1 | sal word ptr m32[0],1 | 3 |
| SAL reg,CL | sal ah,cl | 4 |
| SAL mem,CL | sal BYTE PTR [di],cl | 4 |
| SAL reg,immed | sal cx,6 | 1 |
| SAL mem,immed | sal array[bx+di],14 | 3 |
5.2、算术右移指令[Top]
| SAR reg,1 | sar di,1 | 1 |
| SAR mem,1 | sar count,1 | 3 |
| SAR reg,CL | sar bx,cl | 4 |
| SAR mem,CL | sar sign,cl | 4 |
| SAR reg,immed | sar bx,5 | 1 |
| SAR mem,immed | sar sign_count,3 | 3 |
5.3、逻辑左移指令[Top]
| SHL reg,1 | shl si,1 | 1 |
| SHL mem,1 | shl index,1 | 3 |
| SHL reg,CL | shl di,cl | 4 |
| SHL mem,CL | shl index,cl | 4 |
| SHL reg,immed | shl di,2 | 1 |
| SHL mem,immed | shl unsign,4 | 3 |
5.4、逻辑右移指令[Top]
| SHR reg,1 | shr dh,1 | 1 |
| SHR mem,1 | shr unsign[di],1 | 3 |
| SHR reg,CL | shr dx,cl | 4 |
| SHR mem,CL | shr word ptr m32[2],cl | 4 |
| SHR reg,immed | shr bx,8 | 1 |
| SHR mem,immed | shr mem16,11 | 3 |
5.5、双精度左移指令[Top]
| SHLD reg16,reg16,immed8 | shld ax,dx,10 | 4 |
| SHLD reg32,reg32,immed8 | | |
| SHLD mem16,reg16,immed8 | shld bits,cx,5 | 4 |
| SHLD mem32,reg32,immed8 | | |
| SHLD reg16,reg16,CL | shld ax,dx,cl | 4 |
| SHLD reg32,reg32,CL | | |
| SHLD mem16,reg16,CL | shld masker,ax,cl | 5 |
| SHLD mem32,reg32,CL | | |
5.6、双精度右移指令[Top]
| SHRD reg16,reg16,immed8 | shrd cx,si,3 | 4 |
| SHRD reg32,reg32,immed8 | | |
| SHRD mem16,reg16,immed8 | shrd [di],dx,5 | 4 |
| SHRD mem32,reg32,immed8 | | |
| SHRD reg16,reg16,CL | shrd ax,dx,cl | 4 |
| SHRD reg32,reg32,CL | | |
| SHRD mem16,reg16,CL | shrd [bx],ax,cl | 5 |
| SHRD mem32,reg32,CL | | |
6.位操作指令[Top]
6.1、正向位扫描指令[Top]
| 指令的语法 | 举例 | 周期数 |
| BSF reg16,reg16 | bsf cx,bx | 6-34 |
| BSF reg32,reg32 | bsf cx,bx | 6-42 |
| BSF reg16,mem16 | bsf ecx,bitmask | 6-35 |
| BSF reg32,mem32 | bsf ecx,bitmask | 6-43 |
6.2、正向位扫描指令[Top]
| BSR reg16,reg16 | bsr cx,dx | 7-39 |
| BSR reg32,reg32 | bsr ecx, edx | 7-71 |
| BSR reg16,mem16 | bsr ax,bitmask | 7-40 |
| BSR reg32,mem32 | bsr eax,bitmask | 7-72 |
6.3、正向位扫描指令[Top]
| BT reg16,immed8*(注) | bt ax,4 | 4 |
| BT mem16,immed8 | bt [bx],4 | 4 |
| BT reg16,reg16 | bt ax,bx | 4 |
| BT mem16,reg16 | bt [bx],dx | 9 |
(注) 操作数也可以是32位数。
6.4、正向位扫描指令[Top]
| BTC reg16,immed8* | btc edi,4 | 7 |
| BTC mem16,immed8* | btc color[di],4 | 8 |
| BTC reg16,reg16* | btc eax,ebx | 7 |
| BTC mem16,reg16* | btc [bp+8],si | 13 |
6.5、正向位扫描指令[Top]
| BTR reg16,immed8* | btr bx,17 | 7 |
| BTR mem16,immed8* | btr [bx],27 | 8 |
| BTR reg16,reg16* | btr cx,di | 7 |
| BTR mem16,reg16* | btr rotate,cx | 13 |
6.6、正向位扫描指令[Top]
| BTS reg16,immed8* | bts ax,4 | 7 |
| BTS mem16,immed8* | bts maskit,4 | 8 |
| BTS reg16,reg16* | bts bx,ax | 7 |
| BTS mem16,reg16* | bts flags[bx],cx | 13 |
6.7、正向位扫描指令[Top]
| TEST reg,reg | test dx,bx | 1 |
| TEST mem,reg | test flags,dx | 2 |
| TEST reg,immed | test cx,30h | 1 |
| TEST mem,immed | test masker,1 | 2 |
| TEST accum,immed | test ax,90h | 1 |
7.比较运算指令[Top]
7.1、比较指令[Top]
| 指令的语法 | 举例 | 周期数 |
| CMP reg,reg | cmp dl,cl | 1 |
| CMP mem,reg | cmp array[si],bl | 2 |
| CMP reg,mem | cmp bh,array[si] | 2 |
| CMP reg,immed | cmp bx,24 | 1 |
| CMP mem,immed | cmp tester,4000 | 2 |
| CMP accum,immed | cmp ax,1000 | 1 |
7.2、比较交换指令[Top]
| CMPXCHG mem,reg | cmpxchg string,bl | 6 |
| CMPXCHG reg,reg | cmpxchg bx,cx | 6 |
| CMPXCHG8B reg,mem64 | cmpxchg8b ax,[bx] | 10 |
8.循环指令[Top]
8.1、循环指令[Top]
| | loop wend | 5, 6 |
| LOOPE label | loope again | 7, 8 |
| LOOPZ label | loopz again | 7, 8 |
| LOOPNE label | loopne for_next | 7, 8 |
| LOOPNZ label | loopnz for_next | 7, 8 |
8.2、循环指令[Top]
| JCXZ label | jcxz notfound | 6,5 |
| JECXZ label | jecxz notfound | 6,5 |
9.转移指令[Top]
9.1、无条件转移指令[Top]
| 指令的语法 | 举例 | 周期数 |
| JMP label | jmp NEAR PTR distant | 1 |
| jmp distant | 3 | |
| JMP reg16 | jmp ax | 2 |
| JMP mem16 | jmp table[di] | 2 |
| JMP reg32 | jmp eax | 3 |
| JMP mem32 | jmp fpointer[si] | 2 |
| JMP mem48 | jmp FWORD PTR [di] | 4 |
9.2、条件转移指令[Top]
| Jcondition label | je next | 1 |
9.3、子程序调用指令[Top]
| CALL label | call upcase | 1 |
| call distant | 4 | |
| CALL reg | call ax | 2 |
| CALL mem32 | call [bx] | 2 |
| CALL mem32 | call dword ptr [bx] | 5 |
9.4、子程序返回指令[Top]
| RETN | retn | 2 |
| RETN immed16 | retn 8 | 3 |
| RETF | retf | 4, 23 |
| RETF immed16 | retf 32 | 4, 23 |
9.5、中断指令[Top]
| INT immed8 | int 25h | 16, pm=31, 48*(注) |
| INT 3 | int 3 | 13, pm=27, 44* |
| INTO | Into | 13, pm=27, 44* |
注:第一时间是同等优先级的中断时间,第二时间为高优先级的中断时间。
9.6、中断返回指令[Top]
| IRET | Iret | 8*(注),10, pm=27 |
| IRETD | Iretd | 10, pm=27 |
| IRETF | Iretf | |
| IRETDF | Iretdf | |
注:实方式或虚拟8086方式。
10.条件设置字节指令[Top]
| SETcondition reg8 | setc dh | 1 |
| SETcondition mem8 | setle flag | 2 |
11.字符串操作指令[Top]
11.1、取字符串数据指令[Top]
| 指令的语法 | 举例 | 周期数 |
| LODS [segreg:]src | lods es:source | 2 |
| LODSB [[segreg:]src] | Lodsb | 2 |
| LODSW [[segreg:]src] | Lodsw | 2 |
| LODSD [[segreg:]src] | Lodsd | 2 |
11.2、置字符串数据指令[Top]
| STOS [ES:]dest | stor es:dstring | 3 |
| STOSB [[ES:]dest] | stosb | 3 |
| STOSW [[ES:]dest] | stosw | 3 |
| STOSD [[ES:]dest] | stosd | 3 |
11.3、字符串传送指令[Top]
| MOVS [es:]dest, [segreg:]src | movs dest,es:source | 4 |
| MOVSB [[es:]dest, [segreg:]src] | movsb | 4 |
| MOVSW [[es:]dest, [segreg:]src] | movsw | 4 |
| MOVSD [[es:]dest, [segreg:]src] | movsd | 4 |
11.4、输入字符串指令[Top]
| INS [ES:]dest, DX | ins es:instr,dx | 9, pm=6,24*, vm=22 |
| INSB | Insb | 9, pm=6,24*, vm=22 |
| INSW | Insw | 9, pm=6,24*, vm=22 |
| INSD | Insd | 9, pm=6,24*, vm=22 |
11.5、输出字符串指令[Top]
| OUTS DX,[segreg:]src | outs dx,buffer | 13, pm=10,27, VM=24 |
| OUTSB [DX,[segreg:]src] | outsb | 13, pm=10,27, VM=24 |
| OUTSW [DX,[segreg:]src] | outsw | 13, pm=10,27, VM=24 |
| OUTSD [DX,[segreg:]src] | outsd | 13, pm=10,27, VM=24 |
11.6、字符串比较指令[Top]
| CMPS [segreg:] src, [ES:]dest | cmps source,es:dest | 5 |
| CMPSB [[segreg:[src,] ES:] dest] | cmpsb | 5 |
| CMPSW [[segreg:[src,] ES:]dest] | cmpsw | 5 |
| CMPSD [[segreg:[src,] ES:] dest] | cmpsd | 5 |
11.7、字符串扫描指令[Top]
| SCAS [ES]:dest | scas es:destin | 4 |
| SCASB | Scasb | 4 |
| SCASW | Scasw | 4 |
| SCASD | Scasd | 4 |
11.8、重复前缀指令[Top]
| REP INS dest,DX | rep ins dest,dx | 11+3n, pm=(8,25)+3n* |
| REP MOVS dest,src | rep movs dest,source | 6, 13n |
| REP OUTS DX,src | rep outs dx,source | 13+4n, pm=(10,27)+4n* |
| REP LODS dest | rep lods dest | 7, 7+3n |
| REP STOS dest | rep stos dest | 6, 9+3n |
注:当CPL≤IOPL时,执行时间是第一个时钟周期,否则是第二个时钟周期。
11.9、相等重复前缀指令[Top]
| REPE CMPS src,dest | repe cmps src,dest | 7, 9+4n |
| REPE SCAS dest | repe scas dest | 7, 9+4n |
11.10、不相等重复前缀指令[Top]
| REPNE CMPS src,dest | repne cmps src,dest | 7, 8+4n |
| REPNE SCAS dest | repne scas dest | 7, 9+4n |
12.ASCII-BCD码运算调整指令[Top]
| 指令的语法 | 举例 | 周期数 |
| AAA | aaa | 3 |
| AAD | aad | 10 |
| AAM | aam | 18 |
| AAS | aas | 3 |
| DAA | daa | 3 |
| DAS | das | 3 |
13.处理器指令[Top]
| HLT | Hlt | 12 |
| NOP | nop | 1 |
| WAIT | wait | 1 |
| LOCK | lock | 1 |
14.协处理器指令[Top]
| 指令的语法 | 举例 | 周期数 |
| FBLD membcd | fbld packbck | 48-58 |
| FBSTP membcd | fbstp bcds[bx] | 148-154 |
| FLD reg | fld st(3) | 1 |
| FLD mem32real | fld longreal | 1 |
| FLD mem64real | | 1 |
| FLD mem80real | | 3 |
| FST reg | fst st | 1 |
| FST memreal | fst longs[bx] | 2 |
| FSTP reg | fstp st(3) | 1 |
| FSTP em32real | fstp longreal | 2 |
| FSTP em64real | | 2 |
| FSTP em80real | | 3 |
| FXCH [reg] | fxchg st(3) | 1 |
| FILD memint | fild quads[si] | 3, 1 |
| FIST memint | fist doubles[8] | 6 |
| FISTP memint | fistp longint | 6 |
没有评论:
发表评论