关于单片机汇编的十进制调整指令。

今天看单片机,看到书上写着计算机在进行BCD加法时,必须对二进制加法的结果进行修正,使两个紧邻的BCD之间真正能够做到“逢十进一”。修正原则是:对应位的两个BCD码相加,... 今天看单片机,看到书上写着计算机在进行BCD加法时,必须对二进制加法的结果进行修正,使两个紧邻的BCD之间真正能够做到“逢十进一”。修正原则是:对应位的两个BCD码相加,若和的结果大于9(1001)或低位向高位发生了进位,则进行加6(0110)修正,这种修正可以由单片机执行内部的十进制调整指令来完成。

我想问一下,是不是以后做加法运算,凡是遇到上述情况都得修正?那为什么我看到的某些加法运算没有修正啊?请高手指教!!
展开
 我来答
做而论道
高能答主

推荐于2018-05-10 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
是不是做加法,凡是遇到上述情况都得修正?--是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)。
藏在水中的人
2012-04-29 · TA获得超过990个赞
知道小有建树答主
回答量:474
采纳率:0%
帮助的人:575万
展开全部
由于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 ;结果一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GUEL86
2012-04-29 · TA获得超过5856个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2734万
展开全部
单片机汇编的十进制调整指令, 是为了让编程简单化, 可以直接以 十进制 运算, 如
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
; 注 十进制调整指令 必须跟在加法指令后面
; 否则会出错。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友868e694
2012-04-29 · 超过25用户采纳过TA的回答
知道答主
回答量:96
采纳率:0%
帮助的人:69.5万
展开全部
如果是BCD码,就必须修正,这样得到的结果才是BCD码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fn1638
2012-05-02
知道答主
回答量:49
采纳率:0%
帮助的人:39.9万
展开全部
只有BCD码相加才用
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式