关于单片机汇编的十进制调整指令。
今天看单片机,看到书上写着计算机在进行BCD加法时,必须对二进制加法的结果进行修正,使两个紧邻的BCD之间真正能够做到“逢十进一”。修正原则是:对应位的两个BCD码相加,...
今天看单片机,看到书上写着计算机在进行BCD加法时,必须对二进制加法的结果进行修正,使两个紧邻的BCD之间真正能够做到“逢十进一”。修正原则是:对应位的两个BCD码相加,若和的结果大于9(1001)或低位向高位发生了进位,则进行加6(0110)修正,这种修正可以由单片机执行内部的十进制调整指令来完成。
我想问一下,是不是以后做加法运算,凡是遇到上述情况都得修正?那为什么我看到的某些加法运算没有修正啊?请高手指教!! 展开
我想问一下,是不是以后做加法运算,凡是遇到上述情况都得修正?那为什么我看到的某些加法运算没有修正啊?请高手指教!! 展开
7个回答
展开全部
是不是做加法,凡是遇到上述情况都得修正?--是BCD码的加法,就必须修正。
那为什么我看到的某些加法运算没有修正啊?--那就不是BCD码的加法。
一般时,是用四位二进制数,表示一位16进制数(0~16),即0000~1111。
BCD码,是用四位二进制数,表示一位十进制数 (0~9),即0000~1001。
如果是BCD码的加法,就必须修正,否则就可能出现16进制数,这个结果就不是BCD码了。
那为什么我看到的某些加法运算没有修正啊?--那就不是BCD码的加法。
一般时,是用四位二进制数,表示一位16进制数(0~16),即0000~1111。
BCD码,是用四位二进制数,表示一位十进制数 (0~9),即0000~1001。
如果是BCD码的加法,就必须修正,否则就可能出现16进制数,这个结果就不是BCD码了。
追问
如何判断什么时候用的是BCD码加法?什么时候用的不是BCD码的加法?
追答
如果是你自己编程:
你愿意用BCD码,就用BCD码,不愿意就不用。随你的便,用什么,都可以。
如果是看别人的程序:
使用了调整指令,就是BCD码的运算,没有的,就不是。
呵呵,我在上面的回答,有个数字,写大了一点。
写成了:一位16进制数(0~16);
应该是:一位16进制数(0~15)。
展开全部
由于BCD码在单片机中是以16进制的形式存储的,我们观测到的值和单片机实际存储的值是不一样的,例如BCD码10,我们看到的值是10,但是单片机实际存储的值16,单片机的运算也都是以16进制的形式进行的,因此用单片机进行BCD的运算都需要修正。不是BCD码的运算,就不需要修正了。例如两个正常的十进制数 15+17=32;15对应的16进制数是0Fh,17对应的16进制数是11H
相加写成
MOV A,#0FH
ADD A, #11H
结果为20H对应是进制数为32
也可以写成
MOV A,#15D
ADD A, #17D ;结果一样
相加写成
MOV A,#0FH
ADD A, #11H
结果为20H对应是进制数为32
也可以写成
MOV A,#15D
ADD A, #17D ;结果一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
单片机汇编的十进制调整指令, 是为了让编程简单化, 可以直接以 十进制 运算, 如
15+56=
MOV A, #15H ; A = 15H ( 注意 要以 十六进制 写成 15H)
ADD A, #56H ; A = 15H+56H = 6BH
DA A ; A = 6BH + 06H = 71H C = 0 进位标志
68+75=
MOV A, #68H
ADD A, #75H ; A = 68H+75H = DDH
DA A ; A = DDH + 66H = 43H C = 1 = 143
; 注 十进制调整指令 必须跟在加法指令后面
; 否则会出错。
15+56=
MOV A, #15H ; A = 15H ( 注意 要以 十六进制 写成 15H)
ADD A, #56H ; A = 15H+56H = 6BH
DA A ; A = 6BH + 06H = 71H C = 0 进位标志
68+75=
MOV A, #68H
ADD A, #75H ; A = 68H+75H = DDH
DA A ; A = DDH + 66H = 43H C = 1 = 143
; 注 十进制调整指令 必须跟在加法指令后面
; 否则会出错。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果是BCD码,就必须修正,这样得到的结果才是BCD码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询