Difference between revisions of "Programming:Display a 8-bit number in hex"
From CPCWiki - THE Amstrad CPC encyclopedia!
(One intermediate revision by one other user not shown) | |||
Line 44: | Line 44: | ||
jp txt_output ;display digit | jp txt_output ;display digit | ||
</pre> | </pre> | ||
+ | |||
+ | The .print_byte_digit routine can be further optimised by devious use of DAA | ||
+ | |||
+ | <pre> | ||
+ | ;;------------------------------------------- | ||
+ | ;; display number in lower nibble (bits 3..0) | ||
+ | .print_byte_digit | ||
+ | and %00001111 ;isolate lower nibble. (This contains the digit value 0...15) | ||
+ | cp &a ;Less than 10? Set carry if so | ||
+ | sbc a,&69 | ||
+ | daa ;Because previous instruction was a subtract operation this | ||
+ | ;is known as 'das' in x86 | ||
+ | jp txt_output ;display digit | ||
+ | </pre> | ||
+ | |||
+ | [[Category:Programming]] |
Latest revision as of 10:24, 20 January 2015
From the The Unofficial Amstrad WWW Resource:
This routine uses Firmware
;; A procedure to display a 8-bit number in hex form ;; .txt_output equ &bb5a ;;---------------------------- ;; DISPLAY A BYTE IN HEX FORM ;; ;; Enter: ;; A = 8-bit value ;; ;; Exit: ;; AF corrupt, All other registers preserved .print_hex_byte push af ;store original byte value ;; move upper nibble into lower nibble rrca rrca rrca rrca ;; display nibble as ASCII call print_byte_digit pop af ;retrieve original byte value ;;------------------------------------------- ;; display number in lower nibble (bits 3..0) .print_byte_digit and %00001111 ;isolate lower nibble. (This contains the digit value 0...15) add a,"0" ;add ASCII for 0. Digits 0...9 become "0"..."9", digits 10..15 ;become ":"...."A" cp "9"+1 jr c,number ;if number is in digit range 0...9, display digit add a,"A"-"9"-1 ;modify ASCII value so that digits in the range 10...15 ;;become "A"...."F" .number jp txt_output ;display digit
The .print_byte_digit routine can be further optimised by devious use of DAA
;;------------------------------------------- ;; display number in lower nibble (bits 3..0) .print_byte_digit and %00001111 ;isolate lower nibble. (This contains the digit value 0...15) cp &a ;Less than 10? Set carry if so sbc a,&69 daa ;Because previous instruction was a subtract operation this ;is known as 'das' in x86 jp txt_output ;display digit