• Non ci sono risultati.

Università degli Studi di Udine

N/A
N/A
Protected

Academic year: 2021

Condividi "Università degli Studi di Udine"

Copied!
26
0
0

Testo completo

(1)

FONDAMENTI DI INFORMATICA

Prof. PIER LUCA MONTESSORO Facoltà di Ingegneria

Università degli Studi di Udine

Dal linguaggio macchina

(2)

Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio, musica e testo) sono di proprietà dell’autore prof. Pier Luca Montessoro, Università degli Studi di Udine.

Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca, scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di lucro. In tal caso non è richiesta alcuna autorizzazione.

Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non esplicitamente autorizzata per iscritto, a priori, da parte dell’autore.

L’informazione contenuta in queste slide è ritenuta essere accurata alla data della pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. L’autore non assume alcuna responsabilità per il contenuto di queste slide (ivi incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento dell’informazione).

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.

Nota di Copyright

(3)

Programma sorgente, compilatore, file oggetto, file eseguibile

programma sorgente (uno o più file ASCII)

compilatore

librerie (simili ai file oggetto)

...

...

linker

...

(4)

Traduzione effettuata dal compilatore

• Dichiarazione di variabili

– spazi di memoria, di dimensioni opportune, riservati ai dati

• Espressioni

– traduzione in sequenze di istruzioni aritmetico-logiche

• Istruzioni di controllo

– traduzione con sequenze di istruzioni di

controllo

(5)

Dichiarazione di variabili (esempi)

n: word 5 v: byte 0 byte 0 byte 0 byte 0 byte 0 int n = 5;

char v[5];

(6)

Espressioni (esempio)

n: word 0 x: word C y: word 40 ...

LDWI R0 3 LDWA R1 x ADD R1 R0 LDWA R1 y ADD R1 R0 STWA R0 n int n, x = 12, y = 64;

n = x + y + 3;

(7)

if <condizione>

{

<istruzioni>

}

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPZ cont

... ; istruzioni

cont: ... ; seguito del programma

Y N

(8)

if <condizione>

{

<istruzioni>

}

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPZ cont

... ; istruzioni

cont: ... ; seguito del programma

Y N

SE LA CONDIZIONE È VERA ...

(9)

if <condizione>

{

<istruzioni>

}

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPZ cont

... ; istruzioni

cont: ... ; seguito del programma

Y N

SE LA CONDIZIONE È FALSA ...

(10)

if <condizione> {

<istruzioni ramo then >

} else {

<istruzioni ramo else >

}

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPZ else

... ; istruzioni ramo “then”

... ; istruzioni ramo “then”

JMP cont

else: ... ; istruzioni ramo “else”

... ; istruzioni ramo “else”

cont: ... ; seguito del programma

Y N

(11)

if <condizione> {

<istruzioni ramo then >

} else {

<istruzioni ramo else >

}

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPZ else

... ; istruzioni ramo “then”

... ; istruzioni ramo “then”

JMP cont

else: ... ; istruzioni ramo “else”

Y N

SE LA CONDIZIONE È VERA ...

(12)

if <condizione> {

<istruzioni ramo then >

} else {

<istruzioni ramo else >

}

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPZ else

... ; istruzioni ramo “then”

... ; istruzioni ramo “then”

JMP cont

else: ... ; istruzioni ramo “else”

... ; istruzioni ramo “else”

cont: ... ; seguito del programma

Y N

SE LA CONDIZIONE È FALSA ...

(13)

while <condizione>

{

<istruzioni>

}

loop: ... ; valutazione della ... ; condizione

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPZ cont

... ; istruzioni del ciclo ... ; istruzioni del ciclo

Y

N

(14)

while <condizione>

{

<istruzioni>

}

loop: ... ; valutazione della ... ; condizione

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPZ cont

... ; istruzioni del ciclo ... ; istruzioni del ciclo JMP loop

cont: ... ; seguito del programma

Y

N

SE LA CONDIZIONE È VERA ...

(15)

while <condizione>

{

<istruzioni>

}

loop: ... ; valutazione della ... ; condizione

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPZ cont

... ; istruzioni del ciclo ... ; istruzioni del ciclo

Y

N

SE LA CONDIZIONE È FALSA ...

(16)

do {

<istruzioni>

} while <condizione>

loop: ... ; istruzioni del ciclo ... ; istruzioni del ciclo ... ; valutazione della

... ; condizione

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPNZ loop

cont: ... ; seguito del programma

Y N

(17)

do {

<istruzioni>

} while <condizione>

loop: ... ; istruzioni del ciclo ... ; istruzioni del ciclo ... ; valutazione della

... ; condizione

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

Y N

SE LA CONDIZIONE È VERA ...

(18)

do {

<istruzioni>

} while <condizione>

loop: ... ; istruzioni del ciclo ... ; istruzioni del ciclo ... ; valutazione della

... ; condizione

; l’espressione della condizione ha

; modificato il flag Z

; ipotesi: Z=0 → “vero”, Z=1 → → “falso”

JMPNZ loop

cont: ... ; seguito del programma

Y N

SE LA CONDIZIONE È FALSA ...

(19)

Funzioni: chiamata

• Per gestire le chiamate di funzioni viene utilizzato lo stack di sistema:

• push (variabili locali)

• copia degli argomenti della funzione in registri o aree di memoria convenzionali

• push (program counter corrente)

• program counter ← indirizzo della funzione

(20)

Funzioni: ritorno

• copia del valore di ritorno in un registro o area di memoria convenzionale

• program counter ← pop ()

• pop (variabili locali)

• L’utilizzo dello stack anche per le

variabili consente la ricorsione!

(21)

Esempio: Fibonacci

• Si scriva in linguaggio assembler una funzione recursiva che restituisca in R0 il valore del termine F n della

successione di Fibonacci il cui numero d’ordine, n, è passato alla funzione in R1

• Si ricorda che:

F 0 = 0

F = 1

(22)

Esempio: Fibonacci

• Partiamo dal programma in linguaggio C

• Nota: in questo esercizio, per semplicità, useremo soltanto variabili nei registri

(cioè non in memoria centrale) e non

faremo uso di funzioni di input/output

(23)

Esempio:

Fibonacci

int main() {

int R1 = 10;

int R0 = fibo (R1);

}

int fibo (int R1) {

if (R1 == 0) return 0;

if (R1 == 1) return 1;

return fibo (R1-1)

(24)

Esempio: Fibonacci (main)

; int main() ; {

START: LDWI R10 0F000 SPWR R10

LDWI R1 0A ; int R1 = 10;

CALL FIBO ; int R0 = fibo (R1);

HLT ; }

(25)

; int fibo (int R1) ; {

FIBO: MV R1 R2

JMPNZ CONT_1 ; if (R1 == 0) XOR R0 R0 ; return 0;

RET

CONT_1: LDWI R2 1 SUB R1 R2

JMPNZ CONT_2 ; if (R1 == 1) LDWI R0 1 ; return 1;

Funzione FIBO - Parte I

(26)

Funzione FIBO - Parte II

CONT_2: DEC R1 PUSH R1

CALL FIBO ; /* chiama fibo (R1-1); */

POP R1 MV R0 R2 DEC R1 PUSH R1 PUSH R2

CALL FIBO ; /* chiama fibo (R1-2); */

POP R2 POP R1

ADD R2 R0

RET ; return fibo (R1-1)

+ fibo (R1-2);

Riferimenti

Documenti correlati

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.. Nota

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.. In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.. Nota

In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste slide.. In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.. Nota

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.. Nota

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali.. Nota

In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono mai essere rimossi e devono essere riportati anche in utilizzi parziali. Nota