算数指令
算数指令用来执行算数运算,它们中有双操作数指令,也有单操作数指令。
1.加、减法指令
ADD
ADD指令将同尺寸的源操作数和目的操作数相加,加法不改变源操作数,相加的结果放在目的操作数中。格式:ADD 目的操作数,源操作数
ADC
ADC指令带进位的加法,进位保存在CF中,格式与ADD相同。
XADD
XADD指令,交换并相加,格式与ADD相同。
SUB
SUB指令将源操作数从目的操作数中减掉,操作数格式与ADD相同。
SBB
SBB指令带借位的减法,格式与上相同。
INC与DEC
INC与DEC指令从操作数中加1或者减1。格式:INC/DEC 操作数
NEG
NEG指令痛过将数字转换位对应的二进制补码而求得其相反数,该指令允许使用一下操作:NEG 任意通用寄存器 NEG 8位,16位或32位内存操作数
CMP
CMP指令与SUB指令一样执行的是减法,但它不保存结果,即执行完之后源操作数跟目的操作数的值不改变,只是根据条件设置标志位。CMP之后往往跟这一条转移指令,根据比较结果产生不同分支。CMP指令格式与MOV相同。
CMPXCHG
CMPXCHG指令是比较并交换指令,该指令值用于486及其后继机型,格式与上相同。
CMPXCHG8B
CMPXCHG8B指令只能用于Pentium及其后继机型。源操作数放在EDX,EAX中的64位字,目的操作数可用存储器寻址方式确定一个64位字。
2.乘、除法指令
MUL
MUL指令执行的是无符号乘法运算,该指令可将8位、16位、32位的操作数与AL,AX和EAX相乘,指令中只需要一个操作数做乘数,存放积的寄存器大小是乘数的两倍,这保证了结果绝对不会发生溢出。MUL指令格式:MUL 8位操作数 MUL 16位操作数 MUL 32位操作数
IMUL
IMUL指令执行的是有符号乘法运算,格式与MUL相同,不同之处在于IMUL保留积的符号位。
DIV
DIV指令执行的是除法,格式与MUL相同,除法执行的时候,一切有除数决定,若除数是8位的,则商跟余数也是8位,分别寄存在AX的高位跟低位。低位放商,高位放余数。
IDIV
IDIV指令执行的是有符号的除法,使用的操作数格式与DIV相同。当执行8位数的除法指令之前,必须将被除数的符号扩展到AH中(可用CBW指令)。
本组指令只能在A类寄存器里计算。
转载于:https://blog.51cto.com/308272108/827211