找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3441|回复: 2
打印 上一主题 下一主题
收起左侧

4位16进制数转换为10进制数(8421BCD)求思路

[复制链接]
跳转到指定楼层
楼主
如题,在做一道十进制1+2+3+4+……+100的单片机汇编题目,最后要求结果转换为BCD码形式,也就是输出为5050。
我现在是高位低位分开存,利用进位标志符来做的累加(ADDC),最后得到了十六进制输出13BA。现在遇到的问题是,高位和低位是分开的,怎么转换为BCD呢?
我尝试了下直接在累加过程中对高位和低位分别使用DA A进行BCD修正,结果不对。希望有大佬能够提供下思路!!感谢!
下面是我用keil写的汇编代码,提供参考。

111111.png (316.63 KB, 下载次数: 33)

汇编代码截图

汇编代码截图
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:235200 发表于 2020-3-30 18:30 | 只看该作者
入口条件:待转换的双字节十六进制整数在R6、R7中。
出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
影响资源:PSW、A、R2~R7 堆栈需求: 2字节
HB2: CLR A ;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;转换双字节十六进制整数
HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;处理完16bit
RET
回复

使用道具 举报

板凳
ID:401564 发表于 2020-3-30 20:44 | 只看该作者
不知道是谁想出来的扯蛋题目
用汇编去转换BCD码干嘛呢?完成运算之后,拆分出来直接显示不就可以了吗?
你这个加法是超过了256的,要用两个地址来存放一个16进制数的
一个16进制数最大数是:65535
在进行BCD码运算中,你要用到三个地址的,结果应该是005050才是,而不是5050
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表