I linguaggi assembler - Politecnico di Torino
I linguaggi assembler - Politecnico di Torino
I linguaggi assembler - Politecnico di Torino
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
I <strong>linguaggi</strong> <strong>assembler</strong><br />
M. Sonza Reorda<br />
<strong>Politecnico</strong> <strong>di</strong> <strong>Torino</strong><br />
Dip. <strong>di</strong> Automatica e Informatica<br />
1 M. Sonza Reorda - a.a. 2007/08<br />
Ciclo <strong>di</strong> vita <strong>di</strong> un programma<br />
Utente<br />
E<strong>di</strong>tor<br />
Co<strong>di</strong>ce<br />
sorgente<br />
Co<strong>di</strong>ce<br />
oggetto<br />
Assemblatore<br />
Debugger<br />
CPU<br />
Linker<br />
Co<strong>di</strong>ce<br />
eseguibile<br />
Loader<br />
Co<strong>di</strong>ce<br />
macchina<br />
2 M. Sonza Reorda - a.a. 2007/08
Assemblaggio<br />
Il file sorgente viene trasformato in file oggetto tramite:<br />
• rimozione dei commenti<br />
• associazione <strong>di</strong> ciascuna variabile simbolica ad una<br />
adeguata locazione <strong>di</strong> memoria<br />
• traduzione in co<strong>di</strong>ce macchina <strong>di</strong> ciascuna istruzione.<br />
Alcune operazioni non possono ancora essere completate,<br />
ad esempio quelle che riguardano:<br />
• le variabili definite in altri moduli<br />
• le procedure definite in altri moduli.<br />
3 M. Sonza Reorda - a.a. 2007/08<br />
Link<br />
Procede alla creazione del file eseguibile a partire da più<br />
file oggetto.<br />
Provvede a verificare la correttezza dei richiami a variabili<br />
e procedure definite in altri moduli e a generare gli<br />
in<strong>di</strong>rizzi opportuni.<br />
Il file prodotto non è <strong>di</strong> solito imme<strong>di</strong>atamente eseguibile in<br />
quanto<br />
• risiede su <strong>di</strong>sco anziché in memoria<br />
• deve essere in<strong>di</strong>pendente dalla posizione in memoria in<br />
cui verrà caricato.<br />
4 M. Sonza Reorda - a.a. 2007/08
Loader<br />
Fa parte del Sistema Operativo.<br />
Provvede a<br />
• reperire il file eseguibile su <strong>di</strong>sco<br />
• caricarlo in memoria, eseguendo le eventuali mo<strong>di</strong>fiche<br />
rese necessarie dopo che è stata decisa la sua posizione<br />
in memoria<br />
• fare in modo che il processore inizi l’esecuzione del<br />
programma.<br />
5 M. Sonza Reorda - a.a. 2007/08<br />
Debugger<br />
Interagisce con i processi <strong>di</strong> assemblaggio, link ed<br />
esecuzione, permettendo al programmatore <strong>di</strong> <strong>di</strong>sporre <strong>di</strong><br />
funzionalità quali:<br />
• breakpoint<br />
• esecuzione passo passo<br />
• accesso a variabili e registri (in lettura e scrittura)<br />
• …<br />
6 M. Sonza Reorda - a.a. 2007/08
Linguaggi <strong>assembler</strong><br />
Ciascun processore ha il proprio <strong>linguaggi</strong>o <strong>assembler</strong> (in<br />
termini <strong>di</strong> co<strong>di</strong>ce macchina).<br />
Processori <strong>di</strong>versi appartenenti ad una stessa famiglia<br />
possono riconoscere lo stesso co<strong>di</strong>ce macchina.<br />
7 M. Sonza Reorda - a.a. 2007/08<br />
Caratteristiche <strong>di</strong> un <strong>linguaggi</strong>o<br />
<strong>assembler</strong><br />
• Operazioni permesse<br />
• Tipi <strong>di</strong> dato<br />
• Formato delle istruzioni<br />
• Registri utilizzabili<br />
• Mo<strong>di</strong> <strong>di</strong> in<strong>di</strong>rizzamento<br />
• Facilità d’uso<br />
• ...<br />
8 M. Sonza Reorda - a.a. 2007/08
Formato delle istruzioni<br />
A livello <strong>di</strong> co<strong>di</strong>ce macchina, le istruzioni sono formate da 2<br />
parti:<br />
• il co<strong>di</strong>ce dell’operazione da svolgere (opcode)<br />
• le informazioni sugli operan<strong>di</strong>.<br />
A seconda del numero tipico <strong>di</strong> operan<strong>di</strong> ammesso in ogni<br />
istruzione si possono avere processori a 0, 1, 2 o 3 operan<strong>di</strong>.<br />
opcode operando 1 operando 2<br />
9 M. Sonza Reorda - a.a. 2007/08<br />
Mo<strong>di</strong> <strong>di</strong> in<strong>di</strong>rizzamento<br />
Rappresentano i mo<strong>di</strong> attraverso i quali è specificato il tipo<br />
ed il valore o la posizione <strong>di</strong> ciascun operando.<br />
I più frequenti sono:<br />
• in<strong>di</strong>rizzamento tramite registro<br />
• in<strong>di</strong>rizzamento imme<strong>di</strong>ato<br />
• in<strong>di</strong>rizzamento con accesso in memoria.<br />
10 M. Sonza Reorda - a.a. 2007/08
Accesso in memoria<br />
Laddove compare come operando un in<strong>di</strong>rizzo, questo può<br />
essere specificato in 2 mo<strong>di</strong>:<br />
• in<strong>di</strong>rizzamento <strong>di</strong>retto<br />
• in<strong>di</strong>rizzamento in<strong>di</strong>retto<br />
Ciascun in<strong>di</strong>rizzo può essere espresso in due mo<strong>di</strong>:<br />
• assoluto<br />
• relativo.<br />
11 M. Sonza Reorda - a.a. 2007/08<br />
In<strong>di</strong>rizzamento tramite registro<br />
L’operando è contenuto in un registro.<br />
Esempio<br />
MOV AX, 99<br />
In<strong>di</strong>rizzamento<br />
tramite<br />
registro<br />
12 M. Sonza Reorda - a.a. 2007/08
In<strong>di</strong>rizzamento imme<strong>di</strong>ato<br />
Il valore dell’operando è specificato <strong>di</strong>rettamente<br />
nell’istruzione.<br />
Esempio<br />
MOV AX, 99<br />
In<strong>di</strong>rizzamento<br />
imme<strong>di</strong>ato<br />
Il valore dell’operando è memorizzato nel co<strong>di</strong>ce macchina<br />
dell'istruzione.<br />
13 M. Sonza Reorda - a.a. 2007/08<br />
In<strong>di</strong>rizzamento <strong>di</strong>retto<br />
Nell’istruzione è specificato l’in<strong>di</strong>rizzo della cella <strong>di</strong><br />
memoria ove si trova l’operando.<br />
Esempio<br />
In<strong>di</strong>rizzamento<br />
<strong>di</strong>retto<br />
MOV xxxx, 57<br />
xxxx<br />
57<br />
Il valore dell’in<strong>di</strong>rizzo è memorizzato nel co<strong>di</strong>ce macchina<br />
dell'istruzione.<br />
14 M. Sonza Reorda - a.a. 2007/08
In<strong>di</strong>rizzamento in<strong>di</strong>retto<br />
Nell’istruzione è specificato l’in<strong>di</strong>rizzo <strong>di</strong> una cella <strong>di</strong><br />
memoria, in cui è scritto l’in<strong>di</strong>rizzo dell’operando.<br />
Esempio<br />
MOV [xxxx], 57<br />
xxxx<br />
yyyy<br />
In<strong>di</strong>rizzamento<br />
in<strong>di</strong>retto<br />
yyyy<br />
57<br />
15 M. Sonza Reorda - a.a. 2007/08<br />
In<strong>di</strong>rizzamento assoluto<br />
L’in<strong>di</strong>rizzo dell’operando è specificato per esteso<br />
nell’istruzione.<br />
Esempio<br />
MOV xxxx, 57<br />
xxxx<br />
57<br />
In<strong>di</strong>rizzamento<br />
assoluto<br />
16 M. Sonza Reorda - a.a. 2007/08
In<strong>di</strong>rizzamento relativo<br />
L’istruzione specifica dove si trova un valore, che<br />
corrisponde ad uno spiazzamento rispetto ad un certo<br />
in<strong>di</strong>rizzo <strong>di</strong> riferimento (base).<br />
Esempio<br />
R+D<br />
R<br />
D<br />
base<br />
spiazzamento<br />
Il valore dello spiazzamento è memorizzato nel co<strong>di</strong>ce<br />
macchina dell'istruzione.<br />
17 M. Sonza Reorda - a.a. 2007/08<br />
Esempio<br />
L’<strong>assembler</strong> 80x86 include l’in<strong>di</strong>rizzamento base-indexed:<br />
MOV [BX][SI], 57<br />
Tale modo <strong>di</strong> in<strong>di</strong>rizzamento si presta molto bene a<br />
scan<strong>di</strong>re vettori.<br />
18 M. Sonza Reorda - a.a. 2007/08
In<strong>di</strong>rizzamento relativo (II)<br />
Vantaggi:<br />
• minor lunghezza dell’istruzione<br />
• rilocabilità<br />
• facilità <strong>di</strong> scansione <strong>di</strong> vettori.<br />
Svantaggi:<br />
• complessità dell’hardware<br />
• maggiore tempo <strong>di</strong> esecuzione.<br />
19 M. Sonza Reorda - a.a. 2007/08<br />
Ortogonalità<br />
È una caratteristica <strong>di</strong> alcuni <strong>linguaggi</strong> Assembler, tale per<br />
cui ogni operando <strong>di</strong> ogni istruzione può essere espresso<br />
attraverso uno qualsiasi dei mo<strong>di</strong> <strong>di</strong> in<strong>di</strong>rizzamento.<br />
L’ortogonalità in generale riduce i costi <strong>di</strong><br />
programmazione, ma aumenta quelli dell’hardware.<br />
20 M. Sonza Reorda - a.a. 2007/08
Tipi <strong>di</strong> istruzioni<br />
Ogni processore ha il suo <strong>linguaggi</strong>o Assembler.<br />
Esistono tuttavia forti somiglianze tra i <strong>linguaggi</strong><br />
Assembler dei vari processori.<br />
Le caratteristiche <strong>di</strong> un buon <strong>linguaggi</strong>o sono:<br />
• completezza<br />
• efficienza<br />
• regolarità (ortogonalità)<br />
• compatibilità rispetto a precedenti versioni.<br />
21 M. Sonza Reorda - a.a. 2007/08<br />
Classi <strong>di</strong> istruzioni<br />
• Istruzioni <strong>di</strong> trasferimento dati<br />
• Istruzioni aritmetiche<br />
• Istruzioni logiche<br />
• Istruzioni per il controllo del programma<br />
• Istruzioni <strong>di</strong> Input/Output.<br />
22 M. Sonza Reorda - a.a. 2007/08
Il <strong>linguaggi</strong>o <strong>assembler</strong> Intel<br />
Verranno elencate le principali istruzioni che fanno parte<br />
del <strong>linguaggi</strong>o <strong>assembler</strong> supportato dai processori Intel, a<br />
partire dall’8086.<br />
23 M. Sonza Reorda - a.a. 2007/08<br />
Istruzioni <strong>di</strong> trasferimento dati<br />
MOV<br />
XCHG<br />
PUSH<br />
POP<br />
24 M. Sonza Reorda - a.a. 2007/08
Istruzioni aritmetiche<br />
ADD<br />
SUB<br />
MUL<br />
DIV<br />
INC<br />
DEC<br />
NEG<br />
25 M. Sonza Reorda - a.a. 2007/08<br />
Istruzioni logiche<br />
AND<br />
OR<br />
XOR<br />
NOT<br />
SHL, SHR<br />
RCL, RCR<br />
26 M. Sonza Reorda - a.a. 2007/08
Istruzioni per il controllo del<br />
programma<br />
JMP<br />
Jxx<br />
CALL<br />
RET<br />
CMP<br />
27 M. Sonza Reorda - a.a. 2007/08<br />
Istruzioni per il controllo del<br />
programma<br />
JMP<br />
Jxx<br />
CALL<br />
RET<br />
CMP<br />
Ad esempio:<br />
JE<br />
JNE<br />
JG<br />
JGE<br />
JL<br />
JLE<br />
JC<br />
JNC<br />
28 M. Sonza Reorda - a.a. 2007/08
Istruzioni <strong>di</strong> I/O<br />
IN<br />
OUT<br />
29 M. Sonza Reorda - a.a. 2007/08<br />
Istruzioni<br />
per il controllo del processore<br />
STI, CLI<br />
HALT<br />
WAIT<br />
NOP<br />
30 M. Sonza Reorda - a.a. 2007/08
Esempio<br />
Frammento <strong>di</strong> co<strong>di</strong>ce che esegue la somma degli elementi <strong>di</strong><br />
un vettore <strong>di</strong> 100 interi:<br />
…<br />
MOV SI, 0<br />
MOV AX, 0<br />
MOV<br />
BX, vett<br />
MOV CX, 100<br />
ciclo: ADD AX, [BX][SI]<br />
INC<br />
INC<br />
DEC<br />
SI<br />
SI<br />
CX<br />
CMP CX, 0<br />
JNE<br />
MOV<br />
ciclo<br />
somma, AX<br />
31 M. Sonza Reorda - a.a. 2007/08<br />
…