;            File: e20-palindromo.ed.txt
;
;          Autore: Roberto FULIGNI
;
; Ultima modifica: 19/10/2024
;
;     Descrizione: Scrivere un programma per il simulatore che controlli se un vettore
;                  di d elementi è palindromo (ovvero se letto da destra a sinistra o
;                  viceversa fornisce sempre la stessa sequenza di valori). Sia d
;                  memorizzato nella locazione 109 della RAM e il vettore memorizzato
;                  a partire dalla locazione 110. Si inserisca nella locazione 100 il
;                  valore 1 o 0 a seconda che quanto richiesto sia vero o meno.
;
;    MEMORIA RAM (DATA)
;    Variabile    Indirizzo    Valore  
;    --------------------------------
;      ris           100:         ?  (soluzione: 1)
;      i             101:
;      j             102:
;      a             103:
;      b             104:
;      d             109:         5
;      v             110:        22
;                    111:        33
;                    112:        44
;                    113:        33
;                    114:        22
;

SET A #0          
STO 101           ; i = 0

LOD R0 109        
SET R1 #1
SUB
STO 102           ; j = d - 1

SET R0 #0
SET R1 #1
ADD
STO 100           ; ris = 1


; controllo del ciclo: se i > j allora salta alla fine del programma

ciclo:
LOD R0 101
LOD R1 102
SUB
JMG fine

; Memorizzazione dell'indice i in IX (i è già presente in R0)
SET R1 #0         
ADD
MOV IX            ; Sposta i da A a IX
LOD R0 @110       ; Carica l'elemento di v il cui indice è contenuto in IX
ADD
STO 103           ; a = v[i]

; Memorizzazione dell'indice j in IX
LOD R0 102
ADD
MOV IX
LOD R0 @110
ADD
STO 104           ; b = v[j]

; confronto tra a e b
LOD R0 103
LOD R1 104
SUB
JMZ aggiorna
; se a <> b, il vettore non è palindromo, si imposta ris = 0 e si termina il programma
SET A #0
STO 100
JMP fine

aggiorna:
LOD R0 101
SET R1 #1
ADD
STO 101           ; i = i + 1

LOD R0 102
SUB
STO 102           ; j = j - 1

JMP ciclo

fine:
HLT
