Parte II
AND 104 I, micro-operazioni c 0 t 0 : MAR PC c 0 t 1 : MBR M, PC PC+1 c 0 t 2 : OPR MBR(OP), I MBR(I) q 7 Ic 0 t 3 : R 1 Ciclo di fetch (q 7 +I )c 0 t 3 : F 1 c 1 t 0 : MAR MBR(AD); / 104 da Hex a Bin c 1 t 1 : MBR M; c 1 t 2 : Ciclo di Indirizzamento c 1 t 3 : F 1, R 0; indiretto q 0 c 2 t 0 : MAR MBR(AD); q 0 c 2 t 1 : MBR M; q 0 c 2 t 2 : AC ACAND MBR; c 2 t 3 : F 0; CiclodiExecute
ADD I 001 ADDRESS Esegue la sommatral'accumulatoreac e Se I=0: ilcontenutodellacelladi memoriailcui indirizzoè specificatodaaddress Se I=1, ilcontenutodellacelladi memoriailcui indirizzoè contenutonellacelladi memoriaspecificatadalcampo ADDRESS (indirizzamento indiretto) Il risultatoè salvatoin AC e l'eventualeriportoin E Ciclo di execute: q 1 c 2 t 0 : MAR MBR(AD); trasferiscela parte indirizzodell'istruzione q 1 c 2 t 1 : MBR M; leggel'operando q 1 c 2 t 2 : E-AC AC + MBR; eseguela sommatrambr e AC c 2 t 3 : F 0; passaallafasedi fetch
LDA (Load in AC) I 010 ADDRESS Caricanell'accumulatoreAC Se I=0: ilcontenutodellacelladimemoriailcui indirizzoè specificatodaaddress Se I=1, ilcontenutodellacelladimemoriailcui indirizzoè contenutonellacelladimemoriaspecificatadalcampo ADDRESS (indirizzamento indiretto) Ciclo di execute: q 2 c 2 t 0 : MAR MBR(AD); trasferiscela parte indirizzodell'istruzione q 2 c 2 t 1 : MBR M, AC 0;leggel'operandoe azzeral'accumulatore q 2 c 2 t 2 : AC AC+ MBR; copiambr in AC tramiteunasomma c 2 t 3 : F 0; passa alla fase di fetch
Cosacontiene AC a fine esecuzione? ORG 100/ memorizza il programma a partire dalla cella 100 -- la prima istruzione sarà caricata nella cella di memoria con indirizzo 100 --(notazione esadecimale) LDA A / carica A in AC -- viene caricato in AC il contenuto della cella di memoria etichettata A ADD 104 I / aggiunge ad AC la cella indirizzata dalla cella 104 --viene sommato ad AC il contenuto della cella di memoria il cui indirizzo è -- contenuto nella cella di memoria 104 HLT / termina l'esecuzione -- termina l'esecuzione del programma A, DEC 412 / 412 in decimale, notazione modulo e segno -- cella di memoria etichettata con A contenente il numero decimale 412 HEX 101 / notazione esadecimale in modulo e segno -- cella di memoria contenente l'indirizzo di memoria dove reperire il dato, da -- notare che la cella di memoria 101 contiene l'istruzione "ADD 104 I" che --corrisponde al numero binario 1001000100000100=37536 10 =-28000 compl. 2 END
STA (Store AC) I 011 ADDRESS Memorizza il contenuto dell'accumulatore AC nella Se I=0: celladi memoriailcui indirizzoè specificatoda ADDRESS Se I=1, celladi memoriailcui indirizzoè contenutonellacella di memoria specificata dal campo ADDRESS (indirizzamento indiretto) Ciclo di execute: q 3 c 2 t 0 : MAR MBR(AD); trasferiscela parte indirizzodell'istruzione q 3 c 2 t 1 : MBR AC; trasferisceildatonelmbr q 3 c 2 t 2 : M MBR; memorizzaildato c 3 t 3 : F 0; passaallafasedi fetch
DEC (Decrease) v.1 Vogliamo realizzare l'istruzione che decrementa di 1 il contenutodiunacelladimemoriadenominatain e salviil risultato in una cella di memoria denominata OUT Tale istruzionenon è presentenelset diistruzionidel PDP8 ORG 100 LDA IN ADD X STA OUT HLT X, DEC -1 IN, HEX A OUT, DEC 0 END / aggiungex ad AC, cioèlo decrementadi1 / ilrisultatoè salvatoin OUT / termina l'esecuzione
Linguaggi: macchina e Assembly Label Istruzione Commenti ORG 100 GO, LDA IN /caria IN ADD X /decrementa STA OUT /salva in OUT HLT X, DEC-1 IN, HEX A OUT, DEC 0 END
L Assemblatore In realtà per parlare con il PDP8 dovremmo scrivere i programmi in binario. Su un elaboratore più avanzato, Il linguaggio simbolico Assemblysarà memorizzato in termini di codice ASCII. Supponendo parole di memoria di 16 bit, possiamo memorizzare 2 caratteri per ogni parola. es.: GO, LDA IN sarà memorizzata come: G O 47 4F 0100 0111 0100 1111, <spazio> 2C 20 0010 1100 0010 0000 L D 4C 44 0100 1100 0100 0100 A <spazio> 41 20 0100 0001 0010 0000 I N 49 4E 0100 1001 0100 1110 <spazio> <CR> 20 0D 0010 0000 0000 1101 Un semplice assemblatore lavora in due passi
Codice ASCII
L Assemblatore: passo 1 Nella prima passata viene generata una tabella che mette in corrispondenza gli indirizzi simbolici definiti dall utente con i loro equivalenti binari Viene utilizzato il location counter(lc), una particolare parola di memoria per tener traccia della locazione di memoria assegnata all istruzione o operando che si sta considerando Per convenzione LC vale zero inizialmente Se c e la pseudo istruzione ORG, LC viene modificato Per ogni riga del programma LC viene incrementato La vera e propria transcodifica avviene al passo 2
L Assemblatore: passo 1
L Assemblatore: passo 1 Tabella dei simboli: G O 474F 0100 0111 0100 1111, <spazio> 2C 20 0010 1100 0001 0100 (LC) 0100 0000 0001 0000 0000 X, 582C 0101 1000 0010 1100 <spazio><spazio>2o2o 0001 0100 0001 0100 (LC) 0104 0000 0001 00000100 I N 494E 0100 1001 0100 1110, <spazio> 2C 0 0010 11000001 0100 (LC) 0105 0000 0001 0000 0101 O U 4F 55 0100 1111 0101 0101 T, 542C 0101 0100 0010 1100 (LC) 0106 0000 0001 0000 0110 Tre locazioni di memoria per ogni etichetta
L Assemblatore: passo 2 Le istruzioni vengono tradotte da linguaggio Assemblyin linguaggio macchina. L assemblatore utilizza quattro tabelle: tabella pseudo istruzioni (4 entries: ORG, END, DEC, HEX) tabella istruzioni MRI (8 entries) tabella istruzioni non MRI (16 entries) tabella simboli-indirizzi (ottenuta al passo 1) L assemblatore svolge anche operazioni di controllo della correttezza del codice codice operativo inesistente riferimenti non dichiarati
passo 2
BUN (Uncoditioned Bound) I 100 ADDRESS Trasferisce il flusso del programma all indirizzo specificato Se I=0: dallacelladi memoriailcui indirizzoè specificatoda ADDRESS Se I=1, dallacelladi memoriailcui indirizzoè contenuto nellacelladi memoriaspecificatadalcampo ADDRESS (indirizzamento indiretto) Ciclo di execute: q 4 c 2 t 0 : PC MBR(AD); trasferiscela parte indirizzodell'istruzione q 4 c 2 t 1 : q 4 c 2 t 2 : c 2 t 3 : F 0; passaallafasedi fetch
BSA (Bound Saving Address) I 101 ADDRESS Salva il contenuto del PC nella cella di memoria m il cui indirizzo Se I=0: è specificatodaaddress Se I=1, è contenutonellacelladi memoriaspecificatadalcampo ADDRESS (indirizzamento indiretto) Trasferisce il flusso del programma alla cella di memoria m+1 Ciclo di execute: q 5 c 2 t 0 : MAR MBR(AD), trasferiscel'indirizzom in MAR MBR(AD) PC, trasferisce PC nella cella di memoria m PC MBR(AD) q 5 c 2 t 1 : M MBR; salvambr nellacelladi memoriam q 5 c 2 t 2 : PC PC+1; IncrementaPC, ovverom c 2 t 3 : F 0; passaallafasedi fetch
BSA (Bound Saving Address) Il circuito così schematizzato permette la realizzazione delle prime tre operazioni in parallelo In combinazione con l istruzione BUN, la BSA può essere utilizzata per la realizzazione di chiamate a sottoprogrammi
DEC (Decrease) v.2 ORG 100 LDA ADDRESS / carica ADDRESS in AC BSA ADDRESS / salva PC e salta in ADDRESS --Il contenuto del PC (ovvero l'indirizzo della cella di memoria che contiene l'istruzione HLT) viene salvato in ADDRESS. Contestualmente, il flusso di programma si sposta alla cella di memoria successiva a quella etichettata con ADDRESS HLT ADDRESS, DEC -1 --Inizialmente in ADDRESS è memorizzato il numero -1. Successivamente l'esecuzione dell'istruzione BSA, ADDRESS conterrà l'indirizzo della cella di memoria contenente l'istruzione HLT ADD IN BUN ADDRESS I / salto indiretto --INDIRIZZAMENTO INDIRETTO: viene prima eseguito un ciclo di indirizzamento indiretto, dopodichè il flusso del programma si sposta all'indirizzo di memoria contenuto in ADDRESS IN, DEC 10 END
Chiamataallasubroutine in DEC v.2
ISZ (Increment and Skip on Zero) I 110 ADDRESS Incrementa il contenuto della cella di memoria il cui indirizzo Se I=0: è specificatodaaddress Se I=1, è contenuto nella cella di memoria specificata dal campo ADDRESS (indirizzamento indiretto) Se il risultato è 0, salta l'istruzione successiva Ciclo di execute: q 6 c 2 t 0 : MAR MBR(AD); trasferiscela parte indirizzodell'istruzione q 6 c 2 t 1 : MBR M; leggeilcontenutodellacelladi memoriaindirizzata q 6 c 2 t 2 : MBR MBR+1; incrementailcontenutodi MBR q 6 c 2 t 3 : M MBR, salvanellacellaindirizzatailcontenutodi MBR If (MBR=0) then PC PC+1, incrementapc se MBR è nullo F 0; passaallafasedi fetch
Come simulare un ciclo DO -WHILE START, ORG 100 LDA OUT INC STA OUT ISZ IN BUN START --l'istruzione BUN viene eseguita soltanto se il valore contenuto nella cella di memoria etichettata X è negativo, altrimenti il flusso del programma si sposta direttamente all'istruzione successiva che termina il programma HLT IN, DEC -10 OUT, DEC 0 END
CLA (Clear AC) o 111 1000 0000 0000 Azzera il contenuto dell'accumulatore AC Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 5 : AC 0, azzera AC F 0; passa alla fase di fetch B 5 denota il primo bit di MBR(5-16) che è pari a 1
CLE (Clear E) o 111 0100 0000 0000 Azzerailcontenutodel registroe Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 6 : E 0, azzerae F 0; passaallafasedi fetch
CMA (Complement AC) o 111 0010 0000 0000 Complementa logicamente il contenuto dell'accumulatore AC Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 7 : AC AC', complementalogicamenteilcontenutodi AC F 0; passaallafasedi fetch
DEC (Decrease) v.3 ORG 100 CLA / cancella il contenuto di AC --Il contenuto di AC viene annullato, cioè AC=0. In tal modo si evitano 'sorpese' dovute a valori precedentemente caricati in AC. Ciò si può verificare, per esempio, se l'istruzione DEC che stiamo definendo viene usata all'interno di un altro programma CMA / complementa il contenuto di AC --Il contenuto di AC complementato, ovvero AC=FFFF 16 =111111111111 2 =-1 10 dato che ci si riferisce alla notazione in complemento ADD IN STA OUT --Il risultato stavolta è salvato in una cella di memoria etichettata con OUT anziché lasciato semplicemente in AC HLT IN, DEC 10 OUT, DEC 0 END
CME (Complement E) o 111 0001 0000 0000 Complementa logicamente il contenuto del registro E Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 8 : E E', complementalogicamenteilcontenutodi E F 0; passaallafasedi fetch
CIR (Circulate Right) o 111 0000 1000 0000 Ruota verso destra(cioè verso il bit meno significativo) il contenuto combinato del registro E e dell'accumulatore AC Il bit meno significativo diventa passa al registro E Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 9 : E-AC bit1-e-(ac \bit1), ruotaverso destrae-ac F 0; passaallafasedi fetch
CIL (Circulate Left) o 111 0000 0100 0000 Ruota verso sinistra(cioè verso il bit più significativo) il contenuto combinato del registro E e dell'accumulatore AC Il bit più significativo diventa il nuovo contenuto del registro E Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 10 : E-AC AC-E, ruotaverso sinistrae-ac F 0; passaallafasedi fetch
MUL2, DIV2 ORG 100 LDA IN CIL --Il contenutodell'accumulatore(intesoin binario) vieneruotatodiun bit verso sinistra. Cio' equivale ad effettuare una moltiplicazione per 2. -- Se invece dell'istruzione CIL avessimo utilizzato CIR, allora il contenuto dell'accumulatore(intesoin binario) verrebberuotatodiun bit verso destra. Cio' equivale ad effettuare una divisione per 2 (senza considerare l'eventuale resto). Attenzione al contenuto del registro E. Potrebbe essere opportuno effettuare prima un CLE STA OUT HLT IN, HEX 5 OUT, DEC 0 END
INC (Increase) o 111 0000 0010 0000 Incrementailcontenutoilcontenutocombinatodel registro E e dell'accumulatore AC Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 11 : E-AC E-AC+1, incrementadi 1 E-AC F 0; passaallafasedi fetch
SPA (Skip on Positive AC) o 111 0000 0001 0000 Salta l'istruzione successiva se il contenuto dell'accumulatore AC è positivo Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 12 : If (AC>0) then PC PC+1,incrementaPC se AC > 0 F 0; passaallafasedi fetch
SNA (Skip on Negative AC) o 111 0000 0001 0000 Salta l'istruzione successiva se il contenuto dell'accumulatore AC è negativo Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 13 : If (AC<0) then PC PC+1,incrementaPC se AC < 0 F 0; passaallafasedi fetch
SZA (Skip on Zero AC) o 111 0000 0001 0000 Salta l'istruzione successiva se il contenuto dell'accumulatore AC è 0 Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 14 : If (AC=0) then PC PC+1,incrementaPC se AC = 0 F 0; passaallafasedi fetch
SZE (Skip on Zero E) o 111 0000 0001 0000 Salta l'istruzione successiva se il contenuto del registro E è 0 Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 15 : If (E=0) then PC PC+1,incrementaPC se E = 0 F 0; passaallafasedi fetch
HLT (Halt) o 111 0000 0000 0001 Arrestailsistemaponendoa o ilflag di sistema Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 I c 2 t 3 B 15 : S 0; arrestailsistema F 0; passa alla fase di fetch
INP (Input di un carattere) 1 111 1000 0000 0000 Carica in AC un carattere dal buffer di tastiera Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 Ic 2 t 3 B 5 : AC ASCII(keyboard), mettein AC ilcodiceascii del carattere digitato da tastiera :F 0; passaallafasedi fetch
OUT (Output di un carattere) 1 111 0100 0000 0000 Visualizzasulterminalepredefinitoilcontenutodi AC interpretato come codice ASCII Ciclo di execute: q 7 c 2 t 0 : q 7 c 2 t 1 : q 7 c 2 t 2 : q 7 Ic 2 t 3 B 6 : Terminal AC, visualizzasu Terminal ilcarattere rappresentatoin ASCII in AC F 0; passaallafasedi fetch
I/O-I SKI Salta l'istruzione successiva se il flag di ingresso è positivo SKO Salta l'istruzione successiva se il flag di uscita è positivo ION Abilita Interrupt IOF Disabilita Interrupt 1 111 0010 0000 0000 1 111 0001 0000 0000 1 111 0000 1000 0000 1 111 0000 0100 0000
ISA del PDP 8 Memory Reference Instructions Simbolo Ind. D/I OPR Descrizione AND 0/1 000 And logico tra AC e cella indirizzata ADD 0/1 001 Somma tra AC e cella indirizzata LDA 0/1 010 Carica in AC il contenuto della cella indirizzata STA 0/1 011 Salva nella cella indirizzata il contenuto di AC BUN 0/1 100 Salto incondizionato alla cella indirizzata BSA 0/1 101 Salvataggiodel PC nella cella indirizzata e salto alla cella successiva a quella indirizzata ISZ 0/1 110 Incremento di 1 del contenuto della cella indirizzata e se 0, allora salta l istruzione successiva
ISA del PDP 8 Register Reference Instructions Simbolo Codice Descrizione CLA 0111 100000000000 Azzerail contenuto di AC CLE 0111 010000000000 Azzera il contenuto del registro E CMA 0111 001000000000 Complementa logicamente il contenuto di AC CME 0111 000100000000 Complementa logicamente il contenuto di E CIR 0111 000010000000 Sposta verso dersoi bit in E-AC CIL 0111 000001000000 Sposta verso sinistra i bit in E-AC INC 0111 000000100000 Incrementa di 1 il contenuto diac SPA 0111 000000010000 Salta l istruzione successiva se AC>0 SNA 0111 0000 0000 1000 Salta l istruzione successiva se AC<0 SZA 0111 0000 0000 0100 Salta l istruzione successiva se AC=0 SZE 0111 0000 0000 0010 Salta l istruzione successiva se E=0 HLT 0111 0000 0000 0001 Arresta il sistema
ISA del PDP 8 -I/O Instructions Simbolo Codice Descrizione INP 1111 100000000000 Carica in AC il codice ASCII di un carattere in input OUT 1111 010000000000 Output di un carattere il cui codice ASCII è in AC SKI 1111 001000000000 Salta l istruzione successiva se flag di input =1 SKO 1111 000100000000 Salta l istruzione successiva se flag di output =1 ION 1111 000010000000 Abilita interrupt IOF 1111 000001000000 Disabilita interrupt