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 |
ultoa.S |
ultoa.S |
33 |
|
|
70 |
push ZH ; keep &string |
push ZH ; keep &string |
71 |
push ZL |
push ZL |
72 |
cpi a_radix, 2 ; no radix < 2 |
cpi a_radix, 2 ; no radix < 2 |
73 |
brlt conv_finished ; return with \0 |
brlt 99f ; return with \0 |
74 |
cpi a_radix, 37 ; no radix > 36 |
cpi a_radix, 37 ; no radix > 36 |
75 |
brge conv_finished ; return with \0 |
brge 99f ; return with \0 |
76 |
mov r_radix, a_radix; save radix |
mov r_radix, a_radix; save radix |
77 |
divide_loop: |
1: |
78 |
mov r18, r_radix ; radix is divisor |
mov r18, r_radix ; radix is divisor |
79 |
clr r19 ; remainder of number is dividend |
clr r19 ; remainder of number is dividend |
80 |
clr r20 |
clr r20 |
86 |
pop ZH |
pop ZH |
87 |
subi r22, 0xd0 ; + '0' |
subi r22, 0xd0 ; + '0' |
88 |
cpi r22, 0x3a ; > '9' ? |
cpi r22, 0x3a ; > '9' ? |
89 |
brlt L_10 |
brlt 10f |
90 |
subi r22, 0xd9 ; + 'a' - 10 - '0' |
subi r22, 0xd9 ; + 'a' - 10 - '0' |
91 |
L_10: |
10: |
92 |
st Z+, r22 ; write character to string in reverse order! |
st Z+, r22 ; write character to string in reverse order! |
93 |
mov a_val_lo, r18 ; quotient -> dividend |
mov a_val_lo, r18 ; quotient -> dividend |
94 |
mov a_val_hi, r19 |
mov a_val_hi, r19 |
98 |
sbci a_val_hi, 0 |
sbci a_val_hi, 0 |
99 |
sbci a_val_hlo, 0 |
sbci a_val_hlo, 0 |
100 |
sbci a_val_hhi,0 ; value == 0 ? |
sbci a_val_hhi,0 ; value == 0 ? |
101 |
brne divide_loop |
brne 1b |
102 |
conv_finished: |
99: |
103 |
st Z, __zero_reg__ ; terminate string |
st Z, __zero_reg__ ; terminate string |
104 |
pop a_val_hlo ; restore &string as return value |
pop a_val_hlo ; restore &string as return value |
105 |
pop a_val_hhi |
pop a_val_hhi |