首页 理论教育 单片机实用教程:算术操作指令

单片机实用教程:算术操作指令

时间:2023-11-16 理论教育 版权反馈
【摘要】:算术操作类指令的功能是进行加、减、乘、除四种基本算术运算。表3-12 带进位的加法指令下面举例说明带进位的加法指令的功能。指令格式:INC操作数指令的功能是将操作数加1,结果仍保存在该操作数中。除法指令只有1条,该条指令的形式和功能见表3-17。十进制数调整指令又称BCD码调整指令,它的操作码助记符是“DA”。

单片机实用教程:算术操作指令

算术操作类指令的功能是进行加、减、乘、除四种基本算术运算。它包括加法指令、减法指令、乘法指令、除法指令和十进制数调整指令。

1.加法指令

加法指令又分不带进位的加法指令、带进位的加法指令和加l指令。

(1)不带进位的加法指令

不带进位的加法指令的操作码助记符是“ADD”。

指令格式:ADD A,操作数2

指令的功能是将操作数2与累加器A中的数据相加,结果保存在A中。

不带进位的加法指令有4条,各条指令的形式和功能见表3-11。

表3-11 不带进位的加法指令

978-7-111-43252-4-Chapter03-20.jpg

下面举两个例子来说明不带进位的加法指令的功能。

1)ADD A,#36H。在指令执行前,如果累加器A中的数据为56H,那么指令执行后,累加器A中的数据为8CH(36H+56H)。

2)ADD A,R6。在指令执行前,如果累加器A中的数据为78H(01111000),R6中的数据为累加器89H(10001001),那么指令执行后,相加得到的数据为101H(10000 0001),累加器A是一个8位寄存器,所以只能存储8位数00000001(01H),而最高位D7的进位会保存在PSW的进位标志位CY中,即让CY=1,另外两个数据的低4位相加(1000+1001)时,D3位会向高位D4位进位,在进位的同时会将PSW的半进位标志位AC位置“1”。

(2)带进位的加法指令

带进位的加法指令的操作码助记符是“ADDC”。

指令格式:ADDC A,操作数2

指令的功能是将操作数2与累加器A中的数据相加,再与PSW中CY位的数据相加,结果保存在累加器A中。

带进位的加法指令有4条,各条指令的形式和功能见表3-12。

表3-12 带进位的加法指令

978-7-111-43252-4-Chapter03-21.jpg

下面举例说明带进位的加法指令的功能。

例如:ADDC A,#36H

在指令执行前,如果累加器A中的数据为56H,寄存器PSW中CY位的数据为“1”,那么指令执行后,累加器A中的数据为8DH(36H+56H+1)。

【例3-4】 实现两字节加法指令,其中加数存于30H(低)、31H(高),被加数存于40H(低)、41H(高),和存于50H(低)、51H(高)。

解答:为方便记忆列分配表如下:

978-7-111-43252-4-Chapter03-22.jpg

978-7-111-43252-4-Chapter03-23.jpg

978-7-111-43252-4-Chapter03-24.jpg

(3)加1指令

加1指令又称增量指令,它的操作码助记符是“INC”。

指令格式:INC操作数

指令的功能是将操作数加1,结果仍保存在该操作数中。

加1指令有5条,各条指令的形式和功能见表3-13。

表3-13 加1指令

978-7-111-43252-4-Chapter03-25.jpg

下面举例说明加1指令的功能。

例如:INC@R0

在指令执行前,如果寄存器R0中的地址为56H,56H单元中的数据为35H,那么指令执行后,56H单元中的数据为36H。

2.减法指令

减法指令又分带借位的减法指令和减1指令。

(1)带借位的减法指令

带借位的减法指令的操作码助记符是“SUBB”。

指令格式:SUBB A,操作数2

指令的功能是将累加器A中的数据减去操作数2,再减去PSW中CY位的数据,结果保存在累加器A中。

带借位的减法指令有4条,各条指令的形式和功能见表3-14。

表3-14 带错位的减法指令

978-7-111-43252-4-Chapter03-26.jpg

下面举例说明带借位的减法指令的功能。

例如:SUBB A,R6

在指令执行前,如果累加器A中的数据为89H,寄存器R6中的数据为78H,CY位中的数据为1,那么指令执行后,累加器A中的数据为10H(89H-78H-1)。

如果需要不借位,可先将CY位清0,清0指令将在后面介绍。(www.xing528.com)

(2)减1指令

减1指令的操作码助记符是“DEC”。

指令格式:DEC操作数

指令的功能是将操作数减1,结果仍保存在该操作数中。

减1指令有4条,各条指令的形式和功能见表3-15。

表3-15 减1指令

978-7-111-43252-4-Chapter03-27.jpg

下面举例说明减1指令的功能。

例如:DEC@R0

在指令执行前,如果寄存器R0中的地址为56H,56H单元中的数据为35H,那么指令执行后,56H单元中的数据为34H。

3.乘法指令

乘法指令的操作码助记符是“MUL”。

乘法指令只有1条,该条指令的形式和功能见表3-16。

表3-16 乘法指令

978-7-111-43252-4-Chapter03-28.jpg

下面以一个程序段为例来说明乘法指令的功能。例如:

MOV A,#36H

MOV B,#07H

MUL AB

上面的第1条指令是将数据#36H(00110110)送到累加器A中;第2条指令是将数据#07H(00000111)送到寄存器B中;第3条指令是将A和B中的数据相乘(00110110×00000111);将相乘的结果0000000101111010(017AH)的低8位(7AH)保存在A中,高8位(01H)保存在B中。

4.除法指令

除法指令的操作码助记符是“DIV”。

除法指令只有1条,该条指令的形式和功能见表3-17。

表3-17 除法指令

978-7-111-43252-4-Chapter03-29.jpg

下面以一个程序段为例来说明除法指令的功能。例如:

MOV A,#0FBH

MOV B,#12H

DIV AB

上面的第1条指令是将数据#0FBH(11111011)送到累加器A中;第2条指令是将数据#12H(00010010)送到寄存器B中;第3条指令是将A和B中的数据相除(11111011÷00010010);得到的商1101(0DH)保存在A中,余数10001(11H)保存在B中。

5.十进制数调整指令

单片机在对十进制数进行加法运算时,用BCD码(由4位二进制数构成)来表示十进制数,再对BCD码进行加法运算,得到的结果仍要用BCD码表示,但有时得到的结果可能不是BCD码。例如:

(1)3+5=8(2)5+9=14(3)8+9=17

978-7-111-43252-4-Chapter03-30.jpg

在例(1)中,两个BCD码相加后的运算结果仍是BCD码;在例(2)中,两个BCD码相加后的结果不是BCD码,因为BCD码只有9个(0000~1001),1110不是BCD码;在例(3)中,两个BCD码相加后的结果是错误的BCD码,因为BCD码只有4位,如果把10001当做是2位BCD码,还原就成了11,结果错误。采用十进制数调整指令可以解决这个问题。

十进制数调整指令又称BCD码调整指令,它的操作码助记符是“DA”。

十进制数调整指令的形式和功能见表3-18。

表3-18 十进制数调整指令

978-7-111-43252-4-Chapter03-31.jpg

下面以一个BCD码加法程序段为例来说明十进制数调整指令的功能:

978-7-111-43252-4-Chapter03-32.jpg

上面的第1条指令是将数据#56H送到累加器A中;第2条指令是将A中的数据56H(01010110)与数据#67H(01100111)相加,得到的结果是BDH(10111101),显然结果不是BCD码(因为1011和1101都不是BCD码);第3条指令是将第2条指令相加后的运算结果BDH(10111101)进行BCD调整。调整过程如下:

978-7-111-43252-4-Chapter03-33.jpg

从上面的竖式中可以看出,指令先判断相加结果的低4位是否大于9(1001),若大于9,则将低4位加6(0110),然后判断低4位加6后得到结果的高4位是否大于9,若大于9,再将高4位加6,这样修正的结果是100100011(123H=56H+67H)。

在进行普通的加法运算时,后面不用加“DA A”指令;如果在加法运算指令后加上该指令,进行的加法运算将是BCD加法运算。一般减法后使用该指令要慎重。

【例3-5】 已知梯形的上底、下底和高分别是2、5、2,计算梯形的面积,并将之存储到单片机内存的40H中。

解答:本例要实现梯形面积的运算,主要分为三步:计算a+b;计算(a+b)×h;计算(a+b)×h÷2。在汇编语言中,除法运算是取余,因此此计算梯形的方法仅适用于上底加下底结果为偶数的梯形。此外,为了使梯形的面积值便于观察,程序中分别定义梯形的上底长a、下底长b、高h的数值都比较小,这样(a+b)×h的数值不会超过0FFH。

根据上面的分析,先分配上底、下底、高的具体数据存储单元,见如下地址分配表:

978-7-111-43252-4-Chapter03-34.jpg

978-7-111-43252-4-Chapter03-35.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈