c语言二进制转bcd,二进制转十进制(BCD)码汇编算法(适用汇编初学者)
假若A是16位的二进制数字,转换的数学表达式如下:
A = 2^15+2^14+.....2^1+2^0
在转换的时候,待转换的数是16位(两字节),环路计数器是16次,最大的结果因有65535,所以至少要用2.5字节存结果,取整之后就是3个字节做结果储存。
转换要领如下:结果字节首先清零,
然后待转换字节与结果字节同时向左移,移出待转换字节的最高位,逢1结果翻一翻,见0结果原封不动,环路计数器减1,重复以上过程,直到环路计数器减到零。
注:在逢1结果翻一翻中还是加6修正,51中是有直接指令DA,但精简指令内核的MCU
都没有这条指令,因此处理上就完全不同,可以参考以下代码。看看是用了哪些技巧代替了DA指令。
-----对于单片机汇编算法的初学者,该如何把转换两字节改成转换多字节?-----
以下附上来自AVR stduio 自带的bin2 to BCD 例程。
;****************************************
;* "bin2BCD16" - 16-bit Binary to BCD conversion
;*
;* This subroutine converts a 16-bit number (fbinH:fbinL) to a 5-digit
;* packed BCD number represented by 3 bytes (tBCD2:tBCD1:tBCD0).
;* MSD of the 5-digit number is placed in the lowermost nibble of tBCD2.
;*
;* Number of words :25
;* Number of cycles :751/768 (Min/Max)
;* Low registers used :3 (tBCD0,tBCD1,tBCD2)
;* High registers used :4(fbinL,fbinH,cnt16a,tmp16a)
;* Pointers used :Z
;*
;***************************************************************************
;***** Subroutine Register Variables
.equ AtBCD0 =13 ;address of tBCD0
.equ AtBCD2 =15 ;address of tBCD1
.def tBCD0 =r13 ;BCD value digits 1 and 0
.def tBCD1 =r14 ;BCD value digits 3 and 2
.def tBCD2 =r15 ;BCD value digit 4
.def fbinL =r16 ;binary value Low byte
.def fbinH =r17 ;binary value High byte
.def cnt16a =r18 ;loop counter
.def tmp16a =r19 ;temporary value
;***** Code
bin2BCD16:
ldi cnt16a,16 ;Init loop counter
clr tBCD2 ;clear result (3 bytes)
clr tBCD1
clr tBCD0
clr ZH ;clear ZH (not needed for AT90Sxx0x)
bBCDx_1:lsl fbinL ;shift input value
rol fbinH ;through all bytes
rol tBCD0 ;
rol tBCD1
rol tBCD2
dec cnt16a ;decrement loop counter
brne bBCDx_2 ;if counter not zero
ret ; return
bBCDx_2: ldi r30, AtBCD2+1 ;Z points to result MSB + 1
bBCDx_3:
ld tmp16a,-Z ;get (Z) with pre-decrement
;----------------------------------------------------------------
;For AT90Sxx0x, substitute the above line with:
;
; dec ZL
; ld tmp16a,Z
;
;----------------------------------------------------------------
subi tmp16a,-$03 ;add 0x03
sbrc tmp16a,3 ;if bit 3 not clear
st Z,tmp16a ; store back
ld tmp16a,Z ;get (Z)
subi tmp16a,-$30 ;add 0x30
sbrc tmp16a,7 ;if bit 7 not clear
st Z,tmp16a ; store back
cpi ZL,AtBCD0 ;done all three?
brne bBCDx_3 ;loop again if not
rjmp bBCDx_1
c语言二进制转bcd,二进制转十进制(BCD)码汇编算法(适用汇编初学者)相关推荐
- 二进制转换为十进制c语言编程,将二进制IP地址转换成十进制(C语言程序实现)
将二进制IP地址转换成十进制(C语言程序实现) /* * Name: IP Address * Funcion: To convert binary numbers to decimal number ...
- bcd转十进制java_BCD码转十进制C语言实现
#include #include #define uchar unsigned char uchar BCD_Decimal(uchar bcd) ; int main(void) { uchar ...
- 计算机中十进制转二进制逻辑原理,.计算机中为什么要采用二进制?及二进制的基本运算规则,还有.二进制数据与十进制、八进制、十六进制数据之间的转换方法?...
满意答案 sqq212527 2013.04.11 采纳率:46% 等级:12 已帮助:10556人 编辑本段简介 20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,其运算模式正是 ...
- python十进制转换其他进制直到输入q结束,python二进制转换,python将十进制转为二进制,题目描述:输入一个整...
python二进制转换,python将十进制转为二进制,题目描述:输入一个整 题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 分析: python没有unsignedin ...
- 为什么二进制按权展开就是十进制?彻底搞懂原理
为什么二进制按权展开就是十进制?彻底搞懂原理 防盗声明 原文链接:https://blog.csdn.net/weixin_44331765/article/details/122337936 版权声 ...
- 二进制,八进制,十进制,十六进制转换算法
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 进制转换算法(Convert) (二.八.十六进制) → (十进制) 二进制 → 十进制 八进 ...
- 二进制转化为十进制和二进制转化为二进制
大家都知道我们平时生活中用的都是十进制,但是计算机使用二进制,那么二进制与十进制如何进行相互转化.下面我们来看一看. 我们以 -1 为例 十进制 1 的二进制是 0000 0001 大致算法如下: 1 ...
- 为什么二进制无法精确表达部分十进制的小数
小数可以想象为把1拆成10份,或者两份,就是十进制和二进制的差别. 比如 0.111(二进制)<0.9<0.1111(二进制) 1/3,十进制表示不出来,三进制为0.1
- int / uint 的 取值范围、二进制表示形式、与十进制转换方法
int / uint 类型 的取值范围: int8: -128 ~ 127 int16: -32768 ~ 32767 int32: -2147483648 ~ 2147483647 int64: - ...
最新文章
- 如何释放电脑被限制的20%网速?
- log4j2在spring中的配置
- 【Matlab 控制】矩阵、图像操作基础
- java高级工程师开放面试题集一
- Rethink Technology预测看好VVC
- java修饰类的关键字_JAVA中的修饰关键字
- 使用Spring WebFlux构建反应性REST API –第1部分
- 网页Request Headers请求头和Response Headers响应头
- 今天的弹指一瞬间的飞鸽传书
- SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...
- JAVA day27,28 线程池
- the difference between a material and an effect
- 201703-1-分蛋糕
- redis实现分布式锁代码片段
- 帆软JS鼠标悬停列标题高亮显示/改变选中行行高
- hudson构建配置
- iOS几款实用的工具类demo
- Ajax核心:XMLHTTP组件相关技术资料
- FreeFileSync 文件夹比较与同步软件
- 酒吧手机游戏java_酒吧里24种常见游戏的玩法
热门文章
- 日本首富——孙正义的传奇
- 华为鸿蒙布局发展大会,华为开发者大会:全球瞩目的“鸿蒙”面子和里子大格局...
- 游戏关键字070805
- java中equals的反义词_equals是什么意思_equals怎么读_equals翻译_用法_发音_词组_同反义词_同样的人( equal的名词复数 )-新东方在线英语词典...
- sql根据汉字内容自动产生拼音和五笔首字母
- java支票金额转换
- 五大券商研报:逢大跌买入这些股
- 单片机在微型计算机系统中的作用,单片机在智能仪器仪表中的应用
- Html+Css+js实现带有雪花飘落的许愿墙效果
- 哪些行业需要用到高防服务器