Hi, I am tasked with writing selection sort in assembly. We are writing for the ARM processor.

Currently, this is what I have:

sort2:
 73     stmdb    sp!, {v1-v5, lr}          @ Copy registers to stack
 74     ldrb     r5, [a2]                  @ J = n
 75     
 76     ldrb     v2, [a1]
 77     cmp      a2, #1
 78     beq      skip_sorting
 79 
 80     sub     r5, r5, #1              @ j = N-1
 81 outer_loop:
 82     cmp      r5, #0                 @ j > 0 add j-- at the bottom
 83     beq      skip_sorting
 84     
 85 inner_loop:
 86     mov     r6, r5                  @ k = j
 87     sub     r6, r6, #1              @ k = j-1
 88     cmp     r6, #-1                 @k >= 0
 89     b       outer_loop
 90     cmp
 91 
 92 
 93 
 94 skip_sorting:
 95     ldmia    sp!, {v1-v5, pc}          @ Copy stack back into registers

where I am following the prototype of:

59    for (j=N-1; j>0; j=j-1 {
 60      for (k=j-1; k >= 0; k=k-1 {
 61        if (list[k] > list[j]) {
 62          tmp = list[k];
 63          list[k]= list[j];
 64          list[j] = tmp;
 65        }
 66      }
 67    }

a1 is a pointer to the byte array of Length N
a2 the value of N

I felt pretty slick up until line 61 of the prototype c code, but then I realized I know absolutely nothing about asm and should ask for help.

if a1 is a pointer to the byte array, how do I access array[n], array[n+1]? Is my offset dependent on the platform we are running, or is this layer hidden from the programmer?

Any help is much appreciated.