Implementing Sorting Algorithms in ARM Assembly
.text
.global _start
.global main
_start:
main:
LDR R0, =LIST // point to start of list
LDR R1, [R0] // load first value, which is the list length n
ADD R0, R0, #4 // point to first value in list
SUB R1, R1, #1 // use n-1
MOV R2, #0 // start at index 0
for1:
CMP R2, R1 // if i >= n-1, end sort
BGE END
MOV R3, R2 // min_index = i
ADD R4, R2, #1 // start at j = i+1
for2:
CMP R4, R1 // if j > n-1, end for2
BGT endfor2
LDR R5, [R0, R4, LSL #2] // load list[j]
LDR R6, [R0, R3, LSL #2] // load list[min_index]
CMP R5, R6 // if list[j] < list[min_index]
BGE next
MOV R3, R4 // min_index = j
next:
ADD R4, R4, #1 // j++
B for2 // repeat for2
endfor2:
LDR R5, [R0, R2, LSL #2] // load list[i]
LDR R6, [R0, R3, LSL #2] // load list[min_index]
STR R6, [R0, R2, LSL #2] // save swapped in list[i]
STR R5, [R0, R3, LSL #2] // save swapped in list[min_index]
ADD R2, R2, #1 // i++
B for1 // repeat for1
END:
B END
.data
LIST: .word 10 // list length
.word 43
.word 31
.word 12
.word 7
.word 42
.word 15
.word 8
.word 1
.word 4
.word 5