文章目录
- 数据传送类指令
- 通用数据传送指令
- MOV
- XCHG
- XLAT 换码指令
- 堆栈操作指令
- 标志传送指令
- 标志位操作指令
- 地址传送指令
- 算术运算类指令
- 常用标志位
- 加法指令
- ADD
- ADC
- INC
- 减法指令
- SUB
- SBB
- DEC
- NEG
- CMP
- 乘法指令
- MUL(无符号)
- IMUL(有符号)
- MUL和IMUL对符号的影响
- 除法指令
- DIV
- IDIV
- 符号拓展指令
- 十进制调整指令
- DAA (加法压缩)
- DAS(减法压缩)
- AAA(加法非压缩)和AAS (减法非压缩)
- AAM(非压缩乘法) 和 AAD(非压缩除法)
数据传送类指令
通用数据传送指令
MOV
XCHG
XLAT 换码指令
其中BX就是存储一个基础地址,然后加上AL存储的偏移量
堆栈操作指令
标志传送指令
标志位操作指令
地址传送指令
算术运算类指令
常用标志位
对于无符号数来说,一般不讲溢出,而是使用进位
这个CF只是说最高位有进位,那么这个最高位有可能是单字节或者双字节
加法指令
ADD
ADC
与ADD的区别就是考虑了进位
INC
减法指令
SUB
SBB
同样,和sub的差别就是考虑了CF符号位
DEC
NEG
可以拿NEG
来求负数的绝对值:因为当我们存储一个负数的时候,我们想求这个负数的绝对值,我们可以把这个负数的补码形式,全部按位取反,再加一即可
CMP
注意CMP指令只是去设置标志位,并没有改变目的操作数
乘法指令
MUL(无符号)
乘法要注意相对应的位数相乘,隐含操作数是AL和AX
IMUL(有符号)
MUL和IMUL对符号的影响
除法指令
DIV
你会发现一个问题,其实除法的话和我们平时的计算存储结果的逻辑是一样的,也就是先写商再写余数,所以也就是商在低地址,余数在高地址
IDIV
符号拓展指令
十进制调整指令
DAA (加法压缩)
会利用判断AF,CF位