打印

DA 调整指令我用错了吗?

[复制链接]
4373|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lkkjob|  楼主 | 2007-11-23 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初学单片机,编了个验证DA 十进制调整的程序如下:
ORG    0030H
MAIN:    MOV    R1,#20H
    MOV    R2,#10H
    MOV    A,R1
    ADD    A,R2
    DA    A
    SJMP    $
    END
我想看到的结果应该是A里面为48(十进制的啊)吧,可结果怎么还是30(这不还是十六进制吗?),DA怎么不起作用啊,还是我理解错了?请各位大虾指点一下,谢谢大家了!

相关帖子

沙发
HWM| | 2007-11-23 12:10 | 只看该作者

那是用于BCD码的调整,非一般意义的十进制。

使用特权

评论回复
板凳
ldyeah| | 2007-11-23 12:30 | 只看该作者

都没有出现非法码,还调整什么啊?

DA指令是要在出现非法码出现时才有作用的嘛
你换个数,入48H和66H加
分别观察调整前的数据和调整后的数据就知道了~~~~

使用特权

评论回复
地板
ldyeah| | 2007-11-23 12:34 | 只看该作者

DA不是说把16进制变成10进制

而是BCD码中高4位和低4位中,进位与借位时出现非法码时,进行调节

使用特权

评论回复
5
mannerfh| | 2007-11-23 13:12 | 只看该作者

DA用法

DA是对BCD码来说的,因为BCD码只有0---9,10个数字,而在高低各四位中用4位的二进制能表示16个数,这说明其中有6个是多余的,在作BCD码的算术运算时会碰到时位,可能会出现超出0--9所以表示的数,这时就用到了DA指令,

使用特权

评论回复
6
ayb_ice| | 2007-11-23 15:34 | 只看该作者

BCD=?

使用特权

评论回复
7
lkkjob|  楼主 | 2007-11-23 16:44 | 只看该作者

怎么才能让十六进制数以十进制的形式显示呢?

在上面的问题中,
ORG    0030H
MAIN:    MOV    R1,#20H
    MOV    R2,#10H
    MOV    A,R1
    ADD    A,R2
    DA    A
    SJMP    $
    END
有没有办法让A中显示48呢?我好困惑..........

使用特权

评论回复
8
沈老| | 2007-11-23 20:49 | 只看该作者

Binary Coded Decimal

;All data should be considered as BCD coded.(Binary Coded Decimal).
ORG    0
    LJMP    Main
Main:
    MOV    R1,#56h;BCD=56
    MOV    R2,#18h;BCD=18
    MOV    A,R1
    ADD    A,R2;=6Eh    
    DA     A   ;=BCD 74        
    SJMP   $
END

使用特权

评论回复
9
airwill| | 2009-12-11 12:02 | 只看该作者
还有半字节进位的问题(如: 18h+19H) 时 会加 6

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

36

帖子

0

粉丝