80x86指令

pdf文件版:https://download.csdn.net/download/dzydzy7/11964407 

  指令 DST SRC 用途 注意 对标志位影响
数据传送指令 MOV reg/mem imm 立即数送寄存器或主存 DST和SRC类型匹配(即8位对8位,16位对16位),DST不能是CS
reg/mem/seg reg 寄存器送(段)寄存器或主存
reg/seg mem 主存送(段)寄存器
reg/mem seg 段寄存器送寄存器或主存
XCHG reg/mem reg/mem 交换DST和SRC的内容 不能mem和mem交换
LEA reg16 mem 装入mem的有效地址到reg16  
LDS reg16 mem32 装入mem的有效地址的低字到reg16,高字到DS  
LES reg16 mem32 装入mem的有效地址的低字到reg16,高字到ES  
PUSH   reg16/reg32/mem16/mem32/seg/imm 堆栈指针SP-2,再把一个字存入栈顶 操作数不能是CS
POP reg16/reg32/mem16/mem32/seg   将栈顶的一个字传送至指定的目的操作数,堆栈指针SP+2
PUSHF     标志寄存器进栈  
POPF     标志寄存器出栈   以弹出至设置标志寄存器
LAHF     AH = FLAGS的低8位  
SAFHF     FLAGS的低8位 = AH   由新装入值(AH)确定
CBW     AL符号扩展为AX  
CWD     AX符号扩展为32位DX:AX  
CWDE     AX符号扩展为EAX;386新增  
CDQ     EAX符号扩展为64位数EDX:EAX;386新增  
MOVSX reg16 reg8/mem8 是CBW、CWD和CWDE的一般形式,将8位数符号扩展为16或32位数,或者将16位数符号扩展为32位数。  
reg32 reg8/mem8/reg16/mem16  
MOVZX reg32 reg8/mem8/reg16/mem16 和MOVSX的区别是MOVZX是零扩展(补0),MOVSX是补符号位  
XLAT     AL = DS:[BX + AL]  
算术指令 ADD reg/mem reg/mem/imm DST = DST + SRC ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数 影响CF、OF、SF、ZF
ADC reg/mem reg/mem/imm DST = DST + SRC + CF 影响CF、OF、SF、ZF
INC reg/mem   DST = DST + 1 影响OF、SF、ZF
SUB reg/mem reg/mem/imm DST = DST - SRC 2个操作数必须类型匹配,且不能同时是内存操作数 影响CF、OF、SF、ZF;CF表借位
SBB reg/mem reg/mem/imm DST = DST - SRC - CF
CMP reg/mem reg/mem/imm DST - SRC (不赋值)
DEC reg/mem   DST = DST - 1
NEG reg/mem   DST = 0 - DST   不影响CF,其他同SUB
MUL   reg8/mem8 AX = AL * SRC 无符号乘法 原来的位数能够容纳:CF = OF = 0,否则CF = OF = 1
  reg16/mem16 DX:AX = AX * SRC
  reg32/mem32 EDX:EAX = EAX * SRC
IMUL   reg8/mem8 AX = AL * SRC 带符号乘法 若结果的高一半为低一半的符号扩展,则CF = OF = 0,否则,CF = OF = 1
  reg32/mem32 DX:AX = AX * SRC
  reg32/mem32 EDX:EAX = EAX * SRC
DIV   reg8/mem8 AL = AX / SRC; AH = AX % SRC 无符号除法
  reg16/mem16 AX=DX:AX/SRC; DX=DX:AX/SRC
IDIV   reg8/mem8 AL = AX / SRC; AH = AX % SRC 有符号乘法
  reg16/mem16 AX=DX:AX/SRC; DX=DX:AX/SRC
DAA     通常先执行ADD/ADC指令,将2个压缩BCD码相加,结果存放在AL中.然后使用该指令将AL调整为压缩BCD码格式. OF不确定;CF反映压缩BCD码相加/相减的进位/借位状态;按一般规则影响SF和ZF。
DAS     通常先执行SUB/SBB指令,将2个压缩BCD码相减,结果存放在AL中.然后使用该指令将AL调整为压缩BCD码格式.
AAA     AL高4位 = 0,AH = AH + CF 调整AL中的和为非压缩BCD码 CF反映非压缩BCD码加/减的进位/借位;OF、SF和ZF不确定。
AAS     AL高4位 = 0,AH = AH - CF 调整AL中的差为非压缩BCD码
位操作指令 AND reg/mem reg/mem/imm   CF = OF = 0,按一般规则影响SF和ZF。
OR reg/mem reg/mem/imm  
XOR reg/mem reg/mem/imm 异或  
NOT reg/mem    
TEST reg/mem reg/mem/imm 对DST和SRC与,结果不回送到DST   TEST指令设置CF = OF = 0,根据结果设置SF、ZF和PF状态,而对AF未定义
SHL dest count 逻辑左移   若符号位发生了变化则OF=1否则OF=0。CF为最后移入位;不影响ZF与SF。然而,若移位次数为0,则不影响标志位;若移位次数 > 1,则OF无定义
SAL  
SHR 逻辑右移(补0)  
SAR 逻辑右移(补符号位)  
ROL 循环左移,最高位给cf和最低位  
ROR 循环右移,最低为给cf和最高位  
RCL 最高位->cf cf->最低位(大循环  
RCR 最低位->cf cf->最高位(大循环  
控制转移指令 JMP reg16/mem16   同一段,偏移为DST  
mem32   段地址=mem32高字,偏移=低字  
JZ/JE     ZF=1 跳转 判断的是单个标志位状态
JNZ/JNE     ZF=0 跳转
JS     SF=1 跳转
JNS     SF=0 跳转
JP/JPE     PF=1 跳转(奇数)
JNP/JPO     PF=0 跳转(偶数)
JO     OF=1 跳转
JNO     OF=0 跳转
JC     CF=1 跳转
JNC     CF=0 跳转
JB/JNAE     CF=1(有借位) 比较无符号数高低
JNB/JAE     CF=0(无借位)
JBE/JNA     CF=1orZF=1(有借位或结果为0)
JNBE/JA     CF=0orZF=0(无借位或结果非0)
JL/JNGE     SF!=OF 比较有符号数大小
JNL/JGE     SF==OF
JLE/JNG     SF!=OF or ZF==1
JNLE/JG     SF==OF or ZF==0
JCXZ label   CX=0转移到label label相对位移量必须在-128 ~ 127之间
JCEXZ label   ECX=0转移到label
LOOP label   CX = CX – 1,若CX ≠ 0,则转移到label
LOOPZ/LOOPE lable   CX = CX – 1,若CX ≠ 0且ZF=1,则转移到label
LOOPNZ/LOOPNE label   CX = CX – 1,若CX ≠ 0且ZF=0,则转移到label
串操作指令 MOVSB     字节传送:ES:[DI]←DS:[SI] SI←SI±1,DI←DI±1  
MOVSW     字串传送:ES:[DI]←DS:[SI] SI←SI±2,DI←DI±2  
STOSB     字节串存储:ES:[DI]←AL DI←DI±1  
STOSW     字串存储:ES:[DI]←AX DI←DI±2  
LODSB     字节串读取:AL←DS:[SI] SI←SI±1  
LODSW     字串读取:AX←DS:[SI] SI←SI±2  
CMPSB   字节串比较:DS:[SI]-ES:[DI] SI←SI±1,DI←DI±1 改变ZF,可表示是否相等
CMPSW   字串比较:DS:[SI]-ES:[DI] SI←SI±2,DI←DI±2
SCASB     字节串扫描:AL-ES:[DI] DI←DI±1 改变ZF,可表示是否和AL相等
SCASW     字串扫描:AX-ES:[DI] DI←DI±2
重复前缀指令 REP 当CX ≠ 0时,重复执行后面的串指令,每执行1次,CX=CX–1只能用在MOVS、LODS或STOS之前
REPZ/REPE 当CX≠0且ZF=1时,重复执行后面的串指令,每执行1次,CX=CX-1,只能用在CMPS或SCAS之前
系统功能调用 INT 21H 根据AH给出功能号,执行对应功能  
AH 功能 入口参数
01H 从键盘读入一个字符 AL=输入字符的ASCII码
02H 显示一个字符 DL=字符的ASCII码
09H 显示一个字符串 DS:DX=字符串首地址,字符串必须以$(24H)结束
0Ah 从键盘读入一个字符串 读字符串,存入DS:DX所指的缓冲区Ctrl+C中止
标志处理指令 CLC CF清0        
STC CF置1        
CMC CF取反        
CLD DF清0        
STD DF置1        
CLI 关中断        
STI 开中断        
处理器控制指令 NOP 无操作        
HLT 暂停        
发布了41 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/dzydzy7/article/details/102957143