; integer firstUnsortedIndex, testIndex, elementToInsert; ; for firstUnsortedIndex = 1 to (length-1) do ; testIndex = firstUnsortedIndex-1; ; elementToInsert = numbers[firstUnsortedIndex]; ; while (testIndex >=0) AND (numbers[testIndex] > elementToInsert ) do ; numbers[ testIndex + 1 ] = numbers[ testIndex ]; ; testIndex = testIndex - 1; ; end while ; numbers[ testIndex + 1 ] = elementToInsert; ; end for ; r0 is firstUnsortedIndex ; r1 is testIndex ; r2 is elementToInsert ; r3 is base-address of the array numbers ; r4 is (length-1) ; r5 holds value of NUMBERS[testIndex] AREA INSERTION_SORT, CODE, READONLY ENTRY FOR_INIT MOV r0, #1 LDR r4, LENGTH SUB r4, r4, #1 ADR r3, NUMBERS FOR_CMP CMP r0, r4 BGT END_FOR SUB r1, r0, #1 LDR r2, [r3, r0, LSL #2] WHILE CMP r1, #0 BLT END_WHILE LDR r5, [r3, r1, LSL #2] CMP r5, r2 BLE END_WHILE ADD r6, r1, #1 STR r5, [r3, r6, LSL #2] SUB r1, r1, #1 B WHILE END_WHILE ADD r6, r1, #1 STR r2, [r3, r6, LSL #2] ADD r0, r0, #1 B FOR_CMP END_FOR STOP B STOP AREA INSERTION_SORT, DATA, READWRITE ALIGN NUMBERS DCD 20, 30, 10, 40, 50, 60, 30, 25, 10, 5 LENGTH DCD 10 END