and 104 i, micro-operazioni · 2019. 4. 10. · bun start--l'istruzione bun viene eseguita soltanto...
TRANSCRIPT
-
10/04/19
1
Parte II
AND 104 I, micro-operazionic0t0: MAR PCc0t1: MBR M, PC PC +1c0t2: OPR MBR(OP), I MBR(I)q’7Ic0t3: R 1 Ciclo di fetch(q7+I’)c0t3: F 1c1t0: MAR MBR(AD); / 104 da Hex a Binc1t1: MBR M; c1t2: Ciclo di Indirizzamentoc1t3: F 1, R 0; indirettoq0c2t0: MAR MBR(AD); q0c2t1: MBR M;q0c2t2: AC AC AND MBR;c2t3 : F 0; Ciclo di Execute
-
10/04/19
2
ADDI 001 ADDRESS
• Esegue la somma tra l'accumulatore AC e •Se I=0: il contenuto della cella di memoria il cui indirizzo è specificato da ADDRESS •Se I=1, il contenuto della cella di memoria il cui indirizzo è contenuto nella cella di memoria specificata dal campo ADDRESS (indirizzamento indiretto)
• Il risultato è salvato in AC e l'eventuale riporto in E•Ciclo di execute:
q1c2t0: MAR MBR(AD); trasferisce la parte indirizzo dell'istruzioneq1c2t1: MBR M; legge l'operandoq1c2t2: E-AC AC + MBR; esegue la somma tra MBR e ACc2t3: F 0; passa alla fase di fetch
LDA (Load in AC)I 010 ADDRESS
•Carica nell'accumulatore AC •Se I=0: il contenuto della cella di memoria il cui indirizzo è specificato da ADDRESS
•Se I=1, il contenuto della cella di memoria il cui indirizzo è contenuto nella cella di memoria specificata dal campo ADDRESS (indirizzamento indiretto)
•Ciclo di execute:q2c2t0: MAR MBR(AD); trasferisce la parte indirizzo dell'istruzione
q2c2t1: MBR M, AC 0; legge l'operando e azzera l'accumulatoreq2c2t2: AC AC + MBR; copia MBR in AC tramite una somma
c2t3: F 0; passa alla fase di fetch
-
10/04/19
3
Cosa contiene 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 programmaA, DEC 412 / 412 in decimale, notazione modulo e segno-- cella di memoria etichettata con A contenente il numero decimale 412
HEX 101 / notazione esadecimale -- 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=3712410=-28412 compl. 2
END
STA (Store AC)I 011 ADDRESS
•Memorizza il contenuto dell'accumulatore AC nella•Se I=0: cella di memoria il cui indirizzo è specificato daADDRESS •Se I=1, cella di memoria il cui indirizzo è contenuto nella celladi memoria specificata dal campo ADDRESS (indirizzamentoindiretto)
•Ciclo di execute:q3c2t0 : MAR MBR(AD); trasferisce la parte indirizzo dell'istruzioneq3c2t1: MBR AC; trasferisce il dato nel MBRq3c2t2: M MBR; memorizza il datoc3t3: F 0; passa alla fase di fetch
-
10/04/19
4
DEC (Decrease) v.1
•Vogliamo realizzare l'istruzione che decrementa di 1 ilcontenuto di una cella di memoria denominata IN e salvi il
risultato in una cella di memoria denominata OUT
•Tale istruzione non è presente nel set di istruzioni del PDP8
ORG 100
GO, LDA IN
ADD X / aggiunge X ad AC, cioè lo decrementa di 1
STA OUT / il risultato è salvato in OUT
HLT / termina l'esecuzione
X, DEC -1
IN, HEX A
OUT, DEC 0
END
Linguaggi: macchina e Assembly
Label Istruzione CommentiORG 100
GO, LDA IN /caria INADD X /decrementaSTA OUT /salva in OUTHLT
X, DEC -1IN, HEX AOUT, DEC 0
END
-
10/04/19
5
L’Assemblatore • In realtà per “parlare” con il PDP8 dovremmo scrivere i programmi in binario.• Su un elaboratore più avanzato, Il linguaggio simbolico Assembly sarà 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, 2C 20 0010 1100 0010 0000L D 4C 44 0100 1100 0100 0100
A 41 20 0100 0001 0010 0000I N 49 4E 0100 1001 0100 1110 20 0D 0010 0000 0000 1101
•Un semplice assemblatore lavora in due passi
Codice ASCII
-
10/04/19
6
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
-
10/04/19
7
L’Assemblatore: passo 1 Tabella dei simboli:G O 47 4F 0100 0111 0100 1111, 2C 20 0010 1100 0001 0100(LC) 01 00 0000 0001 0000 0000X , 58 2C 0101 1000 0010 11002o2o 0001 0100 0001 0100(LC) 01 04 0000 0001 0000 0100I N 49 4E 0100 1001 0100 1110
, 2C 0 0010 1100 0001 0100(LC) 01 05 0000 0001 0000 0101O U 4F 55 0100 1111 0101 0101
T, 54 2C 0101 0100 0010 1100(LC) 01 06 0000 0001 0000 0110
Tre locazioni di memoria per ogni etichetta
L’Assemblatore: passo 2
• Le istruzioni vengono tradotte da linguaggio Assembly in linguaggio macchina.
• L’assemblatore utilizza quattro tabelle:• tabella pseudo istruzioni (4 entries: ORG, END, DEC, HEX)• tabella istruzioni MRI (7 entries)• tabella istruzioni non MRI (18 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•…
-
10/04/19
8
passo 2
BUN (Uncoditioned Bound)
I 100 ADDRESS
•Trasferisce il flusso del programma all’indirizzo specificato•Se I=0: dalla cella di memoria il cui indirizzo è specificato daADDRESS
•Se I=1, dalla cella di memoria il cui indirizzo è contenutonella cella di memoria specificata dal campo ADDRESS (indirizzamento indiretto)
•Ciclo di execute:q4c2t0 : PC MBR(AD); trasferisce la parte indirizzo dell'istruzione
q4c2t1 :
q4c2t2 :
c2t3 : F 0; passa alla fase di fetch
-
10/04/19
9
BSA (Bound Saving Address)I 101 ADDRESS
• Salva il contenuto del PC nella cella di memoria m il cui indirizzo•Se I=0: è specificato da ADDRESS •Se I=1, è contenuto nella cella di memoria specificata dal campo ADDRESS (indirizzamento indiretto)
•Trasferisce il flusso del programma alla cella di memoria m+1•Ciclo di execute:
q5c2t0 : MAR MBR(AD), trasferisce l'indirizzo m in MARMBR(AD) PC, trasferisce PC nella cella di memoria mPC MBR(AD)
q5c2t1 : M MBR; salva MBR nella cella di memoria m
q5c2t2 : PC PC+1; Incrementa PC, ovvero mc2t3 : F 0; passa alla fase di 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
-
10/04/19
10
DEC (Decrease) v.2ORG 100LDA ADDRESS / carica ADDRESS in ACBSA 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
HLTADDRESS, 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 INBUN 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 ADDRESSIN, DEC 10
END
Chiamata alla subroutine in DEC v.2
-
10/04/19
11
ISZ (Increment and Skip on Zero)I 110 ADDRESS
• Incrementa il contenuto della cella di memoria il cui indirizzo•Se I=0: è specificato da ADDRESS •Se I=1, è contenuto nella cella di memoria specificata dalcampo ADDRESS (indirizzamento indiretto)
• Se il risultato è 0, salta l'istruzione successiva•Ciclo di execute:
q6c2t0 : MAR MBR(AD); trasferisce la parte indirizzo dell'istruzioneq6c2t1: MBR M; legge il contenuto della cella di memoria indirizzataq6c2t2 : MBR MBR+1; incrementa il contenuto di MBRq6c2t3 : M MBR, salva nella cella indirizzata il contenuto di MBR
If (MBR=0) then PC PC+1, incrementa PC se MBR è nulloF 0; passa alla fase di fetch
Come simulare un ciclo DO -WHILEORG 100
START, LDA OUTINCSTA OUTISZ INBUN 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
HLTIN, DEC -10
OUT, DEC 0END
-
10/04/19
12
CLA (Clear AC)o 111 1000 0000 0000
•Azzera il contenuto dell'accumulatore AC
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7I’c2t3 B5: AC 0, azzera AC
F 0; passa alla fase di fetch• B5 denota il primo bit di MBR(5-16) che è pari a 1
CLE (Clear E)o 111 0100 0000 0000
•Azzera il contenuto del registro E
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7I’c2t3 B6: E 0, azzera E
F 0; passa alla fase di fetch
-
10/04/19
13
CMA (Complement AC)o 111 0010 0000 0000
•Complementa logicamente il contenutodell'accumulatore AC
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7I’c2t3 B7: AC AC', complementa logicamente il contenuto di AC
F 0; passa alla fase di fetch
DEC (Decrease) v.3ORG 100CLA / 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=FFFF16=1111111111112=-110 dato che ci si riferisce alla notazione in complemento
ADD INSTA OUT
-- Il risultato stavolta è salvato in una cella di memoria etichettata con OUT anziché lasciato semplicemente in AC
HLTIN, DEC 10OUT, DEC 0
END
-
10/04/19
14
CME (Complement E)o 111 0001 0000 0000
•Complementa logicamente il contenuto del registro E
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7I’c2t3 B8: E E', complementa logicamente il contenuto di E
F 0; passa alla fase di fetch
CIR (Circulate Right)o 111 0000 1000 0000
• Ruota verso destra (cioè verso il bit meno significativo) ilcontenuto combinato del registro E e dell'accumulatore AC•Il bit meno significativo diventa passa al registro E
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7I’c2t3 B9: E-AC bit1-E-(AC \ bit1), ruota verso destra E-AC
F 0; passa alla fase di fetch
-
10/04/19
15
CIL (Circulate Left)o 111 0000 0100 0000
• Ruota verso sinistra (cioè verso il bit più significativo) ilcontenuto combinato del registro E e dell'accumulatore AC•Il bit più significativo diventa il nuovo contenuto del registro E
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7I’c2t3 B10: E-AC AC-E, ruota verso sinistra E-AC
F 0; passa alla fase di fetch
MUL2, DIV2ORG 100
LDA INCIL
-- Il contenuto dell'accumulatore (inteso in binario) viene ruotato di un bit verso sinistra. Cio' equivale ad effettuare una moltiplicazione per 2.
-- Se invece dell'istruzione CIL avessimo utilizzato CIR, allora il contenutodell'accumulatore (inteso in binario) verrebbe ruotato di un bit verso destra. Cio' equivale ad effettuare una divisione per 2 (senza considerare l'eventualeresto). Attenzione al contenuto del registro E. Potrebbe essere opportunoeffettuare prima un CLE
STA OUTHLT
IN, HEX 5OUT, DEC 0
END
-
10/04/19
16
INC (Increase)o 111 0000 0010 0000
• Incrementa il contenuto il contenuto combinato del registro E e dell'accumulatore AC
•Ciclo di execute:q7c2t0 : q7c2t1 :
q7c2t2 :q7I’c2t3 B11: E-AC E-AC+1, incrementa di 1 E-AC
F 0; passa alla fase di fetch
SPA (Skip on Positive AC)o 111 0000 0001 0000
• Salta l'istruzione successiva se il contenutodell'accumulatore AC è positivo
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7I’c2t3 B12: If (AC>0) then PC PC+1, incrementa PC se AC > 0
F 0; passa alla fase di fetch
-
10/04/19
17
SNA (Skip on Negative AC)o 111 0000 0001 0000
• Salta l'istruzione successiva se il contenutodell'accumulatore AC è negativo
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7I’c2t3 B13: If (AC
-
10/04/19
18
SZE (Skip on Zero E)
o 111 0000 0001 0000
• Salta l'istruzione successiva se il contenuto del registro E è 0
•Ciclo di execute:q7c2t0 :
q7c2t1 :
q7c2t2 :
q7I’c2t3 B15: If (E=0) then PC PC+1, incrementa PC se E = 0
F 0; passa alla fase di fetch
HLT (Halt)o 111 0000 0000 0001
•Arresta il sistema ponendo a o il flag di sistema
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7I’c2t3 B16: S 0; arresta il sistema
F 0; passa alla fase di fetch
-
10/04/19
19
INP (Input di un carattere)
1 111 1000 0000 0000
•Carica in AC un carattere dal buffer di tastiera
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7Ic2t3 B5: AC ASCII(keyboard), mette in AC il codice ASCII del
carattere digitato da tastiera:F 0; passa alla fase di fetch
OUT (Output di un carattere)
1 111 0100 0000 0000
•Visualizza sul terminale predefinito il contenuto di AC interpretato come codice ASCII
•Ciclo di execute:q7c2t0 : q7c2t1 :q7c2t2 :q7Ic2t3 B6: Terminal AC, visualizza su Terminal il carattere
rappresentato in ASCII in AC F 0; passa alla fase di fetch
-
10/04/19
20
SKI Salta l'istruzione successiva se il flag di ingresso è positivo
SKOSalta l'istruzione successiva se il flag di uscita è positivo
IONAbilita Interrupt
IOFDisabilita Interrupt
I/O-I
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 Salvataggio del 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
-
10/04/19
21
ISA del PDP 8 Register Reference Instructions
Simbolo Codice Descrizione
CLA 0111 1000 0000 0000 Azzera il contenuto di AC
CLE 0111 0100 0000 0000 Azzera il contenuto del registro E
CMA 0111 0010 0000 0000 Complementa logicamente il contenuto di AC
CME 0111 0001 0000 0000 Complementa logicamente il contenuto di E
CIR 0111 0000 1000 0000 Sposta verso derso i bit in E-AC
CIL 0111 0000 0100 0000 Sposta verso sinistra i bit in E-AC
INC 0111 0000 0010 0000 Incrementa di 1 il contenuto di AC
SPA 0111 0000 0001 0000 Salta l’istruzione successiva se AC>0
SNA 0111 0000 0000 1000 Salta l’istruzione successiva se AC