Guest User

Untitled

a guest
Oct 18th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. /*
  2. Bubble sort in ARM assembly
  3.  
  4. r0 data vector
  5. r1 size of data
  6.  
  7. r3 pointer
  8. r5 inner counter
  9. r6 outer counter
  10. r7 first element
  11. r8 second element
  12.  
  13. r9 leds on
  14. r10 leds off
  15. r11 LEDs address
  16.  
  17. */
  18. .section .data
  19. DataNum: .word 10
  20. SortData: .word 0x7FFFFFF1, 0x7FFFFFFF, 0x00000000, 0x80000000, 0x80000001, 0xA1234332, 0x20141020, 0x6FFFFFFF, 0xA1234320, 0x20141F20
  21.  
  22. .text
  23. .equ LEDs, 0xFF200000
  24. .equ leds_on, 0xFFFFFFFF
  25. .equ leds_off, 0x00000000
  26. .equ element_size, 4 @ 4 byte words
  27.  
  28. .global _start
  29. _start:
  30.  
  31. loadData:
  32. ldr r0, =SortData @ start of vector
  33. ldr r9, =DataNum
  34. ldr r1, [r9] @ r1 holds DataNum value
  35.  
  36.  
  37. leds:
  38. ldr r9, =leds_on
  39. ldr r10, =leds_off
  40. ldr r11, =LEDs
  41. str r10, [r11] @ turn off leds
  42.  
  43.  
  44. bubble:
  45. ldr r5,=1 @ inner counter
  46. ldr r6,=1 @ outer counter
  47.  
  48. mov r3, r0 @ initialize current pointer
  49.  
  50. OuterLoop:
  51. cmp r6, r1
  52. beq EndOuterLoop
  53.  
  54. InnerLoop:
  55. ldr r7, [r3], #element_size @ load one element
  56. ldr r8, [r3] @ load next one
  57. cmp r7, r8 @ compare them
  58. bge Swap @ branch if the first one is greater
  59.  
  60. sub r3, r3, #element_size @ reset pointer to the first element
  61. b CheckInnerLoopDone
  62.  
  63.  
  64. Swap:
  65. swp r8, r8, [r3] @ swap value in r8 with address in r4
  66. str r8, [r3, #element_size]! @ store new second element to incremented address
  67.  
  68. CheckInnerLoopDone:
  69. add r5, r5, #1 @ increment inner counter
  70. cmp r5, r1 @ check index variable
  71. bne InnerLoop
  72.  
  73. EndInnerLoop:
  74. cmp r6, r1 @ check index variable
  75. beq EndOuterLoop
  76.  
  77. ldr r5,=1 @ reset inner counter
  78. mov r3, r0 @ reset pointer
  79.  
  80. add r6, r6, #1 @ increment outer counter
  81. b OuterLoop @ start another iteration
  82.  
  83.  
  84. EndOuterLoop: str r9, [r11] @ turn on leds
  85.  
  86.  
  87. STOP: B STOP /*Branch unconditionally to STOP*/
  88.  
  89.  
  90. .end
Add Comment
Please, Sign In to add comment