Esercizio assembler simcpu

luaneddra1989
Salve a tutti , potete spiegarmi il funzionamento del programma di questo esercizio?
Prima vi posto il testo e poi la soluzione…
Quello che non capisco è proprio questo… nella sub ovvero nella sottrazione , cosa sta sottraendo il programma?

Creare un programma in assembler per cifrare, mediante sostituzione delle lettere, una stringa s1.

La stringa s1 è una sequenza di caratteri alfabetici maiuscoli ASCII terminata dal carattere “\0” e memorizzata a partire dalla locazione 0100.

Il programma per la cifratura deve sostituire, seguendo opportune regole, ogni carattere della stringa s1 con un altro carattere memorizzato all’interno di un vettore chiave. Il vettore chiave è formato da 26 celle consecutive ed è contenuto in memoria a partire dalla locazione 0800.

La regola da seguire nella sostituzione deve: i) individuare la posizione occupata nell’alfabeto dalla lettera in esame della stringa s1; ii) sostituire il carattere di s1 con l’elemento del vettore chiave che occupa, nel vettore, la stessa posizione. Quindi, se la lettera di s1 è A, occorre sostituirla con il primo elemento del vettore chiave; se è B, occorre sostituirla con il secondo elemento del vettore, e così via.

Si ricorda che nella codifica ASCII le lettere maiuscole sono tutte consecutive e seguono l’alfabeto inglese. Inoltre, alla lettera A corrisponde 65 in decimale e 41 in esadecimale, alla lettera B corrisponde 66 in decimale e 42 in esadecimale e così via.

Soluzione
START: LDWI R0 0100
LDWI R1 0800
LDBI R2 41
LOOP: LDBR R3 R0
JMPZ END
SUB R2 R3
ADD R1 R3
LDBR R4 R3
STBR R4 R0
INC R0
JMP LOOP
END: HLT

Risposte
apatriarca
In pratica carica i diversi indirizzi e costanti in diversi registri. A quel punto fa un ciclo a partire da 0100 dal cui esce se il valore alla posizione corrente è nulla. All'interno del ciclo sottrae 65 al valore ASCII e quindi gli somma 0800 per ottenere il valore che andrà scritto in base alla tabella. Alla fine scrive sto valore nella posizione corretta nella stringa e incrementa la posizione presa in considerazione.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.