From d03cb64ac019cc1b767c2df599a7967b40893428 Mon Sep 17 00:00:00 2001 From: "aljazbrodar." Date: Sat, 15 Nov 2025 09:28:08 +0100 Subject: [PATCH] ch --- ass1/bonus/dijkstra.asm | 174 +++++++++++++++++++++++++++++++--------- 1 file changed, 137 insertions(+), 37 deletions(-) diff --git a/ass1/bonus/dijkstra.asm b/ass1/bonus/dijkstra.asm index 9078d5a..65cedfb 100644 --- a/ass1/bonus/dijkstra.asm +++ b/ass1/bonus/dijkstra.asm @@ -1,21 +1,23 @@ -DIJKSTRA START 0 +dijk START 0 .zacetna inicializacija, d=0 LDA #0 - STA RAZDALJE, START - STA PROV, START + LDX START + STA D, X + STA PROV, X .zacetno vozlisce nima predhodnika - LDA #-1 - STA PREV, START + LDA minus_ena + STA PREV, X .neskoncna while zanka -WHILE LDS #-1 . S = -1, hrani vozlisce ki imam min razdaljo v okolici +WHILE LDS minus_ena . S = -1, hrani vozlisce ki imam min razdaljo v okolici LDX #0 . stevec = 0 + FOR1 LDA PROV, X . nalozi potencialno razdaljo sosednjega vozlisca v okolici - CMP #-1 + COMP minus_ena JEQ NEXT . ce ze obiskano=-2 ali neobiskano=-1 preskoci vozlisce - CMP #-2 + COMP minus_dva JEQ NEXT RMO S, A . sicer S v A - CMP #-1 . ce S se ni nastavljen ga nastavi prvic + COMP minus_ena . ce S se ni nastavljen ga nastavi prvic JEQ SET STA old_X . sicer poglej ali ima trenutno vozl. manjso pot. razdaljo prov[X] < prov[S] LDA PROV, X . nalozi p. razdaljo tren. vozl. @@ -23,64 +25,162 @@ FOR1 LDA PROV, X . nalozi potencialno razdaljo sosednjega vozlisca v okol RMO S, X . premakni trenutni ix min. vozl. v X za ix naslavljanje LDA PROV, X . nalozi trenutno min razdaljo LDX old_X . obnovi X, vrednost stevca zanke FOR1 - COMPR A, T . primerjaj vrednosti tj. ce razdalja ni krajsa preskoci, sicer SET + COMPR T, A . primerjaj vrednosti tj. ce razdalja ni krajsa preskoci, sicer SET JEQ NEXT JGT NEXT SET RMO X, S . S nastavi na ix vozlisca - trenutna iteracija - -NEXT TIX INPUT_V - J FOR1 +NEXT RMO X, A + COMP table_len + ADD #3 + RMO A, X + JLT FOR1 + . ce ni vec vozlisc v okolici koncaj RMO S, A - CMP #-1 + COMP minus_ena JEQ HALT .sicer p. razdaljo shrani kot dejansko in oznaci vozlisce kot obiskano RMO S, X + LDA PROV, X STA D, X - LDA #-2 + LDA minus_dva STA PROV, X + .nato dodaj vozlisca v okolico oz. posodobi razdalje obstojecih vozlisc v okolici LDX #0 . stevec na 0 FOR2 LDA INPUT_X, X . preveri ali je to povezava ki izvira v vozl. S COMPR A, S JGT NEXT2 . ce ni preskoci JLT NEXT2 - .sicer preveri ali je vozlisce neobiskano + .sicer preveri ali je vozlisce ze obiskano LDA PROV, X - CMP #-1 - JGT NEXT2 - JLT NEXT2 + COMP minus_dva + JEQ NEXT2 + COMP minus_ena .se se ni obiskano, nastavi vrednost p. razdalje + JEQ SET2 + + RMO X, A STA old_X . zacasno zamenjaj vrednost X - LDX INPUT_Y, X - LDA D, X .nalozi D[Y] v A - RMO A, T .zacasno shrani v T + RMO S, X + LDA D, X . D[S] -> A + RMO A, T . zacasno shrani v T + LDX old_X + LDA INPUT_W, X + ADDR T, A . D[S] + w + RMO A, T . zacasno shrani v T + LDA PROV, X + COMPR A, T + JEQ NEXT2 + JGT NEXT2 +SET2 RMO X, A + STA old_X + RMO S, X + LDA D, X + RMO A, T + LDX old_X LDA INPUT_W, X ADDR T, A - STA prov, X . prov[Y] = D[S] + W - RMO A, X + STA PROV, X + RMO X, A + STA PREV, X +NEXT2 RMO A, X + COMP table_len + ADD #3 + JLT FOR2 - -NEXT2 TIX INPUT_V - J FOR2 - . J ZA WHILE?! + J WHILE + HALT J HALT - END DIJKSTRA + END dijk .vhodni parametri -INPUT_V = 9 -INPUT_E = 16 -INPUT_X RESW 100 -INPUT_Y RESW 100 -INPUT_W RESW 100 +INPUT_V WORD 9 +INPUT_E WORD 16 +INPUT_X WORD 0 + WORD 0 + WORD 1 + WORD 1 + WORD 2 + WORD 2 + WORD 3 + WORD 3 + WORD 3 + WORD 3 + WORD 3 + WORD 4 + WORD 4 + WORD 5 + WORD 6 + WORD 7 +INPUT_Y WORD 1 + WORD 2 + WORD 2 + WORD 3 + WORD 6 + WORD 3 + WORD 6 + WORD 8 + WORD 7 + WORD 5 + WORD 4 + WORD 1 + WORD 5 + WORD 7 + WORD 8 + WORD 8 +INPUT_W WORD 8 + WORD 12 + WORD 13 + WORD 25 + WORD 21 + WORD 14 + WORD 12 + WORD 16 + WORD 12 + WORD 8 + WORD 20 + WORD 9 + WORD 19 + WORD 11 + WORD 11 + WORD 9 .pomozne spremenljivke old_X RESW 1 +minus_ena WORD X'FFFFFF' +minus_dva WORD X'FFFFFE' .najkrajse razdalje -D RESW 9 +D WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 .prejsnje vozlisce -PREV RESW 9 +PREV WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 .provisional razdalje (okolica), -2 = done, -1 neobiskan -PROV RESW 9 +PROV WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 + WORD -1 +last_in EQU * +table_len EQU last_in - PROV .indeks zacetnega vozlisca START WORD 0