51单片机(汇编语言)实现十进制转十六进制

这篇博客详细介绍了如何使用51单片机通过汇编语言将十进制数转换为十六进制数。任务原理涉及BCD码转二进制,通过两种方案实现,包括循环四位移位和带进位的乘法。方案一提供代码,并展示运行结果,方案二待分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

任务描述

DEC0 DEC1 DEC2 存放"十进制"数 eg:03 35 96
HEX0 HEX1存放十六进制数 eg:83 3C

任务原理

本质是BCD码转二进制
所谓的十进制 如“15”,对应的是 0x15H 这一个十六进制数,而0x15的十进制数为21,二进制为0001 0101(就是1 “和” 5)
在这里插入图片描述

所以,我们要做的是 把每一位十进制的BCD码提出来,附上相应的权重,结果本质为普通的二进制,表现为十六进制(这听起来很绕口)但是在keil里跑一下会更好理解(后面会结合代码分析)

方案Ⅰ

思路

循环—> (HEX*10)+TMP

1.从高位开始 提取“十进制”的每一位数(半个byte存一位)
2.带进位的循环
(进位:HEX1溢出的存进HEX0)
(循环:结果存回HEX1 HEX0中)

代码

40H 41H 42H 为DEC0 DEC1 DEC2
R1 R2 为 HEX0 HEX1

ORG		0000H
LJMP MAIN
ORG		0100H
LOOP:	MOV		A,R2
		MOV		B,#0AH		;DEC = 10
		MUL		AB
		MOV		R5,B		;JW
		MOV		R2,A
		
		MOV		A,R1
		MOV		B,#0AH		;DEC = 10
		MUL		AB
		ADD		A,R5		;+JW
		MOV		R1,A		;R1R2*10
;2BYTE + 1BYTE: R1R2 + R6
		MOV		A,R6
		ADDC	A,R2
		MOV		R2,A
		MOV		A,#00H
		ADDC	A,R1
		MO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值