92 lines
924 B
ArmAsm
92 lines
924 B
ArmAsm
/ C library-- floating output
|
|
|
|
.globl pfloat
|
|
.globl pscien
|
|
.globl fltused
|
|
|
|
.globl _ndigit
|
|
.globl ecvt
|
|
.globl fcvt
|
|
|
|
fltused: / force loading
|
|
pfloat:
|
|
mov r0,_ndigit
|
|
tst r2
|
|
bne 1f
|
|
mov $6,_ndigit
|
|
1:
|
|
movf (r4)+,fr0
|
|
jsr pc,fcvt
|
|
tst r1
|
|
beq 1f
|
|
movb $'-,(r3)+
|
|
1:
|
|
tst r2
|
|
bgt 1f
|
|
movb $'0,(r3)+
|
|
1:
|
|
mov r2,r1
|
|
ble 1f
|
|
2:
|
|
movb (r0)+,(r3)+
|
|
sob r1,2b
|
|
1:
|
|
mov _ndigit,r1
|
|
beq 1f
|
|
movb $'.,(r3)+
|
|
1:
|
|
neg r2
|
|
ble 1f
|
|
2:
|
|
dec r1
|
|
blt 1f
|
|
movb $'0,(r3)+
|
|
sob r2,2b
|
|
1:
|
|
tst r1
|
|
ble 2f
|
|
1:
|
|
movb (r0)+,(r3)+
|
|
sob r1,1b
|
|
2:
|
|
rts pc
|
|
|
|
pscien:
|
|
mov r0,_ndigit
|
|
tst r2
|
|
bne 1f
|
|
mov $6,_ndigit
|
|
1:
|
|
movf (r4)+,fr0
|
|
jsr pc,ecvt
|
|
tst r1
|
|
beq 1f
|
|
movb $'-,(r3)+
|
|
1:
|
|
movb (r0)+,(r3)+
|
|
movb $'.,(r3)+
|
|
mov _ndigit,r1
|
|
dec r1
|
|
ble 1f
|
|
2:
|
|
movb (r0)+,(r3)+
|
|
sob r1,2b
|
|
1:
|
|
movb $'e,(r3)+
|
|
dec r2
|
|
mov r2,r1
|
|
bge 1f
|
|
movb $'-,(r3)+
|
|
neg r1
|
|
br 2f
|
|
1:
|
|
movb $'+,(r3)+
|
|
2:
|
|
clr r0
|
|
div $10.,r0
|
|
add $'0,r0
|
|
movb r0,(r3)+
|
|
add $'0,r1
|
|
movb r1,(r3)+
|
|
rts pc
|