您的位置:首页 > 其它

asm基础——汇编指令之加减乘除指令

2016-01-30 16:04 155 查看

加法指令

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: