66 lines
832 B
ArmAsm
66 lines
832 B
ArmAsm
.extern f
|
|
|
|
.text
|
|
my_string:
|
|
.string "HELLO WORLD!\r\n\r\n"
|
|
.quad 0x00
|
|
.quad 0x5a
|
|
|
|
.align 4
|
|
.global _start
|
|
_start:
|
|
/* does nothing special */
|
|
mov r13, #0x8000
|
|
|
|
mov r1, #16
|
|
|
|
1:
|
|
ldr r0, =my_string
|
|
bl printk
|
|
sub r1, #1
|
|
cmp r1, #0
|
|
b 1b
|
|
|
|
lup:
|
|
b lup
|
|
|
|
|
|
.global printk
|
|
printk:
|
|
stmfd r13!, {r0, r1, r2, r3, r4, r14}
|
|
|
|
/* disable UART interrupts */
|
|
mov r2, #0x8004
|
|
movt r2, #0x01c2
|
|
|
|
ldr r1, [r2]
|
|
and r1, #0xfffffffc
|
|
str r1, [r2]
|
|
|
|
/* mask interrupts in CPU */
|
|
cpsid if
|
|
|
|
/* TBR */
|
|
mov r2, #0x8000
|
|
movt r2, #0x01c2
|
|
|
|
1:
|
|
ldr r1, [r0]
|
|
add r0, #4
|
|
|
|
mov r4, #4
|
|
2:
|
|
and r3, r1, #0xff
|
|
mov r1, r1, lsr#8
|
|
cmp r3, #0
|
|
beq 3f
|
|
str r3, [r2]
|
|
sub r4, #1
|
|
cmp r4, #0
|
|
bne 2b
|
|
b 1b
|
|
3:
|
|
|
|
ldmfd r13!, {r0, r1, r2, r3, r4, r15}
|
|
|