30.06.2015 Views

I linguaggi assembler - Politecnico di Torino

I linguaggi assembler - Politecnico di Torino

I linguaggi assembler - Politecnico di Torino

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!