附 录
附录A 常用80x86指令速查表
指令按助记符字母顺序排列,缩写、符号约定如下:
(1) 指令中,dst, src表示目的操作数和源操作数。仅一个操作数时,个别处也表示为opr。
(2) imm表示立即数,8/16/32位立即数记作:imm8/imm16/imm32。
(3) reg表示通用寄存器,8/16/32位通用寄存器记作:reg8/reg16/reg32。
(4) mem表示内存操作数,8/16/32等内存操作数记作:mem8/mem16/mem32等。
(5) seg表示段寄存器,CS, DS, SS, ES, FS, GS。
(6) acc表示累加器,8/16/32累加器对应AL/AX/EAX。
(7) OF, SF, ZF, AF, PF, CF分别表示为O, S, Z, A, P, C,相应位置为:字母,根据结果状态设
置;?,状态不确定;-,状态不变;1,置1;0,清0;例如:0 S Z ? P -表示:OF清0,AF不确定,CF不变,其它根据结果设置。若该栏空白,则表示无关。
(8) 寄存器符号诸如(E)CX, (E)SI, (E)DI, (E)SP, (E)BP和(E)IP等,表示在16地址模式下使用16位寄存器(如CX),或在32地址模式下使用32位寄存器(如ECX)。
(9) 周期数表示指令执行所需的CPU时钟周期个数,即执行时间为:周期数/主频(秒)。
(10) 诸如(386+)是表示该指令只能用于80386及以后微处理器上。
指 令 | 功 能 | 指 令 形 式 | 周期数 | 影响标志位 |
AAA | 非压缩BCD加法调整,AH+进位 | AAA | 3 | ?S Z ? P C |
AAD | AH×10+AL AL,之后AH清0 | AAD | 10 | O S Z A P C |
AAM | AL÷10的商 AH,余数 AL | AAM | 18 | O S Z A P C |
AAS | 非压缩BCD减法调整,AH-借位 | AAS | 3 | ? S Z ? P C |
ADC dst, src | 带进位加法:dst+src+CF dst | ADC reg, reg | 1 | O S Z A P C |
ADC reg, mem | 2 | |||
ADC reg, imm | 1 | |||
ADC acc, imm | 1 | |||
ADC mem, reg | 3 | |||
ADC mem, imm | 3 | |||
ADD dst, src | 加法:dst+src dst | ADD reg, reg | 1 | O S Z A P C |
ADD reg, mem | 2 | |||
ADD reg, imm | 1 | |||
ADD acc, imm | 1 | |||
ADD mem, reg | 3 | |||
ADD mem, imm | 3 | |||
续表
指 令 | 功 能 | 指 令 形 式 | 周期数 | 影响标志位 |
AND dst, src | 逻辑与:dst src dst | AND reg, reg | 1 | 0 S Z ? P 0 |
AND reg, mem | 2 | |||
AND reg, imm | 1 | |||
AND acc, imm | 1 | |||
AND mem, reg | 3 | |||
AND mem, imm | 3 | |||
ARPL dst, src | 调整选择器的RPL域 | ARPL reg/mem16, reg16 | 7 | - - Z - - - |
BOUND reg, mem | 越界检查:(80188+) 若reg值超出mem,则产生INT 5 | BOUND reg16, mem32 | INT+32 | |
BOUND reg32, mem64 | ||||
BSF reg, src | 从低到高扫描src,16/32位 (386+) 若src=0,ZF清0,否则置1,位置 reg汇编语言结束指令 | BSF reg, reg | 6~35 | ? ? Z ? ? ? |
BSF reg, mem | 6~43 | |||
BSR reg, src | 从高到低扫描src, 16/32位 (386+) 若src=0,ZF清0,否则置1,位置 reg | BSR reg, reg | 6~35 | ? ? Z ? ? ? |
BSR reg, mem | 6~43 | |||
BSWAP reg32 | 反转reg32字节顺序 (486+) | BSWAP reg32 | 1 | |
BT dst, src | 位测试 (386+) 由dst指定的位 CF (16/32位) | BT reg, reg | 4 | ? ? ? ? ? C |
BT reg, imm | 4 | |||
BT mem, reg | 9 | |||
BT mem, imm | 4 | |||
BTC dst, src | 位测试并变反 (386+) dst的指定位 CF, 然后该位变反, (16/32位) | BTC reg, reg | 7 | ? ? ? ? ? C |
BTC reg, imm | 7 | |||
BTC mem, reg | 13 | |||
BTC mem, imm | 8 | |||
BTR dst, src | 位测试并清0 (386+) dst的指定位 CF, 然后该位清0, (16/32位) | BTR reg, reg | 7 | ? ? ? ? ? C |
BTR reg, imm | 7 | |||
BTR mem, reg | 13 | |||
BTR mem, imm | 8 | |||
BTS dst, src | 位测试并置1 (386+) dst的指定位 CF, 然后该位置1, (16/32位) | BTS reg, reg | 7 | ? ? ? ? ? C |
BTS reg, imm | 7 | |||
BTS mem, reg | 13 | |||
BTS mem, imm | 8 | |||
CALL dst | 子程序调用 近调用:返回的偏移地址进栈, 然后转至dst处执行; 远调用:返回的段和偏移地址进栈, 然后转至dst处执行 | CALL label (near) | 1 | |
CALL reg (near) | 2 | |||
CALL mem (near) | 2 | |||
CALL label (far) | 4 | |||
CALL mem (far) | 5 | |||
CBW | AL符号扩展成AX | CBW | 3 | |
CDQ | EAX符号扩展成EDX:EAX | CDQ | 2 | |
CLC | CF清0 | CLC | 2 | - - - - - 0 |
CLD | DF清0 | CLD | 2 | |
CLI | IF清0,即关中断 | CLI | 7 | |
CLTS | 清除CR0中任务切换标志 (386+) | CLTS | 10 | |
CMC | CF取反,即 CF CF | CMC | 2 | - - - - - C |
CMOVcc reg, src | 条件成立src reg, 16/32位 (586+) cc: 参见Jcc指令。 | CMOVcc reg, reg | 4~9 | |
CMOVcc reg, mem | ||||
续表
指 令 | 功 能 | 指 令 形 式 | 周期数 | 影响标志位 |
CMP dst, src | 比较:dst-src,据此设置标志位 | CMP reg, reg | 1 | O S Z A P C |
CMP reg, mem | 2 | |||
CMP reg, imm | 1 | |||
CMP acc, imm | 1 | |||
CMP mem, reg | 2 | |||
CMP mem, imm | 2 | |||
CMPSx | 串比较:[(E)SI]-ES:[(E)DI], 然后(E)SI, (E)DI增或减Δ(1/2/4) x: B, W, D对应字节(1)、字(2)、双字(4)。DF=0增,否则减 | CMPSB | 5 | O S Z A P C |
CMPSW | ||||
CMPSD | ||||
CMPXCHG dst, reg | acc-dst, 等reg dst,否则 dst acc (486+) | CMPXCHG reg/mem,reg | 5,6 | O S Z A P C |
CMPXCHG8B dst | EDX:EAX-dst,等ECX:EBX dst,否则EDX:EAX dst (486+) | CMPXCHG8B mem64 | 10 | - - Z - - - |
CPUID | CPU标识 EAX,EBX,ECX,EDX | CPUID | 14 | |
CWD | AX符号扩展成DX:AX | CWD | 2 | |
CWDE | AX符号扩展成EAX | CWDE | 3 | |
DAA | 加法后的十进制调整AL | DAA | 3 | ? S Z A P C |
DAS | 减法后的十进制调整AL | DAS | 3 | ? S Z A P C |
DEC opr | opr自减1,即opr-1 opr | DEC reg | 1 | O S Z A P - |
DEC mem | 3 | |||
DIV src | 无符号除法 8位:AX÷src,商 AL, 余数 AH 16位:DX:AX÷src,商 AX, 余数 DX 32位:EDX:EAX÷src,商 EAX,余数 EDX | DIV reg | 17~41 | ? ? ? ? ? ? |
DIV mem | ||||
ENTER m, n | 建m字节局部空间,n级的栈帧 (286+) | ENTER imm16, imm8 | 11+ | |
HLT | 暂停CPU,直到I/O中断发生 | HLT | ||
IDIV src | 有符号除 8位:AX÷src,商 AL, 余数 AH 16位:DX:AX÷src,商 AX, 余数 DX 32位:EDX:EAX÷src,商 EAX,余数 EDX | IDIV reg | 22~46 | ? ? ? ? ? ? |
IDIV mem | ||||
IMUL src | 有符号乘法 8位:AL×src AX 16位:AX×src DX:AX 32位:EAX×src EDX:EAX | IMUL reg | 10~11 | O ? ? ? ? C |
IMUL mem | ||||
IMUL reg, src | 有符号乘法 reg×src reg (286+) | IMUL reg, reg/mem | 10 | O ? ? ? ? C |
IMUL reg, src,imm | 有符号乘法 src×imm reg (286+) | IMUL reg, reg/mem,imm | 10 | O ? ? ? ? C |
IN acc, src | 端口数据 acc | IN acc, imm8 | 7 | |
IN acc, DX | 7 | |||
INC opr | opr自加1,即opr+1 opr | INC reg | 1 | O S Z A P - |
INC mem | 3 | |||
续表
指 令 | 功 能 | 指 令 形 式 | 周期数 | 影响标志位 |
INSx | 端口DX数据 ES:[(E)DI], 然后(E)DI增或减Δ(1/2/4) x: B,W, D对应字节(1)、字(2)、双字(4);若DF=0增,否则减 | INSB | 9 | |
INSW | ||||
INSD | ||||
INT n | FLAGS进栈,IF,TF置0,从[4n]双字单元取 段和偏移地址,并转去执行 (实地址模式) | INT 3 | INT+5 | |
INT imm8 | INT+6 | |||
INTO | 若OF=1,则执行INT 4 | INTO | 4,INT+5 | |
INVD | 使Cache无效 | INVD | 15 | |
INVLPG | 使TLB入口无效 | INVLPG | 29 | |
IRET | 中断返回:从堆栈弹出返回的偏移 和段地址,再弹出标志寄存器内容 | IRET | 7 | |
Jcc opr | 条件满足,则转移至opr | Jcc label | 1 | |
JA/JNBE opr | 高于(CF=0 ZF=0) | JA/JNBE label | ||
JAE/JNB/JNC opr | 高于等于(CF=0) | JAE/JNB/JNC label | ||
JB/JC/JNAE opr | 低于(CF=1) | JB/JC/JNAE label | ||
JBE/JNA opr | 低于等于(CF=1 ZF=1) | JBE/JNA label | ||
JE/JZ opr | 等于(ZF=1) | JE/JZ label | ||
JG/JNLE opr | 大于(ZF=0 SF=OF) | JG/JNLE label | ||
JGE/JNL opr | 大于等于(SF=OF) | JGE/JNL label | ||
JL/JNGE opr | 小于(SF≠OF) | JL/JNGE label | ||
JLE/JNG opr | 小于等于(ZF=1 SF≠OF) | JLE/JNG label | ||
JNE/JNZ opr | 不等于(ZF=0) | JNE/JNZ label | ||
JNO opr | 无溢出(OF=0) | JNO label | ||
JNS opr | 非负数(SF=0) | JNS label | ||
JO opr | 溢出(OF=1) | JO label | ||
JP/JPE opr | 有偶数个1(PF=1) | JP/JPE label | ||
JPO/JNP opr | 有奇数个1(PF=0) | JPO/JNP label | ||
JS opr | 负数(SF=1) | JS label | ||
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论