Packed BCD to 16 bit binary conversion
;*******************************************************************************
; Input: packed BCD in bcd2:bcd1:bcd0 (modified!)
; bcd0 = tens:ones
; bcd1 = thou:hund
; bcd2 = 0:tenk
; Output: 16 bit binary in hi:lo
;Temporary: counter
; Size: 23 instructions
; Timing: 3+2+16*(6+12+4)-2+3=358 instruction cycles
;
; Notes: The routine uses BCD division by 2. Each iteration
; the LSB of BCD value (which coincides with correspondent
; binary bit) is shifted to output and BCD value is
; divided by 2. To do the division, BCD is shifted right
; once and corrected. Correction: if MSB of a nibble is set,
; subtract 3 from it.
;
;January 22, 2001 by Nikolai Golovchenko
;*******************************************************************************
bcd2bin16
mov W, #16
mov counter, W
bcd2bin16loop
clc
rr bcd2
rr bcd1
rr bcd0
rr hi
rr lo
clr W
snb bcd0.3
or W, #$03
snb bcd0.7
or W, #$30
sub bcd0, W
clr W
snb bcd1.3
or W, #$03
snb bcd1.7
or W, #$30
sub bcd1, W
decsz counter
jmp bcd2bin16loop
ret
;*******************************************************************************
file: /Techref/scenix/lib/math/radix/bcd2bin16.htm, 1KB, , updated: 2004/6/10 13:40, local time: 2024/12/26 01:42,
owner: NG--944,
|
| ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions? <A HREF="http://linistepper.com/techref/scenix/lib/math/radix/bcd2bin16.htm"> Packed BCD to 16 bit binary conversion</A> |
Did you find what you needed?
|