FODAMETI DI IFORMATICA Prof. PIER LUCA MOTESSORO Facoltà di Ingegneria Università degli Studi di Udine Dal linguaggio macchina al linguaggio C 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1 ota di Copyright 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 riprotte 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, protti, 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. 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2 Programma sorgente, compilatore, file oggetto, file eseguibile programma sorgente (uno o più file ASCII) compilatore file oggetto (binari) librerie (simili ai file oggetto) linker file eseguibile (binario) 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 3 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 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 4 Dichiarazione di variabili (esempi) Espressioni (esempio) int n = 5; char v[5]; n: word 5 v: int n, x = 12, y = 64; n = x + y + 3; 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 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 5 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 6 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 1
SE LA CODIZIOE È VERA ; istruzioni ; istruzioni 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 7 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 8 SE LA CODIZIOE È FALSA ; istruzioni 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 9 else else: ; istruzioni ramo else ; istruzioni ramo else 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 10 else SE LA CODIZIOE È VERA else: ; istruzioni ramo else ; istruzioni ramo else 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 11 else SE LA CODIZIOE È FALSA else: ; istruzioni ramo else ; istruzioni ramo else 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 12 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 2
loop: ; valutazione della 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 13 SE LA CODIZIOE È VERA loop: ; valutazione della 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 14 SE LA CODIZIOE È FALSA loop: ; valutazione della 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 15 loop: ; valutazione della JMPZ loop 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 16 SE LA CODIZIOE È VERA loop: ; valutazione della JMPZ loop 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 17 SE LA CODIZIOE È FALSA loop: ; valutazione della JMPZ loop 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 18 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 3
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 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! 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 19 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 20 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 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 21 Partiamo dal programma in linguaggio C ota: in questo esercizio, per semplicità, useremo soltanto variabili nei registri (cioè non in memoria centrale) e non faremo uso di funzioni di input/output 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 22 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; (main) ; int main() ; START: LDWI R10 0F000 SPWR R10 LDWI R1 0A ; int R1 = 10; CALL FIBO ; int R0 = fibo (R1); HLT ; return fibo (R1-1) + fibo (R1-2); 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 23 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 24 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 4
Funzione FIBO - Parte I ; int fibo (int R1) ; FIBO: MV R1 R2 JMPZ COT_1 ; if (R1 == 0) XOR R0 R0 ; return 0; COT_1: LDWI R2 1 SUB R1 R2 JMPZ COT_2 ; if (R1 == 1) LDWI R0 1 ; return 1; 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 25 Funzione FIBO - Parte II COT_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 ; return fibo (R1-1) + fibo (R1-2); ; 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 26 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2) 5