Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .text
- .global main
- main:
- push {r4, r5, r6, r7, lr}
- mov r0, #0
- mov r1, #32
- mov r6, #32 // size
- mov r7, #32 // available size
- bl realloc
- mov r4, r0 // *values
- mov r5, #0 // counter
- mov r3, r0 // current pointer
- loop:
- ldr r0, stdin_label
- ldr r0, [r0]
- bl fgetc
- cmp r0, #-1
- beq print_reversed
- b add_char
- end_loop:
- mov r0, r3
- bl free
- pop {r4, r5, r6, r7, lr}
- bx lr
- add_char:
- str r0, [r3]
- add r3, #4 // update pointer
- add r5, #1 // ++counter
- sub r7, #4
- cmp r7, #0 // realloc
- beq reallocate
- b loop
- print_reversed:
- sub r3, #4
- sub r5, #1
- push {r3} // to save value in r3
- ldr r0, [r3]
- ldr r1, stdout_label
- ldr r1, [r1]
- bl fputc
- pop {r3}
- cmp r5, #0
- beq end_loop
- b print_reversed
- reallocate:
- add r7, r6 // available_size = size
- mov r1, #2
- mul r6, r6, r1
- mov r1, r6 // size *= 2
- mov r0, r4
- bl realloc
- mov r4, r0 // update *values
- // update pointer
- mov r1, r5
- mov r2, #4
- mul r1, r1, r2
- add r1, r4
- mov r3, r1
- b loop
- stdin_label:
- .word stdin
- stdout_label:
- .word stdout
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement