【asm基础】汇编指令之加减乘除指令
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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论