-
Notifications
You must be signed in to change notification settings - Fork 8
Esempi svolti
MircoT edited this page Jan 11, 2022
·
3 revisions
ORG 100
LDA X
BSA CHK
INC
HLT
X, AND Y
Y, HEX 200
CHK, HEX 0
CIR
SNA
BUN CHK I
ADD X
BUN CHK I
END
| ORG 100 | Contenuto | |
|---|---|---|
| 100 | LDA X | |
| 101 | BSA CHK | |
| 102 | INC | |
| 103 | HLT | |
| 104 | X, AND Y | 0000 0001 0000 0101 |
| 105 | Y, HEX 200 | |
| 106 | CHK, HEX 0 | |
| 107 | CIR | |
| 108 | SNA | |
| 109 | BUN CHK I | |
| 10A | ADD X | |
| 10B | BUN CHK I | |
| END |
Soluzione esercizio 1 ❓
| Indirizzo | Contenuto di AC | Contenuto E | |
|---|---|---|---|
| 100 | Si carica in AC X, che ha il contenuto che vedete in tabella. Il contenuto è dato dall'operatore AND (OPR = 000, quindi dal secondo al quarto bit), dall'indirizzo Y (105 in hex, che va a formare la parte dal 5° al 16° bit) e da I (che non essendo presente mette a 0 il primo bit) |
0000 0001 0000 0101 0 | 0 |
| 101 | Si memorizza in CHK l'indirizzo di ritorno (che è l'istruzione successiva a quella attuale, puntata gia dal PC), cioè 102 e si passa all'indirizzo successivo a CHK, ovvero 107 (che verrà puntato dal PC, poiché sarà la prossima istruzione da eseguire) |
0000 0001 0000 0101 | 0 |
| 107 | Spostiamo verso destra i bit in E-AC | 0000 0000 1000 0010 | 1 |
| 108 | Controlliamo se AC è negativo. Visto che è falso, andiamo subito all'istruzione successiva, senza saltarla | 0000 0000 1000 0010 | 1 |
| 109 | Saltiamo all'indirizzo memorizzato in CHK (non in CHK, perché c'è I), ovvero 102 | 0000 0000 1000 0010 | 1 |
| 102 | Incrementiamo di 1 il contenuto di AC | 0000 0000 1000 0011 | 1 |
| 103 | Esecuzione completata, fermiamo la macchina | 0000 0000 1000 0011 | 1 |
ORG 100
LDA X
AND Y
BSA CHK
INC
HLT
X,AND Y
Y,HEX 200
CHK, HEX 0
CIL
SNA
BUN CHK I
AND X
BUN CHK I
END
| ORG 100 | Contenuto | |
|---|---|---|
| 100 | LDA X | |
| 101 | AND Y | |
| 102 | BSA CHK | |
| 103 | INC | |
| 104 | HLT | |
| 105 | X, AND Y | 0000 0001 0000 0110 |
| 106 | Y, HEX 200 | 0000 0010 0000 0000 |
| 107 | CHK, HEX 0 | |
| 108 | CIL | |
| 109 | SNA | |
| 10A | BUN CHK I | |
| 10B | ADD X | |
| 10C | BUN CHK I | |
| END |
Soluzione esercizio 2 ❓
| Indirizzo | Contenuto di AC | Contenuto E | |
|---|---|---|---|
| 100 | Si carica in AC X, che ha il contenuto che vedete in tabella. | 0000 0001 0000 0110 | 0 |
| 101 | Si fa un AND tra AC ed il contenuto di Y | 0000 0000 0000 0000 | 0 |
| 102 | Si memorizza in CHK l'indirizzo di ritorno (che è l'istruzione successiva a quella attuale, puntata gia dal PC), cioè 103 e si passa all'indirizzo successivo a CHK, ovvero 108(che verrà puntato dal PC, poiché sarà la prossima istruzione da eseguire) |
0000 0000 0000 0000 | 0 |
| 108 | Spostiamo verso sinistra i bit in E-AC | 0000 0000 0000 0000 | 0 |
| 109 | Controlliamo se AC è negativo. Visto che è falso, andiamo subito all'istruzione successiva, senza saltarla | 0000 0000 0000 0000 | 0 |
| 10A | Saltiamo all'indirizzo memorizzato in CHK (non in CHK, perché c'è I), ovvero 103 | 0000 0000 0000 0000 | 0 |
| 103 | Incrementiamo di 1 il contenuto di AC | 0000 0000 0000 0001 | 0 |
| 104 | Esecuzione completata, fermiamo la macchina | 0000 0000 0000 0001 | 0 |
ORG 100
LDA 104
BUN 104
DEC 104
DEC 258
ADD 103 I
CLE
ADD 102
HLT
END
| ORG 100 | Contenuto | |
|---|---|---|
| 100 | LDA 104 | |
| 101 | BUN 104 | |
| 102 | DEC 104 | 0000 0000 0110 1000 |
| 103 | DEC 258 | 0000 0001 0000 0010 |
| 104 | ADD 103 I | 1001 0001 0000 0011 |
| 105 | CLE | |
| 106 | ADD 102 | |
| 107 | HLT | |
| END |
Soluzione esercizio 3 ❓
| Indirizzo | Contenuto di AC | Contenuto E | |
|---|---|---|---|
| 100 | Carichiamo il contenuto della cella 104 in AC | 1001 0001 0000 0011 | 0 |
| 101 | Saltiamo all'indirizzo 104 | 1001 0001 0000 0011 | 0 |
| 104 | Sommiamo ad AC il contenuto della cella con indirizzo di memoria contenuto in 103. Quindi AC + il contenuto della cella 102, visto che DEC 258 = HEX 0102. |
1001 0001 0110 1011 | 0 |
| 105 | Cancelliamo il contenuto di E | 1001 0001 0110 1011 | 0 |
| 106 | Sommiamo ad AC il contenuto della cella 102 | 1001 0001 1101 0011 | 0 |
| 107 | Esecuzione completata, fermiamo la macchina | 1001 0001 1101 0011 | 0 |
ORG 100
LDA 104
BUN 104
DEC 104
DEC 258
ADD 103 I
CLE
ADD 103
HLT
END
| ORG 100 | Contenuto | |
|---|---|---|
| 100 | LDA 104 | |
| 101 | BUN 104 | |
| 102 | DEC 104 | 0000 0000 0110 1000 |
| 103 | DEC 258 | 0000 0001 0000 0010 |
| 104 | ADD 103 I | 1001 0001 0000 0011 |
| 105 | CLE | |
| 106 | ADD 103 | |
| 107 | HLT | |
| END |
Soluzione esercizio 4 ❓
| Indirizzo | Contenuto di AC | Contenuto E | |
|---|---|---|---|
| 100 | Carichiamo il contenuto della cella 104 in AC | 1001 0001 0000 0011 | 0 |
| 101 | Saltiamo all'indirizzo 104 | 1001 0001 0000 0011 | 0 |
| 104 | Sommiamo ad AC il contenuto della cella con indirizzo di memoria contenuto in 103. Quindi AC + il contenuto della cella 102, visto che DEC 258 = HEX 0102. |
1001 0001 0110 1011 | 0 |
| 105 | Cancelliamo il contenuto di E | 1001 0001 0110 1011 | 0 |
| 106 | Sommiamo ad AC il contenuto della cella 102 | 1001 0010 0110 1101 | 0 |
| 107 | Esecuzione completata, fermiamo la macchina | 1001 0010 0110 1101 | 0 |
ORG 100
LDA 106
BUN 104
X, DEC 100
Y, HEX 102
ADD X
CIR
STA Y I
HLT
END
| ORG 100 | Contenuto | |
|---|---|---|
| 100 | LDA 106 | |
| 101 | BUN 104 | |
| 102 | X, DEC 100 | 0000 0000 0110 0100 |
| 103 | Y, HEX 102 | |
| 104 | ADD X | |
| 105 | CIR | |
| 106 | STA Y I | 1011 0001 0000 0011 |
| 107 | HLT | |
| END |
Soluzione esercizio 5 ❓
| Indirizzo | Contenuto AC | Contenuto E | |
|---|---|---|---|
| 100 | Carichiamo il contenuto della cella 106 in AC | 1011 0001 0000 0011 | 0 |
| 101 | Saltiamo all'indirizzo 104 | 1011 0001 0000 0011 | 0 |
| 104 | Sommiamo il contenuto dell'indirizzo X con AC | 1011 0001 0110 0111 | 0 |
| 105 | Effettuiamo uno shift verso destra di E-AC | 0101 1000 1011 0011 | 1 |
| 106 | Salviamo il contenuto di AC nella cella il cui indirizzo è contenuto in Y, cioè la 102 (ovvero X) |
0101 1000 1011 0011 | 1 |
| 107 | Esecuzione completata, fermiamo la macchina | 0101 1000 1011 0011 | 1 |
ORG 100
LDA 106
BUN 104
X, DEC 400
Y, HEX 102
ADD X
CIL
STA Y I
HLT
END
| ORG 100 | Contenuto | |
|---|---|---|
| 100 | LDA 106 | |
| 101 | BUN 104 | |
| 102 | X, DEC 400 | 0000 0001 1001 0000 |
| 103 | Y, HEX 102 | |
| 104 | ADD X | |
| 105 | CIL | |
| 106 | STA Y I | 1011 0001 0000 0011 |
| 107 | HLT | |
| END |
Soluzione esercizio 6 ❓
| Indirizzo | Contenuto AC | Contenuto E | |
|---|---|---|---|
| 100 | Carichiamo il contenuto della cella 106 in AC | 1011 0001 0000 0011 | 0 |
| 101 | Saltiamo all'indirizzo 104 | 1011 0001 0000 0011 | 0 |
| 104 | Sommiamo il contenuto dell'indirizzo X con AC | 1011 0010 1001 0011 | 0 |
| 105 | Effettuiamo uno shift verso sinistra di E-AC | 0110 0101 0010 0110 | 1 |
| 106 | Salviamo il contenuto di AC nella cella il cui indirizzo è contenuto in Y, cioè l'indirizzo 102 (ovvero X) |
0110 0101 0010 0110 | 1 |
| 107 | Esecuzione completata, fermiamo la macchina | 0110 0101 0010 0110 | 1 |
ORG 880
LDA X
CMA
STA X
ISZ X
Y, STA 102
LDA Y
ADD X
CIR
STA X
X, DEC 0
HLT
END
| ORG 880 | Contenuto | |
|---|---|---|
| 880 | LDA X | |
| 881 | CMA | 0111 0010 0000 0000 |
| 882 | STA X | |
| 883 | ISZ X | |
| 884 | Y, STA 102 | 0011 0001 0000 0010 |
| 885 | LDA Y | |
| 886 | ADD X | |
| 887 | CIR | |
| 888 | STA X | |
| 889 | X, DEC 0 | 0000 0000 0000 0000 |
| 88A | HLT | |
| END |
Soluzione esercizio 7 ❓
| Indirizzo | Contenuto AC | Contenuto X | |
|---|---|---|---|
| 880 | Si carica X in AC | 0000 0000 0000 0000 | 0000 0000 0000 0000 |
| 881 | Si commuta logicamento il contenuto di AC (E non si tocca) | 1111 1111 1111 1111 | 0000 0000 0000 0000 |
| 882 | Si Memorizza il contenuto di AC in X | 1111 1111 1111 1111 | 1111 1111 1111 1111 |
| 883 | Si incrementa il contenuto di X e se uguale a 0, si salta l'istruzione successiva. | 1111 1111 1111 1111 | 0000 0000 0000 0000 |
| 885 | Si carica Y in AC | 0011 0001 0000 0010 | 0000 0000 0000 0000 |
| 886 | Si somma il contenuto di AC con X | 0011 0001 0000 0010 | 0000 0000 0000 0000 |
| 887 | Si shifta verso destra il contenuto di E-AC | 0001 1000 1000 0001 | 0000 0000 0000 0000 |
| 888 | Si memorizza il contenuto di AC in X | 0001 1000 1000 0001 | 0001 1000 1000 0001 |
| 889 | All'indirizzo X ora avremo il seguente comando : ADD 881, visto che il primo bit è 0, I non è presente. Il secondo e terzo bit sono uguali a 0 ed il quarto uguale ad 1, come il codice OPR dell'istruzione ADD. La parte restante forma l'indirizzo dell'operando. |
1000 1010 1000 0001 | 0001 1000 1000 0001 |
| 88A | Esecuzione completata, fermiamo la macchina | 1000 1010 1000 0001 | 0001 1000 1000 0001 |
ORG 205
CLA
CLE
ADD 20A
CIR
STA 20A
AND 418 I
BUN 205
HLT
END
| ORG 205 | Contenuto | |
|---|---|---|
| 205 | CLA | |
| 206 | CLE | |
| 207 | ADD 20A | |
| 208 | CIR | |
| 209 | STA 20A | |
| 20A | AND 418 I | 1000 0100 0001 1000 |
| 20B | BUN 205 | |
| 20C | HLT | |
| END |
Soluzione esercizio 8 ❓
| Indirizzo | Contenuto AC | Contenuto dell'indirizzo 20A | |
|---|---|---|---|
| 205 | Cancelliamo il contenuto di AC | 0000 0000 0000 0000 | 1000 0100 0001 1000 |
| 206 | Cancelliamo il contenuto di E | 0000 0000 0000 0000 | 1000 0100 0001 1000 |
| 207 | Sommiamo il contenuto di AC con quello dell'indirizzo 20A | 1000 0100 0001 1000 | 1000 0100 0001 1000 |
| 208 | Shiftiamo a destra il contenuto di E-AC | 0100 0010 0000 1100 | 1000 0100 0001 1000 |
| 209 | Memorizziamo il contenuto di AC all'indirizzo 20A | 0100 0010 0000 1100 | 0100 0010 0000 1100 |
| 20A | Il contenuto di questo indirizzo ora corrisponde al comando BUN 20C |
0100 0010 0000 1100 | 0100 0010 0000 1100 |
| 20C | Esecuzione completata, fermiamo la macchina | 0100 0010 0000 1100 | 0100 0010 0000 1100 |
ORG 100
LDA X
CMA
CME
CIR
CIR
CIL
STA X
ADD Y I
STA X
HLT
X, DEC -1
Y, -----
END
| Indirizzo | Contenuto binario | ORG 100 |
|---|---|---|
| 100 | 0010 0001 0000 1010 | LDA X |
| 101 | 0111 0010 0000 0000 | CMA |
| 102 | 0111 0001 0000 0000 | CME |
| 103 | 0111 0000 1000 0000 | CIR |
| 104 | 0111 0000 1000 0000 | CIR |
| 105 | 0111 0000 0100 0000 | CIL |
| 106 | 0011 0001 0000 1010 | STA X |
| 107 | 1001 0001 0000 1011 | ADD Y I |
| 108 | 0011 0001 0000 1010 | STA X |
| 109 | 0111 0000 0000 0001 | HLT |
| 10A | 1111 1111 1111 1111 | X |
| 10B | 0000 0001 0000 0101 | Y |
| END |
Soluzione esercizio 9 ❓
| Indirizzo | Contenuto E | Contenuto AC | Contenuto X | |
|---|---|---|---|---|
| 100 | Carichiamo X in AC | 0 | 1111 1111 1111 1111 | 1111 1111 1111 1111 |
| 101 | Commutiamo logicamente il contenuto di AC | 0 | 0000 0000 0000 0000 | 1111 1111 1111 1111 |
| 102 | Commutiamo logicamente il contenuto di E | 1 | 0000 0000 0000 0000 | 1111 1111 1111 1111 |
| 103 | Shiftiamo a destra il contenuto di E-AC | 0 | 1000 0000 0000 0000 | 1111 1111 1111 1111 |
| 104 | Shiftiamo a destra il contenuto di E-AC | 0 | 0100 0000 0000 0000 | 1111 1111 1111 1111 |
| 105 | Shiftiamo a sinistra il contenuto di E-AC | 0 | 1000 0000 0000 0000 | 1111 1111 1111 1111 |
| 106 | Memorizziamo il contenuto di AC in X | 0 | 1000 0000 0000 0000 | 1000 0000 0000 0000 |
| 107 | Y deve contenere l'indirizzo dell'operando da sommare con AC (visto che è presente I). L'unico candicato possibili per avere F040 da 8000 (valore attuale di X) è l'indirizzo 105. In AC, abbiamo già il contenuto di X. |
0 | 1111 0000 0100 0000 | 1000 0000 0000 0000 |
| 108 | Memorizziamo il contenuto di AC in X | 0 | 1111 0000 0100 0000 | 1111 0000 0100 0000 |
| 109 | Esecuzione completata, fermiamo la macchina | 0 | 1111 0000 0100 0000 | 1111 0000 0100 0000 |
| Contenuto dell'indirizzo 105, corrispondente all'istruzione CIL | 0111 0000 0100 0000 | + |
|---|---|---|
| Contenuto di X dopo l'esecuzione dell'istruzione all'indirizzo 106 | 1000 0000 0000 0000 | = |
| 1111 0000 0100 0000 |
ORG 100
Z,LDA X
CMA
STA X
ISZ X
Y,CLA
LDA Y
ADD X
CIR
STA X
X, DEC 0
LDA Z
HLT
END
| ORG 100 | Contenuto | |
|---|---|---|
| 100 | Z,LDA X | 0010 0001 0000 1001 |
| 101 | CMA | |
| 102 | STA X | |
| 103 | ISZ X | |
| 104 | Y,CLA | 0111 1000 0000 0000 |
| 105 | LDA Y | |
| 106 | ADD X | |
| 107 | CIR | |
| 108 | STA X | |
| 109 | X, DEC 0 | 0000 0000 0000 0000 |
| 10A | LDA Z | |
| 10B | HLT | |
| END |
Soluzione esercizio 10 ❓
| Indirizzo | Contenuto E | Contenuto AC | Contenuto X | |
|---|---|---|---|---|
| 100 | Carichiamo il contenuto di X in AC | 0 | 0000 0000 0000 0000 | 0000 0000 0000 0000 |
| 101 | Complementiamo logicamente AC | 0 | 1111 1111 1111 1111 | 0000 0000 0000 0000 |
| 102 | Memorizziamo AC in X | 0 | 1111 1111 1111 1111 | 1111 1111 1111 1111 |
| 103 | Incrementiamo X e controlliamo se è uguale a 0. Il controllo è positivo, quindi saltiamo la prossima istruzione. |
0 | 1111 1111 1111 1111 | 0000 0000 0000 0000 |
| 105 | Carichiamo il contenuto di Y in AC, che corrisponderà al comando CLA | 0 | 0111 1000 0000 0000 | 0000 0000 0000 0000 |
| 106 | Sommiamo il contenuto di AC con X | 0 | 0111 1000 0000 0000 | 0000 0000 0000 0000 |
| 107 | Effettuiamo uno shift a destra del contenuto di AC | 0 | 0011 1100 0000 0000 | 0000 0000 0000 0000 |
| 108 | Memorizziamo il contenuto di AC in X | 0 | 0011 1100 0000 0000 | 0011 1100 0000 0000 |
| 109 | Il contenuto di X ora, equivale al seguente comando : I = 0, quindi non è presente; OPR = 011 -> STA. Quindi STA C00. Memorizzeremo il contenuto attuale di AC nella cella indicata, anche se non sappiamo cosa contenga. |
0 | 0011 1100 0000 0000 | 0011 1100 0000 0000 |
| 10A | Carichiamo in AC il contenuto di Z | 0 | 0010 0001 0000 1001 | 0011 1100 0000 0000 |
| 10B | Esecuzione completata, fermiamo la macchina | 0 | 0010 0001 0000 1001 | 0011 1100 0000 0000 |