首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

那位能讲讲16位二进制转BCD码的原理,小弟我有代码但看不懂

2012-03-13 
那位能讲讲16位二进制转BCD码的原理,我有代码但看不懂貌似这方面的代码都是这样,看了注释还是不懂,问了很

那位能讲讲16位二进制转BCD码的原理,我有代码但看不懂
貌似这方面的代码都是这样,看了注释还是不懂,问了很多同学都说不懂,很着急啊!请问具体的原理是怎么样的啊!小弟不才,请多指教。。。。。里面的左移什么的到底是干嘛,为什么乘以二?
双字节十六进制整数转换成双字节BCD码整数    
       
    入口条件:待转换的双字节十六进制整数在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              


[解决办法]
16位数每循环左移出一位,进位加使16位数中的1就加到BCD寄存器,移下一位,相应的BCD数跟着左移一位(自加或乘的作用).以上经过16次循环就把R6R7中的16位数搬到BCD寄存器,但其间经过了十进制调整,结果就是BCD数了.
[解决办法]
其實轉換后的BCD碼只是我們視覺上顯示的BCD碼,在程序內部還是用十六進制數字表示的。例如,我們想轉換100h(256)即R6=01H,R7=00H這個十六進制數變成BCD碼,轉換出來的結果實際上是R3=00h,R4=02h,R5=56h,所以最后的數是不一樣的。

热点排行