8086CPU指令系统--汇编语言算术运算指令(ADD/ADC、SUB/SBB、INC/DEC、CMP、MUL、DIV)

目录

 

1.加法指令ADD/ADC、INC

普通加法指令ADD

带进位加法指令ADC

加1指令INC

2.减法指令SUB/SBB

不考虑借位减法指令SUB

考虑借位的减法指令SBB

减1指令DEC

比较指令CMP

求补指令NEG

3.乘法指令MUL

4.除法指令DIV


1.加法指令ADD/ADC、INC

普通加法指令ADD

指令格式:ADD OPRD1,OPRD2             ;OPRD1←OPRD1+OPRD2

功能:将源操作数和目的操作数相加,结果送到目标操作数

注意:

  1. 这里源操作数和目标操作数都可以是无符号数,也可以是带符号数,但两者类型要相同,长度相同
  2. 源操作数可以是通用寄存器、存储器或立即数,而目的操作数只能是通用寄存器或存储器,不能是立即数,且两者不能同时为存储器操作数。
ADD CL,20H        ;CL←CL+20H
ADD DX,[BX+SI]    ;DX←DX+[BS+SI]

带进位加法指令ADC

指令格式:ADC OPRD1,OPRD2             ;OPRD1←OPRD1+OPRD2+CF

功能:ADC和ADD指令在功能、格式以及对标志位的影响上基本相同,只是在求和运算时加入了CF标志位,结果依然送目标操作数

;当CF=1
MOV AL,7EH
ADC AL,0ABH   ;执行完之后AL=2AH=7eH+0ABH+1且CF=1

加1指令INC

指令格式:INC OPRD               ;OPRD←OPRD+1

功能:INC指令是将指定操作数的内容加1,再送回该操作数。其操作类似c语言中的"++"运算符。

注意:

  1. 目的操作数可以是任意一个8位或16位通用寄存器或存储单元,但不能是立即数,且把操作数看作是无符号二进制数。
  2. 指令执行影响PF、AF、ZF、SF、OF,但不影响CF
INC SI                ;修改地址指针
INC BYTE PYR [BX]     ;修改地址指针

 

2.减法指令SUB/SBB

不考虑借位减法指令SUB

指令格式:SUB OPRD1,OOPRD2    ;OPRD1←OPRD1-OPRD2

功能:SUB是一条双操作数指令,其功能是用目标操作数减去源操作数,并将结果送至目标操作数。

注意:该指令对标志位的影响和ADD完全相同。

 

SUB BL,30H        ;BL←BL-30H
SUB AL,[BP+SI]    ;AL←AL-[BP+SI]

考虑借位的减法指令SBB

指令格式:SBB OPRD1,OPRD2          ;OPRD←OPRD1-OPRD2-CF

功能:目标操作数减去源操作数以及标志位CF的值,并将结果送至目标操作数所在地址。

注意:该指令对于标志位的影响和SUB相同,主要用于多字节减法运算

SBB BL,30H    ;BL←BL-30H-CF

减1指令DEC

指令格式:DEC OPRD        ;OPRD←OPRD-1

功能:DEC和INC功能一样,是一条单字节指令,其功能是将操作数的值减1,结果送回操作数的地址。

注意:该指令对于标志位的影响和INC相同

DEC AX             ;AX←AX-1
DEC BYTE PTR[DI]   ;将数据段中DI所指单元的内容减1,结果送回该单元

比较指令CMP

指令格式:CMP OPRD1,OPRD2     ;OPRD1-OPRD2,结果不送回

功能:CMP指令是用目标操作数减源操作数,但相减的结果不送回目标操作数,即指令执行后的两操作数内容不变,对6个状态标志位的影响和SUB相同。常在其后跟一个条件转移指令,用于程序跳转。

求补指令NEG

指令格式:NEG OPRD         ;OPRD ←0-OPRD

功能:对操作数求补,该指令执行效果是改变操作数的符号---将正数变为负数或将负数变为正数,大小不变。因此该指令也叫取负指令

MOV AL,FFH
NEG AL        ;AL=0-FFH=01H

3.乘法指令MUL

指令格式:MUL OPRD               ;AX←OPRD*AL          (字节乘法)

                                                    ;DS:AX←OPRD*AX     (字乘法) 

                 IMUL OPRD              ;和MUL相同

功能:MUL和IMUL用于无符号数和有符号数的乘法运算,他们都是有一个源操作数,而目标操作数都是隐含规定的8位乘法时隐含操作数为AL16位乘法时隐含的操作数为AX

注意:

  1. 指令MUL对标志位CF、OF有影响,而对SF、ZF、AF、PF不确定,如果运算结果的高半部分(在AH或DX中)为零,则CF=OF=0,表示AH或DX中所存的结果为有效数字;否则CF=OF=1,表示AH或DX中结果为无效数字。
  2. 指令IMUL对标志位的影响与MUL类似,由于指令IMUL将两个操作数按带符号数进行处理,如果乘积的高半部分仅是低半部分符号位的扩展,则CF=OF=0,f否则,AH或DX的内容为乘积的有效数字。

 

MOV AX,04E8H        ;(AX)=04E8H
MOV BX,4E20H        ;(BX)=4E20H
IMUL BX             ;(DX:AX)=(AX)*(BX)

 

4.除法指令DIV

指令格式:DIV OPRD          ; AL←(AX)/(OPRD)的商   -----  (字节除法)

                                             ;AH←(AX)/(OPRD)的余数

                                              ;AX←(DX:AX)/(OPRD)的商 ---- (字除法)

                                              ;DX←(DX:AX)/(OPRD)的余数

                 IDIV  OPRD         ;与DIV格式相同

功能:DIV和IDIV指令用于无符号数和有符号数的除法运算,只有一个源操作数,而目标操作数时隐含规定的:若被除数为16位,则隐含操作数为AX,其中,8位商放在AL中,8位余数放在AH中;若被除数为32位,则隐含的操作数为DX:AX,其中,16位商AX中,16位余数在DX中。

注意:

  1. 指令DIV/IDIV使状态标志位的值不确定
  2. 除法指令中被除数的长度应为除数长度的两倍。如果被除数长度和除数长度相等,则应在使除法指令之前,将被除数的高位进行扩展,确保在使用DIV指令时,高位扩展为8个零或者16个零。
DIV BL                ;AX除以BL,商放AL,余数放AH
DIV WORD PTR[SI]      ;DX:AX除以SI和SI+1所指向单元的内容,商放AX,余数放DX

 

 

  • 21
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值