当前位置:首页 > 单片机 > 单片机
[导读]ADD指令将源操作数和累加器A中的数相加,加法的结果存入累加器A,并且运算结果会影响PSW中的CY、OV、AC和P标志位。ADD指令对标志位的影响如下:当加法结果的第7位有进位时,则进位标志位CY被置1,否则被清0;如果加法结果的第3位有进位,则辅助进位标志位AC被置1,否则被清0;如果加法结果的第6位和第7位的进位情况不一致,则溢出标志位OV被置1,否则被清0;运算结束时,奇偶标志位P的值由累加器A中的数决定,若累加器A中的值以二进制表示后,其中“1”的个数为奇数个,则P为1,否则P为0。

算术运算指令包括加、减、乘和除法指令,其语法格式见表3-7。由表3-7可知,算术运算指令会对PSW中的某些位产生影响。

1.加法指令ADD和ADDC

ADD指令将源操作数和累加器A中的数相加,加法的结果存入累加器A,并且运算结果会影响PSW中的CY、OV、AC和P标志位。ADD指令对标志位的影响如下:当加法结果的第7位有进位时,则进位标志位CY被置1,否则被清0;如果加法结果的第3位有进位,则辅助进位标志位AC被置1,否则被清0;如果加法结果的第6位和第7位的进位情况不一致,则溢出标志位OV被置1,否则被清0;运算结束时,奇偶标志位P的值由累加器A中的数决定,若累加器A中的值以二进制表示后,其中“1”的个数为奇数个,则P为1,否则P为0。

ADDC指令与ADD指令的唯一区别是,前者在源操作数和累加器A的加法基础上再加上CY中的值。

2.十进制调整指令DA

指令ADD和ADDC将其源操作数和目的操作数作为二进制数(或十六进制数)进行加法计算,遵循“逢2进1”(或“逢16进1”)的二进制(或十六进制)计算规则,得到的运算结果为二进制数(或十六进制数)。如果用ADD和ADDC指令进行压缩BCD码(十进制数)的加法计算,则得不到正确的十进制计算结果,而使用DA指令可以将ADD和ADDC指令的运算结果调整为十进制的运算结果。

使用“DA A”指令进行十进制调整时,必须满足以下要求:在DA指令之前必须进行ADD或ADDC加法运算,并且参与加法运算的操作数必须是压缩BCD码数。

“DA A”指令调整时,先处理“个位”,再处理“十位”,“个位”的处理结果将影响“十位”的调整,具体步骤如下:

(1)调整BCD码运算结果的“个位”

1)若累加器A中运算结果的“个位”(即低4位)数大于9(非BCD码),则在累加器A的“个位”上加“6”。这样做是因为:在BCD码计算时,结果大于9则应产生进位,但是ADD和ADDC按照十六进制进行计算,只有结果大于15时才进位,从而导致“晚”进位,所以此时加“6”相当于将“逢16进1”的十六进制运算强制调整为“逢10进1”十进制运算。

2)若累加器A中运算结果的“个位”(即低4位)产生进位(辅助进位标志位(AC)=1),则在累加器A的“个位”上加“6”。这样处理的理由是:“个位”产生进位,意味着BCD码加法结果的个位大于15而产生了进位,但是该进位将使BCD码加法结果的个位数被减去16,而正常的十进制加法进位应该使个位数被减去10,所以需通过加“6”操作补上多减去的“6”。

(2)调整BCD码运算结果的“十位”

若累加器A中运算结果的“十位”(即高4位)数大于9(非BCD码)或累加器A中“十位”产生进位(进位标志位(CY)=1),则在累加器A的“十位”上加“6”。这样做的原因与步骤(1)相似。

【例3-34】DA指令举例。

以下程序段可以完成压缩BCD码的加法运算88H+02H=90H。

3.减法指令SUBB

SUBB指令将累加器A中的数减去源操作数和进位标志位CY,并将减法结果存入累加器A,其运算结果会影响PSW中的CY、OV、AC和P标志位。SUBB指令对标志位的影响如下:当减法的第7位有借位时,则进位标志位CY被置1,否则被清0;如果减法结果的第3位有借位,则辅助进位标志位AC被置1,否则被清0;如果减法结果的第6位和第7

位的借位情况不一致,则溢出标志位被置1,否则被清0;运算结束时,奇偶标志位P的值由累加器A中的数决定,若累加器A中的值以二进制表示后,其中“1”的个数为奇数个,则(P)=1,否则(P)=0。

【例3-35】SUBB指令举例。确定下段程序执行后,累加器A和PSW的值。

解:运行结果是(A)=8CH、(PSW)=0C1H(即P=1、OV=0、AC=1和CY=1)。

4.加1指令INC和减1指令DEC

INC指令和DEC指令分别对指令中唯一的操作数进行加1和减1操作,并将结果送回操作数。除了“INC A”和“DEC A”指令将影响奇偶标志位P以外,其他INC和DEC指令均不影响任何标志位。注意:这里所说的“不影响”是指标志位原来的状态保持不变。另外,“INC DPTR”指令进行16位数加1操作,该指令执行时,先将DPL加1,若产生进位,则将DPH加1,并且DPL加1和DPH加1产生的进位不影响AC和CY。另外,无“DEC DPTR”指令。

还需特别注意的是:若用INC和DEC修改单片机并行I/O口(P0~P3)的引脚状态,如指令“INC P0”,则指令执行时采用的是“读-修改-写”方式,即先从端口的输出锁存器(而不是端口的引脚)读取端口数据,然后修改该数据(INC指令进行加1操作,DEC指令进行减1操作),最后将修改结果输出到端口引脚上。

5.乘法指令MUL

乘法指令的格式见表3-7,乘法的被乘数和乘数均为8位无符号数,且默认存放在累加器A和寄存器B中。乘积为16位无符号数,其低8位存放于累加器A中,高8位存放在寄存器B中,如图3-2所示。

图3-2乘法指令示意图

乘法指令对标志位的影响为:若乘积大于0FFH,则溢出标志位OV被置1,否则被清0;进位标志位总会被乘法指令清0。

6.除法指令DIV

除法指令的格式见表3-7。与乘法指令相似,除法指令的被除数和除数均为8位无符号数,被除数默认放在累加器A中,除数默认放在寄存器B中。除法的商和余数均为8位无符号数,分别存于累加器A中和寄存器B中,如图3-3所示。

图3-3除法指令示意图

除法指令对标志位的影响:若除数不为0,则溢出标志位OV和进位标志位CY均被清0;若除数为0,则溢出标志位(OV)被置为1,且累加器A和寄存器B的值是不确定的。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

为增进大家对工业以太网的认识,本文将对工业以太网的原理、工业以太网的关键技术以及工业以太网要解决的问题予以介绍。

关键字: 以太网 工业以太网 指数

为增进大家对工业以太网的认识,本文将对工业以太网网络优势、工业以太网和IOLINK的区别予以介绍。

关键字: 以太网 工业以太网 指数

为增进大家对工业以太网的认识,本文将对工业以太网的优势、工业以太网缺点、工业以太网的维护予以介绍。

关键字:

Apr. 23, 2024 ---- 随着节能成为AI推理服务器(AI Inference Server)优先考量,北美客户扩大存储产品订单,带动QLC Enterprise SSD需求开始攀升。然而,目前仅Solidi...

关键字: SSD AI 服务器

为增进大家对二极管的认识,本文将对续流二极管、续流二极管的工作原理以及二极管在工业产品中的应用予以介绍。

关键字: 二极管 指数 续流二极管

通过本文,您将了解到二极管反接是否有电压以及二极管在电子电路中的应用。

关键字: 二极管 指数 稳压电路

为增进大家对二极管的了解,本文将对ESD二极管和TVS二极管之间的区别予以介绍。

关键字: ESD TVS 二极管 指数

为增进大家对嵌入式主板的认识,本文将对嵌入式主板以及嵌入式主板常见问题及其解决方法予以介绍。

关键字: 嵌入式 指数 主板

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

为增进大家对嵌入式的认识,本文将对嵌入式、嵌入式工作相关的内容予以介绍。

关键字: 嵌入式 指数 嵌入式技术
关闭