8086CPU 指令系统之 算术运算指令(重点)

前言:公号 「编程有料」后台回复 “大礼包” 即可获取近1000本助力你编程之路的电子书

算术运算指令(重点)

  • 实现加法、减法、乘法、除法、BCD码运算后的调整
  • 大部分指令影响标志寄存器中的状态标志位

常见的算术运算指令

1,不带进位加法指令ADD

格式:ADD d,s

功能:(d)←(d)+(s)

说明:操作数不能使用段寄存器。下图辅助记忆:

在这里插入图片描述

2,带进位加法指令ADC

格式:ADC d,s

功能:(d)←(d)+(s)+CF

说明:将目的操作数d 与源操作数s 和进位标志CF 相加结果送回d 中

如下例题辅助理解:

:设AX=1000H,CF=1,分析以下指令的执行结果(AX=? CF=?)
(1) ADD AX,100H	;AX=1100H,CF=0
(2)ADC AX,100H	;AX=1101H,CF=0
(3) ADC AH,0F0H	;AX=0100H,CF=1

3,加一指令INC

格式:INC d

功能:(d)←(d) +1

说明:将目的操作数d 加1 后结果送回d 中

注意:INC不影响CF标志

:设AX=0FF00H,CF=0,则执行下列指令后,AX=? CF=?
(1) INC	AX	;AX=OFF01H,CF=0
(2)INC	AH	;AX=0000H,CF=0

4,不带进位减法指令SUB

格式:SUB d,s

功能:(d) ←(d)一(s)

说明:将目的操作数d 与源操作数s 相减结果送回d 中

5,带进位减法指令SBB

格式:SBB d,s
功能:(d)←(d)-(s) - CF

说明:将目的操作数d 与源操作数s 和进位标志CF 相减结果送回d 中

:设AX=1101H,CF=1,则执行下列指令后,AX=?  CF=?
(1)SUB AX,100H	;AX=1001H,CF=0
(2)SBB AX,100H	;AX=1000H,CF=0
(3)SBB	AH,11H	;AX=OFF01H,CF=1

6,减一指令DEC

格式:DEC d

功能:(d)←(d)-1

说明:将目的操作数d 减1后结果送回d 中

注意:DEC不影响CF标志

7,取负指令NEG

格式:NEG d

功能: (d) ← -(d)+1

说明:将目的操作数取负后送回d 中

:设AX=00FFH,则执行下列指令后,AX=?
NEG	AX	;AX=FF01H
NEG	AL	;AX=0001H

8、比较指令CMP

格式:CMP d,s

功能:(d)一(s)

说明:仅将目的操作数d 与源操作数s 相减,结果并不送回d 中

9,加法的压缩BCD 码调整指令 DAA

格式:DAA

功能:对AL 中的压缩BCD 码加法结果进行调整。

说明:必须紧跟在ADD/ADC 指令之后出现。

在这里插入图片描述

(**注:**AF标志位:AF标志位是辅助进位标志,供BCD码使用。CF标志位:CF标志位是进位标志。)

:设AL=25H,BL=37H,问执行下列指令序列后,AL=? CF=?
ADD AL,BL
DAA

// 25H+37H=5CH,(其中C>9,故需要修正如下:)
修正:
5CH+6H=62H=01100010B
AL=62H=62BCD . CF=0

最后再来一个例题加深对BCD 码的理解:

设AX 和BX 中存放着两个4 位的压缩型BCD 码,求两数之和,并将和放在AX 中(一个16 位的寄存器中可以存放一个4 位的BCD 码)。

代码如下:

ADD AL,BL	;低字节相加
DAA	;低字节调整
MOV CL,AL	;空出AL
MOV AL,AH
ADC AL,BH	;高字节相加
DAA	;高字节调整
MOV AH,AL
MOV AL,CL	;这就是之前为什么要用MOV CL,AL的原因。
//仔细阅读体悟还是从中学点东西的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阔升

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值