算术运算指令
算术运算指令的执行大多对状态标志位会产生影响
加法运算指令
前两条会影响全部的6个状态位
最后一条不影响CF,影响其它5个状态标志位
- 加法指令对操作数的要求和MOV指令一样
(1)ADD指令
例:
上面两条指令就是把78H和99H相加,结果送给AL
执行指令后6个标志位状态的情况:
上图中我们发现最高位有进位,所以使用ADC相加
(2)ADC指令
例:
(3)INC指令
减法运算指令
(1)SUB指令
(1)SBB指令
(1)DEC指令
例:
上例中的2:当立即数的最高这位是A~F中符号的数字的时候,前面要加0,是给编译器看的,否则编译器就不认识了
上例完成的功能:实际上它什么也没干,就是典型的延时(定时)的功能
(4)NEG指令
也叫求补指令
0减去一个数,肯定会向高位借位,所以大多数情况下CF=1,只有一种情况下CF=0,就是操作数也为0的时候,0-0不会发生借位
(5)CMP指令
这条指令不返回结果,就是用来影响标志位
对标志位的影响和SUB一样
例:
上例程序的功能:
乘法运算指令
(1)MUL
例:
PTR是说明字长的,前面有BYTE,说明操作数是字节字长的
(2)IMUL
除法运算指令
算术运算指令小结
例:
指令的结果:
把最后一条换成带符号数的乘法指令:
执行结果:
再做一下修改: