Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @ writeStrDriver3.s
- @ define system
- .cpu cortex-a53
- .fpu neon-fp-armv8
- .syntax unified
- @ constants
- .equ STDOUT, 1
- .equ NEWLINE, 10
- @ program
- .text
- .align 2
- .global main
- .type main, %function
- main: @ variables:
- @ string buffer size
- @ string address
- @ newline address
- @ string size
- push { r4, r5, r6, r7, lr } @ save registers
- mov r4, 4 @ r4 = string buffer size
- mov r0, 8 @ get number of bytes for local vars
- sub sp, sp, r0 @ allocate memory
- sub r1, r0, r4 @ get string address offset from sp
- add r5, sp, r1 @ r5 = string address
- sub r6, r5, 1 @ r6 = newline address
- mov r7, 0 @ r7 = string size
- mov r0, r4 @ pass string buffer size argument
- mov r1, r5 @ pass string address argument
- bl readLn @ execute readLn
- mov r7, r0 @ get string size
- mov r0, r7 @ pass string size argument
- mov r1, r5 @ pass string address argument
- bl writeStr @ execute writeStr
- mov r0, NEWLINE @ load newline character
- strb r0, [r6] @ store newline at newline address
- mov r0, STDOUT @ pass output argument
- mov r1, r6 @ pass address argument
- mov r2, 1 @ pass size argument
- bl write @ execute write
- mov r0, 0 @ return success
- add sp, sp, 8 @ deallocate memory
- pop { r4, r5, r6, r7, pc } @ restore registers
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement