汇编常用语句总结

文章最后更新时间为:2018年12月29日 21:00:19

本文总结的汇编语言是针对IA-32处理器也就是X86体系结构的32位版本。但是在不同的体系结构中,汇编语句大同小异。

1.传送指令

指令解释
MOV DESC,SRC传送指令,SESC <= SRC
XCHG OPRD1,OPRD2交换指令,将OPRD1,OPRD2内容互换
PUSH压栈
POP出栈
PUSHA16个寄存器全进栈
POPA将16个寄存器全出栈
PUSHAD32个通用寄存器全进栈
POPAD32个通用寄存器全出栈

2.算术运算指令

指令解释
ADD DESC,SRC加法指令,DESC <= DESC+SRC
ADC DEST,SRC带进位加法指令,DESC <= DESC+SRC+CF
SUB DESC,SRC减法指令,DESC <= DESC-SRC
SBB DESC,SRC带错位减法指令,DESC <=DESC-(SRC+CF)
INC DEST加1指令,DEST <= DEST+1
DEC DEST减一指令DEST <= DEST-1
NEG OPED取补指令,OPRE <= 0-OPRD
MUL OPRD无符号数乘法
IMUL OPRD有符号数乘法
DIV OPRD无符号数除法
IDIV OPRD有符号数除法

3.逻辑与位运算指令

指令解释
CWD/CWDE字转换为双字指令,符号扩展
CDQ双字转换为四字指令
MOVSX DEST,SRC符号扩展传送指令,将SRC符号扩展后送至DEST
MOVZX DEST,SRC零扩展传送指令,将SRC零扩展后送至DEST
NOT OPRD按位取反
AND DEST,SRC按位与送到DEST
OR DEST,SRC按位或送到DEST
XOR DEST,SRC按位异或送到DEST
TEST DESC,SRC按位与,但是不送到DEST,仅影响状态标志
SAL/SHL OPRD count算术左移/逻辑左移(同)
SAR/SHR OPRD count算术右移/逻辑右移(同)
ROL OPRD count循环左移
ROR OPRD count循环右移
RCL OPRD count带进位循环左移
RCR OPRD count带进位循环右移
SHLD OPRD1,OPRD2,count双精度左移
SHRD OPRD1,OPRD2,count双精度右移

4.状态标志操作指令

从最早的Inter 8086 CPU开始,就有6个状态标志,这六个状态标志分别是进位标志CF、零状态标志ZF、符号标志SF、溢出标志OF、奇偶标志PF和辅助进位标志AF。

下面简单介绍一下六个进位标志的作用。

  • 进位标志主要反映算术运算是否产生进位或者借位。
  • 零标志反映运算结果是否为0
  • 符号标志反映运算结果的符号位
  • 溢出标志反映有符号数加减是否引起溢出
  • 奇偶标志反映运算结果的最低字节中含有1的位数是奇数还是偶数
  • 辅助进位标志反映算术运算中第三位是否产生进位或者错位
指令解释
CLC清进位标志指令,使进位标志CF为0
STC置进位标志指令,使进位标志CF为1
CMC进位标志指令取反指令,使进位标志CF取反
LAHF获取状态标志操作,把标志寄存器的低八位送到通用寄存器AH中
SAHF设置标志状态操作指令,使得状态标志SF、ZF、AF、PF和CF分别成为来自寄存器AH中对应位的值

5.条件转移指令

指令格式解释
JZ/JE相等转移
JNZ/JNE不相等转移
JS为负转移
JNS为正转移
JO溢出转移
JNO不溢出转移
JP/JPE偶转移
JNP/JPO奇转移
JB/JNAE/JC低于转移
JNB/JAE/JNC不低于转移
JBE/JNA不高于转移
JNBE/JA高于转移
JL/JNGE小于转移
JNL/JGE不小于转移
JLE/JNG不大于转移
JNLE/JG大于转移
JCXZ计数器CX为0转移
JECXZ计数器ECX为0转移

6.比较指令

指令解释
CMP DEST,SRC根据DESC和SRC的差来将结果送到标志寄存器,但是不把结果的差送到DEST

7.过程调用和返回指令

指令解释
CALL LABEL调用指令
RET返回指令

8.字符串操作与位操作

指令解释
LODSB/LODSW/LODSD装入字节(byte)/字(word)/双字(double word)
STOSB/STOSW/STOSD存储字节/字/双字
MOVSB/MOVSW/MOVSD传送字节/字/双字
SCASB/SCASW/SCASD扫描字节/字/双字
CMPSB/CMPSW/CMPSD比较字节/字/双字
BT OPRD1,OPRD2把被测试位的值送到进位标志CF,并且把被测试位取反
BTC OPRD1,OPRD2把被测试位的值送到进位标志CF,并且把被测试位清0
BTR OPRD1,OPRD2把被测试位的值送到进位标志CF,并且把被测试位置1
BSF OPRD1,OPRD2(OPRD1为通用寄存器,OPRD2为通用寄存器或者存储单元)从右向左扫描字或者双字操作数OPRD2中第一个含1的位,并把扫描到的第一个位的位号送到操作数OPRD1,如果OPRD2为0,那么置ZF为1,否则将ZF清0
BSR OPRD1,OPRD2同上,扫描顺序为从左到右

参考

  • 《新概念汇编语言》杨季文编
1 + 8 =
快来做第一个评论的人吧~