Sommario Linguaggio Assembly e linguaggio...

19
L 11 – 1/38 A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI Architettura degli Elaboratori e delle Reti Lezione 11 Linguaggio Assembly e linguaggio macchina Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell’Informazione Università degli Studi di Milano L 11 – 2/38 A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI Sommario ! Il linguaggio assembly ! Il linguaggio macchina ! Insieme delle istruzioni ! Formato delle istruzioni ! Codifica delle istruzioni ! Modalità di indirizzamento

Transcript of Sommario Linguaggio Assembly e linguaggio...

Page 1: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 1/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Architettura degli Elaboratori e delle Reti

Lezione 11

Linguaggio Assembly elinguaggio macchina

Proff. A. Borghese, F. Pedersini

Dipartimento di Scienze dell’InformazioneUniversità degli Studi di Milano

L 11 – 2/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Sommario

! Il linguaggio assembly

! Il linguaggio macchina

! Insieme delle istruzioni

! Formato delle istruzioni

! Codifica delle istruzioni

! Modalità di indirizzamento

Page 2: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 3/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Linguaggio C: esempio

main()

{

int i;

int sum = 0;

for (i = 0; i <= 100; i = i + 1)

sum = sum + i*i;

printf(“La somma da 0 a 100 è %d\n”, sum);

}

L 11 – 4/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Linguaggio assembly: esempio

.text

.align 2

.globl mainmain:

subu $sp, $sp, 32sw $ra, 20($sp)sw $a0, 32 ($sp)sw $0, 24($sp)sw $0, 28($sp)

loop:lw $t6, 28($sp)lw $t8, 24($sp)mult $t4, $t6, $t6addu $t9, $t8, $t4addu $t9, $t8, $t7sw $t9, 24($sp)addu $t7, $t6, 1sw $t7, 28($sp)bne $t5, 100, loop

Page 3: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 5/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Codifica binaria: esempio

MIPS: istruzioni di 32 bit:

00: 001001111011110111111111111100000

04: 101011111011111100000000000010100

08: 101011111010010000000000000100000

0C: 101011111010010100000000000100100

10: 101011111010010100000000000100100

14: 101011111010010100000000000011000

18: ……………………

L 11 – 6/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Linguaggio Assembly

! ASSEMBLY: rappresentazione simbolica del linguaggio macchina

" Vero e proprio linguaggio di programmazione

" Più comprensibile del linguaggio macchina in quanto utilizza simboli invece chesequenze di bit

! Rispetto ai linguaggi ad alto livello…

" Linguaggio target nella compilazione di programmi in linguaggi ad alto livello (es: C,C++, Pascal, …)

" Assembly fornisce limitate forme di controllo del flusso

" non prevede articolate strutture dati

! SVANTAGGI:

" Mancanza di portabilità dei programmi

" Maggiore lunghezza e difficoltà di comprensione

! VANTAGGI: visibilità diretta dell’hardware

# Massimo sfruttamento delle potenzialità HW della macchina

# Ottimizzazione delle prestazioni

Page 4: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 7/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Assembly come linguaggio di programmazione

LIMITI:

! Le strutture di controllo hanno forme limitate

! Pochi tipi di dati: interi , virgola mobile , caratteri

! Gestione delle strutture dati e delle chiamate a procedura deve essere fatta in

modo esplicito dal programmatore

! In alcune applicazioni conviene un approccio ibrido:

" le parti più critiche del programma sono scritte in Assembly (per

massimizzare le prestazioni)

" le altre sono scritte in un linguaggio ad alto livello (prestazioni dipendono

dalle capacità di ottimizzazione del compilatore)

" Esempio: sistemi embedded, applicazioni in tempo reale

" COMPILATORI: sistemi “automatici” di traduzione da linguaggio ad alto

livello ad assembly/codice binario…

L 11 – 8/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Fase di compilazione da C ad assembly

Compilatore

Programma

in linguaggio

assembly (MIPS)

add $2, $2, $4

add $3, $3, $2

lw $15, 4($2)

Programma in

linguaggio ad

alto livello (C)

n_maschi = n_maschi + nuovoMaschio

n_femmine = n_femmine + nuovaFemmina

n_personePerEta = n_persone[eta]

Page 5: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 9/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

! Si consideri il seguente segmento di programma C:

" utilizza 5 variabili: f, g, h, i, j

f = (g + h) – (i + j)

! Il compilatore associa ad un’istruzione C complessa istruzioni

assembly a tre operandi e introduce due variabili temporanee (t0

e t1)

add t0, g, h # var. temp. t0 ! g + h

add t1, i, j # var. temp. t1 ! i + j

sub f, t0, t1 # f ! t0 – t1

Compilazione: da C ad assembly MIPS

L 11 – 10/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Sommario

! Il linguaggio assembly

! Il linguaggio macchina

! Insieme delle istruzioni

! Formato delle istruzioni

! Codifica delle istruzioni

! Modalità di indirizzamento

Page 6: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 11/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Linguaggio macchina

Linguaggio macchina:

il linguaggio di programmazione

direttamente comprensibile dalla macchina

" Alfabeto binario (alfabeto posizionale)

" Parole sono le istruzioni

" Vocabolario è l’insieme delle istruzioni

(Instruction Set)

L 11 – 12/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Da assembly a linguaggio macchina

Assembler

Programma

in linguaggio

assembly (MIPS)

add $2, $4, $2

add $3, $3, $2

lw $15, 4($2)

011100010101010000110101000111000010000010000001000100010000

Programma

in linguaggio

macchina

! Compilazione effettuata dall’ ASSEMBLER

Page 7: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 13/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Linguaggio macchina: architettura

! Ogni architettura di processore ha il proprio linguaggio

macchina

" Architettura definita dall’ insieme delle istruzioni

" Due processori con la stessa architettura hanno lo stesso

linguaggio macchina anche se le implementazioni

hardware possono essere diverse

! ISA (Instruction Set Architecture)

L’insieme delle istruzioni-macchina eseguibili

da una architettura di processore.

L 11 – 14/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Sommario

! Il linguaggio assembly

! Il linguaggio macchina

! Insieme delle istruzioni (ISA)

! Formato delle istruzioni

! Codifica delle istruzioni

! Modalità di indirizzamento

Page 8: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 15/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Insieme delle istruzioni: ISA

instruction (ISA)

software

hardware

Quale è più facile modificare?

L 11 – 16/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

L’insieme delle istruzioni (ISA)

! Le istruzioni del linguaggio macchina di ogni calcolatore

possono essere classificate nelle seguenti

! Quattro categorie:

1.Istruzioni aritmetico-logiche;

2.Istruzioni di trasferimento da/verso la memoria;

3.Istruzioni di salto condizionato e non condizionato per il

controllo del flusso di programma;

4.Istruzioni di trasferimento in ingresso/uscita (I/O).

Page 9: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 17/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Trasferimento da/verso memoria

! ESECUZIONE istruzione LOAD/STORE:

1.Trasferire l’istruzione dalla memoria alla CPU

2.Operandi e risultati delle istruzioni devono essere

trasferiti tra memoria e CPU

! Necessarie diverse modalità di trasferimento di

dati/istruzioni tra memoria e registri della CPU:

" load (caricamento) o fetch (prelievo) o read (lettura)

" store (memorizzazione) o write (scrittura)

L 11 – 18/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Istruzioni aritmetiche

! Ogni istruzione aritmetica ha

un numero prefissato di operandi

" generalmente tre

! L’ordine degli operandi è fisso:

" Prima il risultato (registro destinazione)

" Poi i due operandi (registri sorgente)

" In alcuni casi il registro destinazione è implicito

• (es. moltiplicazione e divisione non floating point)

Page 10: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 19/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Istruzioni di salto (condizionato e non)

! ESECUZIONE

Nel registro contatore di programma (PC – Program Counter) viene

caricato l’indirizzo di salto

" invece dell’indirizzo seguente secondo l’ordine sequenziale delle

istruzioni.

! Istruzioni di salto condizionato (branch):

" il salto viene eseguito solo se una certa condizione risulta soddisfatta.

! Istruzioni di salto incondizionato (jump):

" il salto viene sempre eseguito.

L 11 – 20/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Sommario

! Il linguaggio assembly

! Il linguaggio macchina

! Insieme delle istruzioni

! Formato delle istruzioni

! Codifica delle istruzioni

! Modalità di indirizzamento

Page 11: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 21/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

MIPS: architettura RISC

! Caratteristiche principali di ISA di tipo RISC:

" Istruzioni dell’ISA eseguite direttamente dall’hardware

" Massimizzazione della velocità di completamento delle

istruzioni

" Istruzioni facili da decodificare

• “poche”, poco “varie”, tutte di uguale lunghezza

• Accesso alla memoria solo con istruzioni dedicate dicaricamento/memorizzazione (load/store)

• Gli operandi di un’istruzione devono sempre risiedere nei registridel processore.

L 11 – 22/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

I registri

! Il compilatore associa le variabili di programma a registri

! Un processore possiede un numero limitato di registri

" MIPS: 32 registri di 32-bit (register file)

! Per convenzione si usano nomi simbolici preceduti da $ perdenotare i registri, ad esempio:

$s0,$s1,...,$s7 Per indicare variabili

$t0, $t1, ... $t9 Indica variabili temporanee

! I registri possono essere anche direttamente indicati mediante il loronumero (0, …, 31) preceduto da $$::

ad ad eses.. $0, $1, $0, $1, ……, $31, $31

Page 12: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 23/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

MIPS: Convenzioni d’uso dei registri

Nome Numero Utilizzo

$zero 0 costante zero $at 1 riservato per l’assemblatore $v0-$v1 2-3 valori di ritorno di una procedura $a0-$a3 4-7 argomenti di una procedura $t0-$t7 8-15 registri temporanei (non salvati) $s0-$s7 16-23 registri salvati

$t8-$t9 24-25 registri temporanei (non salvati) $k0-$k1 26-27 gestione delle eccezioni

$gp 28 puntatore alla global area (dati)

$sp 29 stack pointer $s8 30 registro salvato (fp) $ra 31 indirizzo di ritorno

L 11 – 24/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Registri speciali MIPS

! Registri “special purpose”, per l’esecuzione dioperazioni particolari:

! MIPS: 32 registri per le operazioni floating point(in virgola mobile)

$f0, …, $f31

" Per le operazioni in doppia precisione si usano registricontigui:

$f0, $f2, $f4,…

Page 13: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 25/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Compilazione C ! Assembly usando i registri

! Si consideri il seguente segmento di programma C che utilizza 5 variabili:

f = (g + h) – (i + j)

! Il compilatore associa alle variabili presenti nel programma i registri presentinella CPU.

" Ad es: variabili f, g, h, i e j associate ai registri

$s0, $s1, $s2, $s3, $s4

! Il compilatore introduce due variabili temporanee (t0 e t1) che associa a dueregistri temporanei $t0 e $t1:

add $t0, $s1, $s2 # var. temp. t0 ! g + h

add $t1, $s3, $s4 # var. temp. t1 ! i + j

sub $s0, $t0, $t1 # f ! t0 – t1

L 11 – 26/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Formato di un’istruzione

Formato e codifica

di un’istruzione

" Tipo e dimensione

istruzione

" Posizione degli operandi e

risultato

" Tipo e dimensione dei dati

" Operazioni consentite

Fase di fetch

Decodifica

Esecuzione

Lettura / scrittura

Write back

Ciclo di esecuzionedi un’istruzione

Page 14: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 27/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Formato delle istruzioni MIPS

! Tutte le istruzioni MIPS hanno la stessa dimensione: 32 bit

" I 32 bit hanno un significato diverso a seconda del formato (o tipo)

di istruzione

" il tipo di istruzione è riconosciuto in base al valore di alcuni dei bit

più significativi

(6 bit: codice operativo - OPCODE)

! Le istruzioni MIPS sono di 3 tipi ! 3 formati

" Tipo R (register) Istruzioni aritmetico-logiche

" Tipo I (immediate) Istruzioni di accesso alla memoria

o contenenti delle costanti

" Tipo J (jump) Istruzioni di salto

L 11 – 28/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

I tipi di istruzione MIPS

! Tipi di istruzioni

" Istruzioni aritmetico-logiche

" Istruzioni di trasferimento dati

" Istruzioni di salto

Page 15: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 29/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Istruzioni aritmetico-logiche

! MIPS: un’istruzione aritmetico-logica possiede tre operandi:

" due registri contenenti i valori da elaborare (registri sorgente)

" il registro contenente il risultato (registro destinazione)

! L’ordine degli operandi è fisso

" Prima il registro contenente il risultato, poi i due operandi

! Struttura istruzione assembly:

codice operativo e tre campi relativi ai tre operandi:

OPCODE DEST, SORG1, SORG2

32 bit

L 11 – 30/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Istruzione add

! add : somma

add rd, rs, rt

" somma il contenuto di due registri sorgente rs e rt

" e mette la somma nel registro destinazione: rd

add rd, rs, rt # rd " rs + rt

Opcode (6 bit)

Page 16: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 31/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Istruzione sub

sub: Sottrazione

sub rd rs rt

! sottrae il contenuto di due registri sorgente rs e rt

! e mette la differenza nel registro destinazione rd

sub rd, rs, rt # rd " rs - rt

Opcode (6 bit)

L 11 – 32/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Istruzioni aritmetico-logiche

! Operazioni con un numero di operandi maggiore di tre

devono essere scomposte in operazioni più semplici

" Ad esempio, per eseguire la somma delle variabilib,c,d,e nella variabile a servono tre istruzioni:

Codice C: A = B + C + D + E

Assembly MIPS: add $t0$t0, $s1$s1, $s2$s2

add $t0$t0, $t0$t0, $s3$s3

add $s0$s0, $t0$t0, $s4$s4

Page 17: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 33/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

add: varianti

addi $s1, $s2, 100 #add immediate

" Somma una costante: il valore del secondo operando

(ultimi 16 bit) è presente nell’istruzione come costante e

sommata considerando il segno

addu $$s0, $s1, $$s2 #add unsigned

" La somma viene eseguita tra numeri senza segno

addiu $$s0, $s1, 100 #add immediate unsigned

" Somma una costante

L 11 – 34/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Moltiplicazione

! Due istruzioni:

mult rs rtmultu rs rt # unsigned

! Il registro destinazione è implicito.

" Il risultato della moltiplicazione viene posto sempre in due registri

dedicati (special purpose):

hi (high-order word)

lo (low-order word)

" La moltiplicazione di due numeri di 32 bit dà come risultato un

numero rappresentabile in 64 bit

Page 18: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 35/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Moltiplicazione

! Il risultato della moltiplicazione si preleva dal registro hi e

dal registro lo utilizzando le due istruzioni:

mfhi rd # move from hi: rd $ hi

mflo rd # move from lo: rd $ lo

L 11 – 36/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Divisione

! Due istruzioni:

div rs rt # divide rs per rt

divu rs rt # unsigned

! Come nella moltiplicazione, anche nella divisione ilregistro destinazione è implicito.

" Quoziente della divisione nel registro lo

" Resto è posto nel registro hi

Page 19: Sommario Linguaggio Assembly e linguaggio macchinahomes.di.unimi.it/~pedersin/AER/AER06_L11_Assembly1.pdf · Title: L11_Assembly1 Author: Federico Pedersini - Dip. Scienze dell'Informaizone

L 11 – 37/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Pseudoistruzioni

! Per semplificare la programmazione, MIPS fornisce un

insieme di pseudoistruzioni

! Modo compatto ed intuitivo di specificare un insieme di

istruzioni assembly elementari

" Non hanno un corrispondente 1 a 1 con le istruzioni

dell’ISA.

" Traduzione della pseudoistruzione nelle istruzioni

equivalenti viene attuata automaticamente

dall’assembler

L 11 – 38/38A.A. 2005/06 Copyright : A. Borghese, F. Pedersini – DSI, UniMI

Esempio

move $t0, $t1 # t0 $ t1

add $t0, $zero, $t1

mul $s0, $t1, $t2 # s0 $ t1*t2

mult $t1, $t2

mflo $s0

div $s0, $t1, $t2 # s0 $ t1/t2

div $t1, $t2

mflo $s0