L’ASSEMBLER non ha le caratteristiche dei linguaggi ad alto livello, come:
  • orientamento verso la soluzione dei problemi (strutture dati e istruzioni specialistiche);
  • indipendenza dall’architettura.

Un’istruzione in linguaggio Assembler (statement) e’ divisa in quattro campi. Più che un’istruzione e’ una riga di programma:


NOME - - CODICE OPERAZIONE - - OPERANDI - - COMMENTO
Commento: i commenti iniziano con il carattere #. I commenti sono una buona abitudine, in quanto rendono rileggibile il programma, anche da altri utenti.

Nome: si tratta essenzialmente di etichette (che iniziano dalla prima colonna e devono terminare con ` : `. Si tratta di un nome usato per indicare un indirizzo di locazione di memoria.

Codice operazione: mnemonico per un’istruzione macchina, oppure può essere mnemonico per una direttiva.

Operandi: operandi immediati o indirizzamento previsto dall’architettura, consistente con il codice operativo.

Ci sono poi delle PAROLE RISERVATE:

  • mnemoniche per indicare codici operativi
  • mnemoniche per i nomi dei registri
  • mnemoniche per le direttive

DIRETTIVE

Danno ordine all’assemblatore sul modo di tradurre il programma e non generano istruzioni macchina. Si tratta di :
  • segnalazione di situazioni anomale
  • lettura di moduli ausiliari
  • assemblaggio condizionato
  • pseudoistruzioni: non corrispondono a istruzioni del linguaggio macchina; esse vengono “tradotte” in un insieme di istruzioni in linguaggio macchina.
  • convenzione nell’uso dei registri
ESEMPI di direttive per MIPS
  • .align n (allineamento mod 2n)
  • .byte b1............bn
  • .half h1............hn
  • .word w1............wn
  • .double d1............dn
  • .globl symbol (simbolo globale: visibile da tutti i moduli)
  • syscall (chiamata a sistema operativo)

Metodi per la velocizzazione delle prestazioni della macchina:

CANALIZZAZIONE O PIPELINE

L’idea del pipeline e’ scomporre un’istruzione in modo che ogni singola parte sia eseguita in parallelo da moduli differenti, perciò abbiamo differenti fasi:
  • suddivisione dell’istruzione in parti
  • avanzamento dell’istruzione di un passo all’interno della “pipe”(canale) corrispondente ad un impulso di clock
  • la durata del ciclo di clock e’ determinata dal tempo richiesto dallo stadio più lungo

Se gli stati sono bilanciati:

Il tempo fra le istruzioni (con pipeline)= tempo fra le istruzioni (senza pipeline)/numero stadi di pipeline

Il pipeline migliora le prestazioni aumentando la frequenza di operazione delle istruzioni, ma peggiorando il tempo di esecuzione della singola istruzione.

Fasi che un’istruzione attraversa per essere eseguita:

CARICAMENTO DECODIFICA ESECUZIONE
Dt Dt Dt

Dt Dt Dt Dt Dt Dt
C D E
  C D E
    C D E
      C D E

Senza pipeline: 3 ISTRUZIONI

C D E C D E C D E

Totale Dt: 9

Con pipeline: 3 ISTRUZIONI

C D E
  C D E
    C D E

Totale Dt: 5 In generale: per n istruzioni -> (n + 2)Dt

ASPETTI CHE ROVINANO UNA BUONA ORGANIZZAZIONE DELLA PIPELINE

  • un’istruzione di salto condizionato perché rende sconosciuta la prossima istruzione da prelevare, fino alla completa esecuzione dell’istruzione di salto
  • bilanciamento delle varie fasi a livello di tempo

Il pipeline e’ un’operazione tipica delle architetture RISC, poiché in questo tipo di architetture le istruzioni hanno la stessa lunghezza, perciò la suddivisione in fasi e’ molto più efficiente.

Vediamo ora una migliore suddivisione in fasi:

  • PI – prelievo dell’istruzione (caricare un registro opportuno)
  • DI – decodifica dell’istruzione (determinazione del codice operativo e identificazione degli operandi)
  • CO – calcolo operandi (calcolo dell’indirizzo effettivo di ogni operando)
  • PO – prelievo operandi (caricare gli operandi dalla memoria, se serve)
  • EI – esecuzione istruzione
  • SO – scrittura operando (pone il risultato in memoria)

Questa suddivisione crea delle fasi che hanno più o meno la stessa durata (non tutte le fasi sono però sempre necessarie).

Vediamo come viene modificata la pipeline con questa nuova suddivisione:

1 PI DI CO PO EI SO
2   PI DI CO PO EI SO
3     PI DI CO PO EI
4       PI DI CO PO
5         PI DI CO
6           PI DI
7             PI
8               PI DI CO PO EI SO
  Dt Dt Dt Dt Dt Dt Dt Dt Dt Dt Dt Dt Dt

La terza istruzione è di salto e viene ad essere eseguita all'ottavo Dt, bloccando tutte le istruzioni tra la terza e l'ottava, ovvero l'istruzione a cui si riferiva il salto. Le istruzioni bloccate non restituiscono la scrittura dell'operando, che avviene unicamente all'ultimo Dt.

-- AlessandroLonghi - 27 Apr 2002

-- AlessioFrabotta - 27 Apr 2002

-- AnnaMorelli - 27 Apr 2002

Edit | Attach | Watch | Print version | History: r6 < r5 < r4 < r3 < r2 | Backlinks | Raw View | Raw edit | More topic actions
Topic revision: r6 - 2002-04-29 - AlessandroLonghi





 
Questo sito usa cookies, usandolo ne accettate la presenza. (CookiePolicy)
Torna al Dipartimento di Informatica
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback