| 62 |
|
|
| 63 |
|
|
| 64 |
_U(itoa): |
_U(itoa): |
| 65 |
mov ZL, r_str_lo ; &string |
X_movw ZL, r_str_lo ; &string |
| 66 |
mov ZH, r_str_hi |
X_movw r_lstr_lo, ZL ; save &string |
|
mov r_lstr_lo, ZL ; save &string |
|
|
mov r_lstr_hi, ZH |
|
| 67 |
clt ; make sure T flag is clear |
clt ; make sure T flag is clear |
| 68 |
cpi r_radix, 2 ; no radix < 2 |
cpi r_radix, 2 ; no radix < 2 |
| 69 |
brlt 99f ; return with \0 |
brlt 99f ; return with \0 |
| 88 |
subi r24, 0xd9 ; + 'a' - 10 - '0' |
subi r24, 0xd9 ; + 'a' - 10 - '0' |
| 89 |
10: |
10: |
| 90 |
st Z+, r24 ; write char to string in reverse order |
st Z+, r24 ; write char to string in reverse order |
| 91 |
mov r_val_lo, r22 ; quotient -> dividend |
X_movw r_val_lo, r22 ; quotient -> dividend |
|
mov r_val_hi, r23 |
|
| 92 |
sbiw r_val_lo, 0 ; value == 0 ? |
sbiw r_val_lo, 0 ; value == 0 ? |
| 93 |
brne 1b |
brne 1b |
| 94 |
brtc 99f ; T flag clear? -> positive number |
brtc 99f ; T flag clear? -> positive number |
| 95 |
ldi r21, '-' |
ldi r21, '-' |
| 96 |
st Z+, r21 ; write minus sign to string |
st Z+, r21 ; write minus sign to string |
| 97 |
99: |
99: |
|
mov r_val_hi, r_lstr_hi ; restore &string as return value |
|
|
mov r_val_lo, r_lstr_lo |
|
| 98 |
st Z, __zero_reg__ ; terminate string |
st Z, __zero_reg__ ; terminate string |
| 99 |
|
X_movw r_val_lo, r_lstr_lo ; restore &string as return value |
| 100 |
XJMP _U(strrev) ; reverse string |
XJMP _U(strrev) ; reverse string |
| 101 |
|
|
| 102 |
.endfunc |
.endfunc |