26 |
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
27 |
POSSIBILITY OF SUCH DAMAGE. */ |
POSSIBILITY OF SUCH DAMAGE. */ |
28 |
|
|
29 |
|
/* $Id$ */ |
30 |
|
|
31 |
/* |
/* |
32 |
utoa.S |
utoa.S |
33 |
|
|
68 |
mov r_lstr_lo, ZL ; save &string |
mov r_lstr_lo, ZL ; save &string |
69 |
mov r_lstr_hi, ZH |
mov r_lstr_hi, ZH |
70 |
cpi r_radix, 2 ; no radix < 2 |
cpi r_radix, 2 ; no radix < 2 |
71 |
brlt terminate |
brlt 99f |
72 |
cpi r_radix, 37 ; no radix > 36 |
cpi r_radix, 37 ; no radix > 36 |
73 |
brge terminate |
brge 99f |
74 |
divide_loop: |
1: |
75 |
mov r22, r_radix ; radix |
mov r22, r_radix ; radix |
76 |
clr r23 ; dividend in r25:r24, divisor in r23:r22 |
clr r23 ; dividend in r25:r24, divisor in r23:r22 |
77 |
XCALL _U(__udivmodhi4); quotient in r23:r22, remainder in r25:r24 |
XCALL _U(__udivmodhi4); quotient in r23:r22, remainder in r25:r24 |
79 |
; call-used but preserved: r18,r19,r20,r30,r31 |
; call-used but preserved: r18,r19,r20,r30,r31 |
80 |
subi r24, 0xd0 ; + '0' |
subi r24, 0xd0 ; + '0' |
81 |
cpi r24, 0x3a ; > '9' ? |
cpi r24, 0x3a ; > '9' ? |
82 |
brlt L_10 |
brlt 10f |
83 |
subi r24, 0xd9 ; + 'a' - 10 - '0' |
subi r24, 0xd9 ; + 'a' - 10 - '0' |
84 |
L_10: |
10: |
85 |
st Z+, r24 ; write char to string in reverse order! |
st Z+, r24 ; write char to string in reverse order! |
86 |
mov r_val_lo,r22 ; quotient -> dividend |
mov r_val_lo,r22 ; quotient -> dividend |
87 |
mov r_val_hi,r23 |
mov r_val_hi,r23 |
88 |
sbiw r_val_lo,0 ; value == 0 ? |
sbiw r_val_lo,0 ; value == 0 ? |
89 |
brne divide_loop |
brne 1b |
90 |
terminate: |
99: |
91 |
mov r_val_hi, r_lstr_hi ; restore &string as return value |
mov r_val_hi, r_lstr_hi ; restore &string as return value |
92 |
mov r_val_lo, r_lstr_lo |
mov r_val_lo, r_lstr_lo |
93 |
st Z, __zero_reg__ ; terminate string |
st Z, __zero_reg__ ; terminate string |