汇编算术运算指令

 算术运算指令

 


 
ADDADCINCNEGMULIMULCBWDAAAAA
SUBSBBDECCMPDIVIDIVCWDDASAAS

 

加法运算指令

ADD(ADD)加法指令

ADD     DST , SRC      //Byte/Word

执行操作: dst=dst+src

1.两个存储器操作数不能通过ADD指令直接相加,DST SRC必须有一个是通用寄存器操作数.

2.段寄存器不能作为SRC DST.

3.影响标志位Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag Zero Flag ,如下所示:

CF根据最高有效位是否有进(借)位设置的:有进(借)位时CF=1, 无进(借)位时CF=0.
OF根据操作数的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时OF=1, 否则为0.
ZF根据结果来设置:不等于0ZF=0, 等于0时ZF=1
SF根据结果的最高位来设置:最高位为0,SF=0.
AF根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1, 无进(借)位时AF=0
PF根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0, 为偶数时PF=1

 

 

 

ADC( ADd with Carry)带进位加法指令

ADC     DST , SRC  //Byte/Word

执行操作: dst=dst+src+CF  //ADD不同之处是还要加上进位标志位的值.

 

INC ( INCreament) 1指令

INC    OPR    //Byte/Word

执行操作: OPR=OPR+1

1.OPR可以是寄存器和存储器操作数, 但不能是立即数和段寄存器

2.影响标志位OF,SF,ZF,PF AF,不影响CF.

 

减法运算指令

SUB ( SUBtract ) 不带借位的减法指令

SUB    DST , SRC    //Byte/Word

执行操作:dst=dst - src

1.DSTSRC寻址方式及规定与ADD相同.

2.影响全部标志位.(判断标志位参见ADD)

 

 

SBB ( SuBtract with  Borrow) 带借位减法指令

SBB    DST , SRC        //Byte/Word

执行操作:dst= dst - src - CF

 

DEC ( DECrement ) 1指令

DEC    OPR    //Byte/Word

执行操作:OPR = OPR - 1  //CF标志位, 其余标志位都受影响.

 

NEG ( NEGate ) 求补指令

NEG    OPR

执行操作:opr = 0- opr //将操作数按位求反后末位加1.

 

 

CMP ( CoMPare ) 比较指令

CMP    OPR1 , OPR2

执行操作:OPR1 - OPR2  //SUB指令一样执行运算, 但不保存结果.

比较情况无符号数有符号数
A=BZF=1ZF=1
A>BCF=0 && ZF=0SF^OF=0 && ZF=0
A<BCF=1 && ZF=0SF^OF=1 && ZF=0
A>=BCF=0 || ZF=1SF^OF=0 || ZF=1
A<=BCF=1 || ZF=1SF^OF=1 || ZF=1

 

 

乘法运算指令

MUL ( unsigned  MULtiple ) 无符号数乘法指令

MUL    SRC   //Byte/Word    .

执行操作:Byte  =>   AX= AL *src    //字节运算时目的操作数用AL, 乘积放在AX

         Word =>   DX=AX *src    //字运算时目的操作数用AX, DX存放乘积的高位字, AX放乘积的低位字

1.目的数必须是累加器 AX AL,指令中不需写出

2. 源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数, 而绝对不允许是立即数或段寄存器.

 

IMUL (sIgned  MULtiple) 有符号数乘法指令

IMUL    SRC    //MUL指令相同,但必须是带符号数

 

 

除法运算指令

DIV ( unsigned DIVide) 无符号数除法指令

DIV     SRC        //Byte/Word    其中: SRC的规定同乘法指令MUL

执行操作:Byte => AX / src     //字节运算时目的操作数在AX,结果的商在AL,余数中AH

         Word=> DX,AX /src //字运算时目的操作数在DX高位字AX低位字,结果的商在AX,余数在DX

存储器操作数必须指明数据类型:BYTE PTR src 或 WORD PTR src

 

IDIV (sIgned DIVied) 有符号数除法指令

IDIV     SRC        //Byte/Word        DIV指令相同,但必须是带符号数

 

 

转换指令

CBW (Convert Byte to Word) 字节转换为字指令

CBW

执行操作: AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.

 

CWD (Convert Word  to Double word) 字转换为双字指令

CWD

执行操作: AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH.

 

 

十进制调整指令

当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出.

在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ).

BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD码两种格式表示.

压缩的BCD4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串.

非压缩的BCD以8位为一组表示一个十进制数,8位中的低4位表示8421BCD码,而高4位则没有意义.

 

压缩的BCD码调整指令

DAA (Decimal Adjust for Addition) 加法的十进制调整指令

DAA

执行操作:执行之前必须先执行ADDADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中.