Salve,Il seguente programma, prendendo in considerazione 2 array, verifica l' esistenza di almeno una coppia di elementi in cui non ci sia uno complementare dell' altro:
MOV R1 ,#O ;aggiorna gli OR in R1, posto inizialmente a zero
MOV R2 ,#O ;R2 = indice i del prodotto corrente: A AND B
MOV R3, [URL=http://www.tomshw.it/forum/usertag.php?do=list&action=hash&hash=4]#4 096[/URL] ;R3 = indice del primo valore da non considerare
CICLO: MOV R4,A(R2) ;R4 = A
AND R4,B(R2) ;R4 = A AND B
OR R1, R4 ;OR di tutti i prodotti booleani in R1
ADD R2, #4 ;i = i + 4 (passi di 1 parola = 4 byte alla volta)
CMP R2,R3 ;abbiamo già finito?
BLT CICLO ;se R2 < R 3 non abbiamo finito, quindi si continua
Quello che non ho capito è l' istruzione MOV R4, A(R2); non so se sposta in R4 l' indirizzo ottenuto dalla somma tra l' indirizzo di memoria A e l' indirizzo contenuto in R2, o sposta il contenuto in memoria, puntato da A(R2), nel registro R4. Ma la scelta più logica mi sembra la seconda dato che MOV non può acccedere alla memoria.
MOV R1 ,#O ;aggiorna gli OR in R1, posto inizialmente a zero
MOV R2 ,#O ;R2 = indice i del prodotto corrente: A AND B
MOV R3, [URL=http://www.tomshw.it/forum/usertag.php?do=list&action=hash&hash=4]#4 096[/URL] ;R3 = indice del primo valore da non considerare
CICLO: MOV R4,A(R2) ;R4 = A
AND R4,B(R2) ;R4 = A AND B
OR R1, R4 ;OR di tutti i prodotti booleani in R1
ADD R2, #4 ;i = i + 4 (passi di 1 parola = 4 byte alla volta)
CMP R2,R3 ;abbiamo già finito?
BLT CICLO ;se R2 < R 3 non abbiamo finito, quindi si continua
Quello che non ho capito è l' istruzione MOV R4, A(R2); non so se sposta in R4 l' indirizzo ottenuto dalla somma tra l' indirizzo di memoria A e l' indirizzo contenuto in R2, o sposta il contenuto in memoria, puntato da A(R2), nel registro R4. Ma la scelta più logica mi sembra la seconda dato che MOV non può acccedere alla memoria.