Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1
FONDAMENTI DI INFORMATICA
Prof. PIER LUCA MONTESSORO Facoltà di Ingegneria Università degli Studi di Udine
Dal linguaggio macchina al linguaggio C
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Questo insieme d i 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 d i 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 a l 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 d i 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 d i impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza preavviso. L’autore non assume alcuna responsabilità per il contenuto d i 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
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 3
Programma sorgente, compilatore, file oggetto, file eseguibile
programma sorgente (uno o più file ASCII)
compilatore
file oggetto (binari )
librerie (simili ai file oggetto )
file eseguibile (binario)
...
...
linker
...
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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];
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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;
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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 ...
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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 ...
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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”
... ; istruzioni ramo “else”
cont: ... ; seguito del programma
Y N
SE LA CONDIZIONE È VERA ...
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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 ...
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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 JMP loop
cont: ... ; seguito del programma Y
N
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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 ...
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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 JMP loop
cont: ... ; seguito del programma Y
N
SE LA CONDIZIONE È FALSA ...
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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”
JMPNZ loop
cont: ... ; seguito del programma
Y N
SE LA CONDIZIONE È VERA ...
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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 ...
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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!
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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 = 1
F n = F n-1 + F n-2
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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) + fibo (R1-2);
}
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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 ; }
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 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;
RET
Funzione FIBO - Parte I
Fondamenti di Informatica - Dal linguaggio macchina al linguaggio C
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 26