.syntax unified .arm @ ---------------------------------------------------------------------- #define IP r12 #define FS r11 .macro next ldm IP!, {PC} .endm .macro .litstr data .word LITSTRING .word 2f-1f 1: .ascii "\data" 2: .align .endm .macro .lit w .word LIT .word \w .endm .macro .col w .word CODE .word \w .endm .macro .prim w .word \w .endm @ ---------------------------------------------------------------------- .text .global _start _start: ldr IP, =THREAD ldr FS, =STACK next LIT: ldm IP!, {r0} stmdb FS!, {r0} next LITSTRING: ldm IP!, {r0} mov r1, IP add IP, r0 @ align add IP, $3 bic IP, $3 stmdb FS!, {r0,r1} next TYPE: mov r0, $1 ldm FS!, {r2} ldm FS!, {r1} mov r7, $4 svc $0 next CODE: ldm IP!, {r0} push {IP} mov IP, r0 next EXIT: pop {IP} next STORE: ldm FS!, {r0,r1} str r1, [r0] next BYE: ldr r0, =EXIT_STATUS ldr r0, [r0] mov r7, $1 svc $0 @ ---------------------------------------------------------------------- .data .align THREAD: .col HELLO .col WORLD .col FAIL .prim BYE FAIL: .lit 66 .lit EXIT_STATUS .prim STORE .prim EXIT HELLO: .litstr "hello, " .prim TYPE .prim EXIT WORLD: .litstr "world\n" .prim TYPE .prim EXIT .bss EXIT_STATUS: .word 0 .fill 256, 4, 0 STACK: