汇编的八位无符号BCD数转换成二进制数的原代码
这是汇编的八位无符号BCD数转换成二进制数的原代码,欢迎使用。 转载时请标明作者和出处。
;=======================================================
============================ ; Translate a eight-bit BCD code to binary code ; BCDtoBIN: Main program(source data: BCDh,BCDl; destination data: BINh, BINl)
; Multiply: Subroutine of multiplied by 10 ; Designed by mmtcyq, 23/05/2007. ; All rights reserved.
;=======================================================
============================ ; Varia××es
org 0200h ; as the case may be varia××e
BCDh DW 00000h ; BCD code, high word BCDl DW 00000h ; BCD code, low word BINh DW 00000h ; BIN code, high word BINl DW 00000h ; BCD code, low word Multenh DW 00000h ; Multiplier, high word Multenl DW 00000h ; Multiplier, low word ;=======================================================
============================ ; Program
org 08000h ; as the case may be varia××e
BCDtoBIN push R5 ; BCD digit pointer
push R6 ; Content of the digit
push R7 ; Temporary counter
push R8 ; Temporary varia××e
mov #00001h,R5
clr BINh
clr BINl
clr Multenh
mov BCDl,R6
mov R6,R8
BtBmainloop cmp #00009h,R5
jc BtBend
cmp #00005h,R5
jz BtBBCDhighword
cmp #00006h,R5
jc BtBBCDhighword1
bic #0fff0h,R8
jmp BtBmulstart
BtBBCDhighword mov BCDh,R6
mov R6,R8
BtBBCDhighword1 bic #0fff0h,R8
BtBmulstart mov R5,R7 mov R8,Multenl
clr Multenh
BtBmultimeloop cmp #00001h,R7
jz BtBupdateonedigit call #Multiply ; MultenhMultenl * 10
dec R7
jmp BtBmultimeloop BtBupdateonedigit add Multenl,BINl
adc BINh
add Multenh,BINh
inc R5
clrc
rra R6
rra R6
rra R6
rra R6
mov R6,R8
jmp BtBmainloop
BtBend pop R8
pop R7
pop R6
pop R5
ret
;-----------------------------------------------------------------------------------
Multiply push R5 push R6
rla Multenl
rlc Multenh
mov Multenh,R6
mov Multenl,R5
rla R5
rlc R6
rla R5
rlc R6
add R5,Multenl
adc Multenh
add R6,Multenh
Multiplyend pop R6 pop R5
ret
;=======================================================
============================
Multenh DW 00000h ; Multiplier, high word
Multenl DW 00000h ; Multiplier, low word
这两个数值怎么取值啊?
这是Multiply函数的变量,对它的赋值是在Multiply函数中进行的。
其值被这样使用:
add Multenl,BINl
adc BINh
add Multenh,BINh
MMTCYA 你好,谢谢你的指点,但是我还是没搞懂,Multenh DW 00000h ; Multiplier, high word Multenl DW 00000h ; Multiplier, low word 这两个数值应该怎么取呢, 作用是什么呢, 谢谢~
这两个值是计算过程中用的中间变量,结果在BINh和BINl中。
以上代码在1.26B上通过。
BCDh和BCDl是入口数据,出口数据则是BINh和BINl。
将要转换的BCD码(最多八位)赋值给BCDh(高四位)和BCDl(低四位)。
;-----------------------------
mov #01234h,BCDh
mov #04567h,BCDl
call #BCDtoBIN
;-----------------------------
结果是:0BC614Eh。其中BINh=000bch,BINll=0614eh。
注:数据限定为无符号数。
MMTCYA 你好,谢谢你的指点,我今天晚上回去在调试一下您给我的程序,现在我想请问您一下,就是我用 BCD-BIN的转换是用在按键程序中的,我的按键程序是调几个数值,在调的时候BCD码是分开的,意思是假设我想调65535,但是要分开调,6,5,5,3,5,然后在合到一起65535,然后在变成二进制数,您说这个合到一起的过程应该怎么处理呢, 是6乘10000H,5乘1000H,5乘100H,3乘10H,然后在加到一起吗,如果是这样的话程序处理的过程就很长,影响速度,您能给指点一下吗, 有好的建议吗,
如果这些分开的数都是十进制的数,就先移位,后相加。
比如BCD_2 = 0x0001h,BCD_1 = 0x0002h,将这两个数相加,构成BCD数:
rla BCD_2
rla BCD_2
rla BCD_2
rla BCD_2
clrc
dadd BCD_1,BCD_2
结果是BCD_2 = 0x0012h
我的帐号是MMTCYQ
MMTCYQ 你好,多谢你的指点,豁然开朗,我还是书看的少,很多东西凭想象是不行的~
你的程序中这段Varia××es
org 0200h ; as the case may be varia××e
BCDh DW 00000h ; BCD code, high word BCDl DW 00000h ; BCD code, low word BINh DW 00000h ; BIN code, high word BINl DW 00000h ; BCD code, low word Multenh DW 00000h ; Multiplier, high word Multenl DW 00000h ; Multiplier, low word 是给变量一个地址或是附值一个数据(不知道我这样理解对不对),在3.41中这样做编译通不过,现在
很多书都是老书,都没有介绍在3。41A中如果想定义变量应该怎么做,郁闷中~
org 0200h:指定变量在RAM中的位置。
BCDh DW 00000h:定义变量BCDh,word类型(16位),初值为0。 3.41版本不熟悉。
本文档为【汇编的八位无符号BCD数转换成二进制数的原代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。