算数指令

        算数指令用来执行算数运算,它们中有双操作数指令,也有单操作数指令。

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类寄存器里计算。