DA 调整指令我用错了吗?

[复制链接]
5354|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位中,进位与借位时出现非法码时,进行调节
mannerfh 发表于 2007-11-23 13:12 | 显示全部楼层

DA用法

DA是对BCD码来说的,因为BCD码只有0---9,10个数字,而在高低各四位中用4位的二进制能表示16个数,这说明其中有6个是多余的,在作BCD码的算术运算时会碰到时位,可能会出现超出0--9所以表示的数,这时就用到了DA指令,
ayb_ice 发表于 2007-11-23 15:34 | 显示全部楼层
 楼主| 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呢?我好困惑..........
沈老 发表于 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
airwill 发表于 2009-12-11 12:02 | 显示全部楼层
还有半字节进位的问题(如: 18h+19H) 时 会加 6
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部