基于IA-32处理器和32位汇编语言
首先说明:算术运算结果包括两部分,即运算结果和状态标志。
一:加法类指令
1 加法指令:ADD DEST,SRC ;DEST=DEST+SRC
将源操作数和目的操作数相加并返回给目的操作数。
2 带进位的加法指令(ADC,ADD WITH CARRY):ADC DEST,SRC ;DEST=DEST+SRC+CF
将源操作数和目的操作数和CF相加并返回给目的操作数。
3 增量指令:INC 操作数
将操作数加1并返回给原位置。不影响CF的值。
二:减法类指令
1 减法指令:SUB DEST,SRC ;DEST=DEST-SRC
将目的操作数和原操作数相减并返回给目的操作数。
2 带借位的减法指令(SBB,SUBTRACT WITH BORROW):SBB DEST,SRC ;DEST=DEST-SRC-CF
将目的操作数减原操作数减CF并返回给目的操作数。
3 减量指令 :DEC 操作数
将操作数减1并返回给原位置。不影响CF的值。
4 求补指令:NEG 操作数
用0减操作数并返回给操作数。
5 比较指令:CMP DEST,SRC ;DEST-SRC
用目的操作数和源操作数的差影响的状态标志来比较大小。主要用于给数据转换指令传送状态标志。
三:乘法指令
MUL(无符号乘法指令)和IMUL(有符号乘法指令)。
MUL SRC ;如果是8,16,32位数,分别乘AL,AX,EAX,结果放在AX,DX.AX,EDX.EAX中。
IMUL SRC ;如果是8,16,32位数,分别乘AL,AX,EAX,结果放在AX,DX.AX,EDX.EAX中。
IMUL DEST SRC ;DEST=DEST*SRC。
IMUL DEST SRC 立即数 ;DEST=SRC*立即数。
前两种的结果最高一半位数是无效数,则CF,OF是0,否则是1。ZF,SF,PF受影响。
四 :除法指令
DIV(无符号除法指令)和IDIV(有符号除法指令)。
DIV SRC ;如果是8,16,32位,用AX,EAX,EDX.EAX分别除,商放在AL,AX,EAX中,余数放在AH,DX,EDX中
IDIV SRC ;如果是8,16,32位,用AX,EAX,EDX.EAX分别除,商放在AL,AX,EAX中,余数放在AH,DX,EDX中
如果除数是0或者商很大,会发生除法溢出,这时会用0中断执行。
五:零位扩展和符号扩展指令
零位扩展:MOVZX DEST,SRC ;将SRC扩展后放在DEST中。
在数前补0。
符号扩展:MOVSX DEST,SRC ;将SRC扩展后放在DEST中。
如果是无符号数,补0。如果是有符号数,在补码前补1。
以上就是我对于算术运算类指令的认识。