Difference between revisions of "Z80 Routines:Other:DispA"
From WikiTI
Line 64: | Line 64: | ||
pop de | pop de | ||
ret | ret | ||
− | |||
</nowiki> | </nowiki> | ||
===Comments=== | ===Comments=== | ||
− | This routine uses the common radix conversion algorithm of repeatedly dividing a value by the desired radix (base case: the value is zero) and saving the remainders of each division. | + | *This routine uses the common [[Wikipedia:Numeral_systems#Change_of_radix|positive-integer radix conversion algorithm]] of repeatedly dividing a value by the desired radix (base case: the value is zero) and saving the remainders of each division. |
+ | *As this algorithm gives the digits in reverse order, they are pushed onto the hardware stack so that subsequently popping them yields the correct order. | ||
+ | *Note that the output string will not be fixed-width. |
Revision as of 16:22, 3 April 2005
; ITOA ; -------------------------------------------------------------- ; Converts a signed integer value to a zero-terminated ASCII ; string representative of that value (using radix 10). ; -------------------------------------------------------------- ; INPUTS: ; HL Value to convert (two's complement integer). ; DE Base address of string destination. (pointer). ; -------------------------------------------------------------- ; OUTPUTS: ; None ; -------------------------------------------------------------- ; REGISTERS/MEMORY DESTROYED ; AF HL ; -------------------------------------------------------------- itoa: push de push bc ; Detect sign of HL. bit 7, h jr z, _DoConvert ; HL is negative. Output '-' to string and negate HL. ld a, '-' ld (de), a inc de ; Negate HL (using two's complement) xor a sub l ld l, a ld a, 0 ; Note that XOR A or SUB A would disturb CF sbc a, h ld h, a ; Convert HL to digit characters _DoConvert: ld b, 0 ; B will count character length of number - ld a, 10 call DivHLByA ; HL = HL / A, A = remainder push af inc b ld a, h or l jr nz, - ; Retrieve digits from stack - pop af or $30 ld (de), a inc de djnz - ; Terminate string with NULL xor a ld (de), a pop bc pop de ret
Comments
- This routine uses the common positive-integer radix conversion algorithm of repeatedly dividing a value by the desired radix (base case: the value is zero) and saving the remainders of each division.
- As this algorithm gives the digits in reverse order, they are pushed onto the hardware stack so that subsequently popping them yields the correct order.
- Note that the output string will not be fixed-width.