66 lines
No EOL
1.1 KiB
NASM
66 lines
No EOL
1.1 KiB
NASM
.program prebere iz spomina seznam števil dolžine len
|
|
.in jih uredi z insertion sortom
|
|
.pustimo prvi element paddan, da lažje rečunamo premike
|
|
prog START 0
|
|
LDX #6
|
|
|
|
loop LDB #len
|
|
COMPR X, B .i < len
|
|
JEQ halt .zaključi
|
|
|
|
LDA arr, X .A = arr[i]
|
|
RMO X, S .S <- i
|
|
LDT #3 .T <- 3
|
|
SUBR T, X .X <- j= i - 1
|
|
|
|
loop2 LDT #3
|
|
COMPR X, T .j >= 1
|
|
JLT insert .ko je j = 0 skoči
|
|
J next .skoči na preverjanje naslednjega pogoja
|
|
|
|
.shranimo S nazaj v X in ga zmanjšamo za ena
|
|
.nato skočimo nazaj v loop
|
|
exit2 RMO S, X .X <- i
|
|
LDT #3
|
|
ADDR T, X .X <- i + 1
|
|
J loop
|
|
|
|
next LDB arr, X
|
|
COMPR B, A .arr[j] > arr[i]
|
|
JGT swap
|
|
J insert .če pogoj ni izpolnjen
|
|
|
|
.sicer zamenjamo elementa
|
|
swap LDT #3
|
|
ADDR T, X .X <- j + 1
|
|
STB arr, X. arr[j+1] = arr[j]
|
|
|
|
LDT #6
|
|
SUBR T, X .x <- x-1
|
|
J loop2
|
|
|
|
insert LDT #3
|
|
ADDR T, X .j = j+1
|
|
STA arr, X .arr[j+1] = arr[i]
|
|
SUBR T, X .j = j
|
|
J exit2
|
|
|
|
halt J halt
|
|
|
|
arr WORD 0
|
|
WORD 5
|
|
WORD 3
|
|
WORD 8
|
|
WORD 1
|
|
WORD 4
|
|
WORD 7
|
|
WORD 2
|
|
WORD 9
|
|
arrEnd WORD 6
|
|
|
|
len EQU arrEnd - arr + 3
|
|
|
|
|
|
|
|
|
|
END prog |