46 lines
685 B
ArmAsm
46 lines
685 B
ArmAsm
@ armv7
|
|
.data
|
|
msg: .asciz "Hello World!\n"
|
|
|
|
.text
|
|
.global _start
|
|
_start:
|
|
ldr r0,=msg
|
|
bl print
|
|
mov r0,#0x0
|
|
bl exit
|
|
|
|
exit: @ NORETURN void exit(int code)
|
|
@ code already in r0
|
|
mov r7,#0x1
|
|
svc #0x0
|
|
|
|
print: @ void print(const char *str)
|
|
stmdb sp!,{r0,lr}
|
|
|
|
@ msg already in r0
|
|
bl strlen
|
|
|
|
mov r2,r0 @ len
|
|
ldr r1,[sp] @ msg
|
|
mov r7,#0x4 @ SYS_write
|
|
mov r0,#1 @ FD_stdout
|
|
svc #0x0
|
|
|
|
ldmia sp!,{r0,lr}
|
|
bx lr
|
|
|
|
strlen: @ u32 strlen(const char *str)
|
|
stmdb sp!,{r0,lr}
|
|
strlen_loop:
|
|
ldrb r1,[r0]
|
|
cmp r1,#0
|
|
beq strlen_end
|
|
|
|
add r0,r0,#1
|
|
b strlen_loop
|
|
strlen_end:
|
|
ldmia sp!,{r1,lr}
|
|
sub r0,r0,r1
|
|
bx lr
|