+ All Categories
Home > Documents > AND 104 I, micro-operazioni · 2019. 4. 10. · BUN START--l'istruzione BUN viene eseguita soltanto...

AND 104 I, micro-operazioni · 2019. 4. 10. · BUN START--l'istruzione BUN viene eseguita soltanto...

Date post: 27-Jan-2021
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
21
10/04/19 1 Parte II AND 104 I, micro - operazioni Ciclo di fetch / 104 da Hex a Bin Ciclo di Indirizzamento indiretto Ciclo di Execute
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


Recommended