跟电师傅学单片机(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时,表示有符号数运...