63 lines
728 B
ArmAsm
63 lines
728 B
ArmAsm
|
.text
|
||
|
.globl _printf
|
||
|
|
||
|
write = 4
|
||
|
|
||
|
_printf:
|
||
|
mov r2,-(sp)
|
||
|
mov r3,-(sp)
|
||
|
mov r4,-(sp)
|
||
|
mov sp,r3
|
||
|
mov $buff,r4
|
||
|
add $010,r3
|
||
|
mov (r3)+,r2
|
||
|
prloop:
|
||
|
movb (r2)+,r0
|
||
|
beq ready
|
||
|
cmpb r0,$045
|
||
|
bne 1f
|
||
|
movb (r2)+,r0
|
||
|
cmpb r0,$0144
|
||
|
beq 2f
|
||
|
cmpb r0,$0163
|
||
|
beq 3f
|
||
|
1: movb r0,(r4)+
|
||
|
br prloop
|
||
|
2: mov (r3)+,r1
|
||
|
bge 4f
|
||
|
movb $055,(r4)+
|
||
|
neg r1
|
||
|
4: jsr pc,printn
|
||
|
br prloop
|
||
|
printn:
|
||
|
clr r0
|
||
|
div $010,r0
|
||
|
beq 5f
|
||
|
mov r1,-(sp)
|
||
|
mov r0,r1
|
||
|
jsr pc,printn
|
||
|
mov (sp)+,r1
|
||
|
5: add $060,r1
|
||
|
movb r1,(r4)+
|
||
|
rts pc
|
||
|
3: mov (r3)+,r1
|
||
|
7: movb (r1)+,r0
|
||
|
bne 6f
|
||
|
br prloop
|
||
|
6: movb r0,(r4)+
|
||
|
br 7b
|
||
|
ready:
|
||
|
movb r0,(r4)+
|
||
|
sub $buff,r4
|
||
|
mov $01,r0
|
||
|
mov $buff,9f
|
||
|
mov r4,9f+2
|
||
|
sys write
|
||
|
9: 0; 0
|
||
|
mov (sp)+,r4
|
||
|
mov (sp)+,r3
|
||
|
mov (sp)+,r2
|
||
|
rts pc
|
||
|
.data
|
||
|
buff: .=.+256.
|