ADD
加法。
OF | DF | IF | SF | ZF | AF | PF | CF |
* | * | * | * | * | * |
说明:将源操作数、目的操作数相加,结果存放在目的操作数中。操作数尺寸必须一致。
指令格式:
add reg,reg
add reg,imm
add mem,reg
add mem,imm
add reg,mem
add accum,imm (accum指的是AL/AX/EAX)
相对的,还有一个带进位符号的加法指令,下面会介绍。
ADC
带进位加。
OF | DF | IF | SF | ZF | AF | PF | CF |
* | * | * | * | * | * |
说明:将源操作数、目的操作数和进位标志相加。操作数尺寸必须一致。
指令格式:
adc reg,reg
adcreg,imm
adc mem,reg
adc mem,imm
adc reg,mem
adc accum,imm (accum指的是AL/AX/EAX)
SUB
减法。
OF | DF | IF | SF | ZF | AF | PF | CF |
* | * | * | * | * | * |
说明:从目的操作数中减去源操作数。
指令格式:
sub reg, reg
sub reg, imm
sub mem, reg
sub mem, imm
sub reg, mem
sub accum, imm
相对的,还有一个带进位符号的减法指令:
SBB
带进位减。
OF | DF | IF | SF | ZF | AF | PF | CF |
* | * | * | * | * | * |
说明:从源操作数减去目的操作数,然后再减去进位标志值。
指令格式:
sbb reg, reg
sbb reg, imm
sbb mem, reg
sbb mem, imm
sbb reg, mem
这里的SBB中最后一个B表示Borrow,即借位。
MUL
无符号整数乘法。
OF | DF | IF | SF | ZF | AF | PF | CF |
* | ? | ? | ? | ? | * |
说明:将AL/AX/EAX与源操作数相乘,如果源操作数是8位的,则与AL相乘,积存储在AX中;如果源操作数是16位的,则与AX相乘,积存储在EAX中;如果源操作数是32位的,则与EAX相乘,积存储在EDX:EAX中。
指令格式:
mul reg
mul mem
由于存放乘积的寄存器的位数是乘数的位数的两倍,所以不用担心相乘后数据丢失的问题。
IMUL
有符号整数乘法。
OF | DF | IF | SF | ZF | AF | PF | CF |
* | ? | ? | ? | ? | * |
说明:执行8位/16位/32位的有符号整数乘法操作。如果乘数是8位的,被乘数是AL,积在AX中;如果乘数是16位的,被乘数是AX,积在DX:AX中;如果乘数是32位的,被乘数是EAX,积在EDX:EAX中。如果16位的积扩展到AH,32位的积扩展到DX,或者64位的积扩展到EDX中,则进位和溢出标志置位。
指令格式:
单操作数:
imul r/m8
imul r/m16
imul r/m32
双操作数:
imul r16, r/m16
imul r16, imm8
imul r32, r/m32
Imul r32, imm8
imul r16, imm16
imul r32, imm32
三操作数:
imul r16, r/m16, imm8
imul r16, r/m16, imm16
Imul r32, r/m32, imm8
imul r32, r/m32, imm32
单操作数不会发生溢出。如果乘积的高半部分不是低半部分的符号扩展,则进位标志和溢出标志置位,可使用该特点确定乘积的高半部分是否可以忽略。
双操作数中,第一个操作数是存储乘积的寄存器,第二操作数是乘数。
三操作数中,第一个操作数是存储乘积的寄存器,第二、三操作数是两个乘数。
DIV
无符号整数除法。
OF | DF | IF | SF | ZF | AF | PF | CF |
? | ? | ? | ? | ? | ? |
说明:执行8位/16位/32位的无符号整数除法操作。如果除数是8位的,被除数是AX,商在AL中,余数在AH中;如果除数是16位的,被除数是DX:AX,商在AX中,余数在DX中;如果除数是32位的,被除数是EDX:EAX,商在EAX中,余数在EDX中。
指令格式:
div reg
div mem
IDIV
有符号整数除法。
OF | DF | IF | SF | ZF | AF | PF | CF |
? | ? | ? | ? | ? | ? |
说明:执行8位/16位/32位的有符号整数除法操作。如果除数是8位的,被除数是AX,商在AL中,余数在AH中;如果除数是16位的,被除数是DX:AX,商在AX中,余数在DX中;如果除数是32位的,被除数是EDX:EAX,商在EAX中,余数在EDX中。通常在执行IDV指令之前要使用CBW或CWD对除数进行符号扩展。
指令格式:
idiv reg
idiv mem