设计与开发

单片机减法 跟电师傅学单片机(12):单片机算术运算加减法指令图文新解

小编 2025-06-22 设计与开发 23 0

跟电师傅学单片机(12):单片机算术运算加减法指令图文新解

单片机算术运算类指令(24条)

算术运算指令是8位二进制数进行加、减、乘、除四则运算,以及加1、减1、十进制调整等。

本节介绍其中加减法12条指令。

加减法指令示意图

1:不带进位加法指令(4条)

ADD:不带进位标志CY的加法,功能是累加器A中的内容与源操作数所确定单元中的内容相加,其结果仍存在A中。

ADD A,Rn;属于寄存器寻址方式。指令功能是将寄存器Rn中的内容与累加器A中的内容相加,其结果送回A中。

ADD A,direct;属于直接寻址方式。指令功能是将直接地址direct中的内容与累加器A中的内容相加,其结果送回A中。

ADD A,@Rn;属于寄存器间接寻址方式。指令功能是将寄存器间接寻址单元中的内容与累加器A中的内容相加,其结果送回A中。

ADD A,#data;属于立即数寻址方式。指令功能是将立即数data与累加器A中的内容相加,其结果送回A中。

2:带进位加法指令(4条)

ADDC:带进位标志CY的加法,功能是累加器A中的内容与源操作数所确定单元中的内容相加,其结果仍存在A中。与ADD指令类似,不同之处是在执行加法时,还要将进位标志CY的内容一起加进去。

进位加法计算

标志寄存器PSW示意图

标志寄存器PSW功能图

CY:是标志寄存器PSW中的一个进位标志位。标志寄存器PSW也称程序状态字PSW,用于存放程序运行状态信息。

单片机系统上电或复位时,PSW初始值为00H。

3:减法指令(4条)

SUBB:带借位减法指令,与带进位加法指令类似,指令功能是把累加器A中的内容减去源操作数所确定单元中的内容和进位标志CY,其结果送回A中。

注意:在减法指令里面,只有带借位的减法,没有不带借位的减法,做减法运算时,如果是低8位时,必须把CY清零。

单片机中数的表示及运算

单片机中的数是以二进制表示的,分为有符号数和无符号数两种。

有符号数的表示方法

有符号数是指有“ + (正)”、“ − (负)”符号的数。由于单片机采用二进制数,所以只有“1 ”和“0”两种数字,其中用“ 0 ”表示“ + ”,用“ 1 ”表示“ − ” 。单片机中的数据一般只有8位,一般规定最高位为符号位,因为要用1位表示数的符号,所以只有7位用来表示数值,可以表示− 127~+128。

有符号数的表示方法有 3 种:原码、反码和补码。同一有符号数,用 3 种表示方法得到的数是不同的。下面用3种方法来表示两个有符号数+1011101和− 1011101。

(1)原码

用“1”表示“−”,用“0”表示“+”,其他各数保持不变,采用这种方法表示出来的数称为原码。

+1011101用原码表示是01011101,可写成[01011101] 原。

− 1011101用原码表示是11011101,可写成[11011101] 原。

(2)反码

反码是在原码的基础上求得的。对于正的有符号数,其反码与原码相同;对于负的有符号数,其反码除符号位与原码相同外,其他各位数由原码各位数取反得到。

+1011101用反码表示是01011101,可写成[01011101] 反。

− 1011101用反码表示是10100010,可写成[10100010] 反。

(3)补码

补码是在反码的基础上求得的。对于正的有符号数,其补码与反码、原码相同;对于负的有符号数,其补码除符号位与反码一致外,其他数由反码加1得到。

+1011101用补码表示是01011101,可写成[01011101] 补。

− 1011101用补码表示是10100011,可写成[10100011] 补。

有符号数的运算

用原码表示有符号数简单、直观,但在单片机中,如果采用原码进行减法运算,需要很复杂的硬件电路;如果用补码,可以将减法运算变为加法运算,从而省去减法器而简化硬件电路。

例如:用二进制减法运算和补码加法运算分别计算35 − 21。

① 二进制减法运算:35 − 21=00100011 − 00010101=00001110

② 用补码加法运算。

先将算式转换成补码形式,35 − 21=[+35]+[ − 21]= [00100011] 原 +[10010101] 原 =[00100011] 反+ [11101010] 反 =[00100011] 补 +[11101011] 补。

再对补码进行二进制加法运算:

从上面的运算过程可以看出,补码的符号也参与运算,在8位单片机中,由于数据长度只能有8位,上式结果有9位,第9位会自然丢失,补码加法的运算结果与二进制减法的运算结果是一样的,都是00001110=14。

由此可见,用补码的形式进行运算,可以将减法运算转换为加法运算,运算结果仍是正确的,所以单片机普遍采用补码的形式表示有符号数。

无符号数的表示方法

无符号数因为不用符号位, 8 位全部用来表示数据,所以这种方法可以表示的数据范围是 0 ~ 255 。 8位二进制数的不同表示方式的换算关系见表1-6。

表1-6 8位二进制数的不同表示方式的换算关系

表1-6

续表

表1-6

从表1-6中可以看出,对于同一个二进制数,当采用不同的表示方式时,得到的数值是不同的,特别是大于10000000的有符号数。若想确切知道单片机中的二进制数所对应的十进制数是多少,先要了解该二进制数是有符号数还是无符号数,再换算出该二进制数对应的十进制数。

相关问答

单片机减法 指令小数减大数怎么算?

1.单片机减法指令小数减大数是不可行的。2.这是因为单片机的减法指令是基于补码运算的,而补码运算是通过将减数取反再加上被减数来实现的。当小数减大数时,...

单片机 十进制怎么运算?

如果是51单片机的话,做十进制减法运算,只能用ADD和ADDC指令做,因为只有这两条加法指令运算的结果才能用DAA指令进行十进制调整。方法是:如Y=A-B,变成Y=A+(...

51 单片机 中cy是什么意思?

51单片机中Cy是进位标志位。在进行加法或减法运算时,若运算结果最高位有进位或借位,则Cy进位。51单片机是对所有兼容Intel8031指令系统的单片机的统称。该...

刚接触51 单片机 不知道怎么做。。。1)试编写程序,完成两个16...

[最佳回答]这都是最基本的程序,你可以找本教材看看,就明白了,看懂就行了。

单片机 指令中JNC能比较数的大小?

单片机比较大小可以用减法指令来实现,比如比较两个数A与B的大小,步骤如下:1、先将借位清0。2、执行指令SUBB,也就是A-B。3、判断,借位C的状态,如果C等...

单片机 中,进位标志CY在加法中当有进位CY为1那么在加法中,有借位时CY为0吗?

进位和借位都是CY,加法有进位CY=1,减法有借位CY=1例如:MOVA,#81HADDA,#80H此时CY=1CLRCMOVA,#80HSUBBA,#81H此时CY=1进位和借位都是CY...

单片机 题目一套,2、在程序运行中,PC的值是.A、当前正在执...

[最佳回答]给你回答一部分吧.选择题:2C3A4B5D填空题:2位单元名称,位单元地址3EA低电平2us4BA512,246低电平触发,下降沿触发7注释操作码8128工作寄存器区...

keil写程序 单片机 二位数码管显示倒计时?

管显示,就应该先画仿真图,或用...其实,这与keil没什么关系,主要是取决于用什么语言写程序,是汇编还是C语言,keil不过是用来编译的软件。其次,既然是用数码...

cy版本是什么意思?

cy版本就是进位标志版本。在进行加法或减法运算时,若运算结果最高位有进位或借位,则Cy进位。51单片机是对所有兼容Intel8031指令系统的单片机的统称。该系列...

ov是什么意思-ZOL问答

3、在单片机汇编语言中的OV指的是溢出标志位,该位表示在进行有符号数的加减法时是否发生溢出;当OV=1时,表示有符号数运算结果发生了溢出,OV=0时,表示有符号数运...

猜你喜欢