; ; UFRGS - INF - M Johann - 2023 - johann@inf.ufrgs.br ; Bubble sort - sorts a list of numbers from 80h specified on size ; ----- DATA org h80 ; First 32 numbers takes 13 min to sort in fast mode data: dab 39,113,89,42,2,72,88,126,67,77,24,85,12,98,51,71, dab 23,17,24,84,47,17,45,5,88,117,107,86,8,7,25,18, ; Additional 32 numbers run under 2 sec in dark mode dab 72,51,98,65,115,13,35,101,95,48,81,72,109,97,12,75, dab 2,53,57,1,4,56,20,34,28,52,90,103,42,74,101,72, ; dab 105,69,113,48,68,21,10,101,27,77,57,118,119,104,33,5, dab 83,126,109,37,85,115,89,100,91,122,108,67,81,98,32,46, dab 12,97,6,24,109,97,127,52,33,30,25,125,54,80,105,55, dab 1,15,67,58,30,15,64,44,68,85,122,72,43,80,73,50 org h7C databegin: db data datasize: db 32 dataend: db 0 ; Init to data+datasize temp: db 0 ; ----- BEGIN MAIN CODE org 0 init: LDR A,databegin ADD A,datasize STR A,dataend pass: LDR X,databegin ADD X,#1 ; index at second position LDR B,#1 ; begin pass, no swap done loop: LDR A,-1,X ; reads left value SUB A,0,X ; subtracts current JN next ; if second is larger, skip JZ next ; or if both equal, skip swap: ; if not, swap them LDR B,#0 ; mark that a swap was done LDR A,-1,X STR A, temp LDR A,0,X STR A,-1,X LDR A, temp STR A,0,X next: ADD X,#1 ; go to next postition SUB X,dataend JZ cont ; if last was FFh ADD X,dataend JMP loop cont: ADD B,#0 JZ pass finish: HLT ; END OF FILE