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