汇编中的算术运算类指令

基于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。

以上就是我对于算术运算类指令的认识。


你可能感兴趣的:(汇编)