当前位置:首页 > 单片机 > 单片机
[导读]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的值是不确定的。

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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭