Introduzione al linguaggio Assembly CORSO DI CALCOLATORI ELETTRONICI I CdL Ingegneria Biomedica (A-I) Università degli Studi di Napoli “Federico II” DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Un processore esegue ciclicamente le fasi: fetch, operand assembly ed execute Durante la fase fetch il processore: * preleva dalla memoria l’istruzione correntemente indirizzata dal registro PC * copia l’istruzione nel registro IR * incrementa il PC in modo da “puntare” all’istruzione seguente L’unità di controllo decodifica l’istruzione ed avvia la serie di micro-operazioni che producono l’esecuzione dell’istruzione. DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Micro-operazioni Ad ogni codice operativo è abbinata una ben precisa e specifica serie di micro-operazioni ¾ Esempi di micro-operazioni: » abilitazione di un registro alla scrittura sul bus interno » abilitazione di un registro alla lettura dal bus interno » abilitazione della memoria alla scrittura nel registro MB » invocazione di una funzionalità dell’ALU » …. ¾ Il programmatore non ha accesso alle micro-operazioni (l’istruzione in linguaggio macchina è vista come atomica) DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Linguaggio Assembler Programma: insieme di istruzioni in linguaggio macchina più i dati su cui le istruzioni devono operare. Le istruzioni in linguaggio macchina hanno cardinalità finita, e sono strettamente dipendenti dal particolare processore. Attraverso il linguaggio Assembly il programmatore non utilizza sequenze di bit ma: ¾ codici mnemonici al posto dei codici operativi ¾ identificatori testuali al posto di indirizzi di memoria e registri DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Il linguaggio Assembly ¾ Un programma assembler per essere eseguito, deve essere tradotto da un assemblatore in linguaggio macchina Programma Assembler ASSEMBLATORE Programma oggetto Formato testo (sequenze di caratteri) Formato binario DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Esempio: un listato assembly… * Programma per sommare i primi 17 interi * ORG $8000 START CLR.W SUM MOVE.W ICNT,D0 ALOOP MOVE.W D0,CNT ADD.W SUM,D0 MOVE.W D0,SUM MOVE.W CNT,D0 ADD.W #-1,D0 BNE ALOOP JMP SYSA SYSA EQU $8100 CNT DS.W 1 SUM DS.W 1 IVAL EQU 17 ICNT DC.W IVAL END START DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Risultato della traduzione 00000000 00000000 00008000 00008000 00008006 0000800C 00008012 00008018 0000801E 00008024 00008028 0000802A 00008030 00008030 00008032 00008034 00008034 00008036 4279 00008032 3039 00008034 33C0 00008030 D079 00008032 33C0 00008032 3039 00008030 0640 FFFF 66E2 4EF9 00008100 =00008100 =00000011 0011 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 * Programma per sommare i primi 17 interi * ORG $8000 START CLR.W SUM MOVE.W ICNT,D0 ALOOP MOVE.W D0,CNT ADD.W SUM,D0 MOVE.W D0,SUM MOVE.W CNT,D0 ADD.W #-1,D0 BNE ALOOP JMP SYSA SYSA EQU $8100 CNT DS.W 1 SUM DS.W 1 IVAL EQU 17 ICNT DC.W IVAL END START DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Classi di istruzioni Un calcolatore deve avere istruzioni in grado di effettuare quattro tipi di operazioni » trasferimento dei dati tra la memoria e i registri della CPU » operazioni aritmetiche e logiche sui dati; » controllo di flusso di un programma; » trasferimento dei dati in ingresso/uscita (I/O). DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Formato delle istruzioni assembly Etichetta Codice-Mnemonico Operandi Commento ¾ Il campo Etichetta o Label (nome simbolico associato ad una istruzione) ed il campo Commento sono opzionali ¾ Numero e formato degli operandi dipendono dall’istruzione DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Esempio: MOVE R0, SOMMA ¾ MOVE: codice operativo (o OP-CODE) ¾ R0 : operando sorgente (registro) ¾ SOMMA: operando destinazione (locazione di memoria il cui indirizzo è rappresentato dal nome simbolico SOMMA) Nel listato del programma occorre definire tutti i nomi simbolici in modo da creare un’associazione SIMBOLO → INDIRIZZO DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Natura degli operandi 1. Operando costante: (solo operando sorgente) » Esplicito o immediato: espresso direttamente nell’istruzione » Implicito: è determinato dal codice operativo (CLR D0 la costante 0 è implicitamente indicata dal codice operativo CLR=CLEAR) 2. Operando memoria: (sorgente o destinazione) esprime l’indirizzo di una locazione di memoria 3. Operando registro: (sorgente o destinazione) » Esplicito: nelle macchine a registri generali è indicato dall’indice del registro » Implicito: è implicitamente espresso dal codice operativo DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Natura degli operandi: ¾Esempi: ADD #9, R0 il primo operando è immediato (il valore è espresso nell’istruzione), il secondo è il registro R0 ADD R0, R1 entrambi gli operandi sono registri ADD R0, #9 l’operando destinazione non può essere una costante. DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Esempio: somma di due variabili L’istruzione C++: C = A + B; In Assembler con istruzioni ad un solo operando è espressa da: MOVE B ADD A STORE C Somma il contenuto delle locazioni di memoria associate agli identificatori A e B, quindi pone il risultato della somma nella locazione di memoria associata dall’identificatore C. DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Registri interni Poiché non si può operare direttamente su locazioni di memoria, occorre trasferire esplicitamente i dati dalla memoria ai registri e viceversa. L’uso di registri interni produce ¾ elaborazioni più rapide: l’accesso ai registri interni è molto più veloce dell’accesso in memoria; ¾ istruzioni più corte: l’operando registro richiede un minor numero di bit. DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Direttive di assemblaggio: EQU… Direttive di assemblaggio o pseudo-operatori: informazioni utilizzate dall’assemblatore per la traduzione del programma da sorgente ad oggetto. ¾ Direttiva EQU: HOURS EQU 24 comanda all’assemblatore la sostituzione del simbolo HOURS, ovunque compaia nel programma, con il valore 24. Direttiva ORG: ORG $8000 indica l’indirizzo di memoria a partire dal quale l’assemblatore deve allocare il codice che segue. ¾ DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli Campo Label ¾ Se presente occupa il primo campo dell’istruzione. ¾ Nella traduzione la label viene sostituita con il valore corrispondente all’indirizzo di memoria in cui è contenuta l’istruzione. DIS - Dipartimento di Informatica e Sistemistica- Università di Napoli