Changes

Jump to: navigation, search

Programming:Display a byte as a 3-digit decimal number

2,274 bytes added, 15:19, 12 March 2007
<pre>
;; A useful function to display a byte as a 3-digit decimal number

.txt_output equ &bb5a

;;-------------------------------------------
;; DISPLAY A BYTE AS A 3-DIGIT DECIMAL NUMBER
;;
;; Enter:
;; A = 8-bit value
;;
;; Exit:
;; AF,BC corrupt. All other registers preserved
;;
;; NOTE: A) The display routine works by the following procedure:
;;
;; 1) The 8-bit value is divided by 100 then 10 and finally 1 to obtain
;; each digit value. Therefore 983 would produce 9,8 and 3 as each
;; digit.
;; 2) The digit is converted into ASCII form, and displayed.
;; 3) The remainder of the division, is used for the next division.
;; i.e. 983 divided by 100, leaves 83 as the remainder. This is
;; divided by 10, to give 3 as the remainder.
;;
;; B) In the routine,
;;
;; B = divisor (100,10,1)
;; C = digit value
;; A = dividend (8-bit value)
;;

.print_decimal_byte
ld b,100 ;divisor to obtain 100's digit value
call print_decimal_digit ;display digit
ld b,10 ;divisor to obtain 10's digit value
call print_decimal_digit ;display digit
ld b,1 ;divisor to obtain 1's digit value

;;------------------------------------------------
;; B = divisor
;; A = dividend

.print_decimal_digit

;;-----------------------------------------------
;; simple division routine
ld c,0 ;zeroise result

.decimal_divide
sub b ;subtract divisor
jr c,display_decimal_digit ;if dividend is less than divisor, the division
;has finished.

inc c ;increment digit value
jr decimal_divide

.display_decimal_digit
add a,b ;add divisor because dividend was negative,
;leaving remainder.

;;--------------------------------------
;; A = dividend
;; C = result of division

;;--------------------------------------
;; digit is a number between 0..9
;; convert this into a ASCII character '0'..'9' then display this

push af
ld a,c ;get digit value
add a,"0" ;convert value into ASCII character
call txt_output ;display digit
pop af
ret
</pre>
12,273
edits