Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 1.10 KB | None | 0 0
  1.     .text
  2.     .global main
  3.  
  4. main:
  5.     push {r4, r5, r6, r7, lr}
  6.  
  7.     mov r0, #0
  8.     mov r1, #32
  9.  
  10.     mov r6, #32 // size
  11.     mov r7, #32 // available size
  12.  
  13.     bl realloc
  14.  
  15.     mov r4, r0 // *values
  16.     mov r5, #0 // counter
  17.  
  18.     mov r3, r0 // current pointer
  19.  
  20. loop:
  21.     ldr r0, stdin_label
  22.     ldr r0, [r0]
  23.     bl fgetc
  24.  
  25.     cmp r0, #-1
  26.     beq print_reversed
  27.  
  28.     b add_char
  29.  
  30. end_loop:
  31.     mov r0, r3
  32.     bl free
  33.  
  34.     pop {r4, r5, r6, r7, lr}
  35.     bx lr
  36.  
  37. add_char:
  38.     str r0, [r3]
  39.  
  40.     add r3, #4 // update pointer
  41.     add r5, #1 // ++counter
  42.  
  43.     sub r7, #4
  44.     cmp r7, #0 // realloc
  45.     beq reallocate
  46.  
  47.     b loop
  48.  
  49. print_reversed:
  50.     sub r3, #4
  51.     sub r5, #1
  52.  
  53.     push {r3} // to save value in r3
  54.     ldr r0, [r3]
  55.     ldr r1, stdout_label
  56.     ldr r1, [r1]
  57.     bl fputc
  58.     pop {r3}
  59.  
  60.     cmp r5, #0
  61.     beq end_loop
  62.  
  63.     b print_reversed
  64.  
  65. reallocate:
  66.    
  67.     add r7, r6 // available_size = size
  68.     mov r1, #2
  69.     mul r6, r6, r1
  70.     mov r1, r6 // size *= 2
  71.    
  72.     mov r0, r4
  73.     bl realloc
  74.  
  75.     mov r4, r0 // update *values
  76.  
  77.     // update pointer
  78.     mov r1, r5
  79.     mov r2, #4
  80.     mul r1, r1, r2
  81.     add r1, r4
  82.     mov r3, r1
  83.    
  84.     b loop
  85.  
  86. stdin_label:
  87.     .word stdin
  88.  
  89. stdout_label:
  90.     .word stdout
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement