120 likes | 275 Views
Codifica di algoritmi linguaggio macchina vs programmazione strutturata. Lab Programmazione - turno 1 2005/2006. Linguaggi macchina e assembler. Il set di istruzioni direttamente eseguibili dalla CPU di un elaboratore è abbastanza limitato
E N D
Codifica di algoritmilinguaggio macchinavsprogrammazione strutturata Lab Programmazione - turno 1 2005/2006
Linguaggi macchina e assembler • Il set di istruzioni direttamente eseguibili dalla CPU di un elaboratore è abbastanza limitato • istruzioni di trasferimento dati tra RAM e registri CPU • istruzioni aritmetico-logiche (che operano su dati trasferiti nei registri CPU) • istruzioni di controllo e salto (permettono di modificare l’ordine sequenziale di esecuzione) • linguaggi assembler: codifica mnemonica dei linguaggi macchina (si usano nomi per denotare il tipo di istruzione, i registri, e le locazioni di memoria contenenti i dati) Lab Programmazione L. Capra
Un linguaggio assembler generico • Faremo riferimento ad una generica CPU con 4 soli registri (R1,R2,R3,R4) ed il seguente set di istruzioni: • trasferimento dati CPU – RAM: LOAD, STORE, es. LOAD R1 , x % x ad es. denota la locazione n. 102 % • aritmetico logiche: ADD,DIV,MUL,SUB: es. ADD R1,R2 % risultato in R1% • controllo/salto: JUMP,JZERO: es. … JZEROR2, alfa % se R2 == 0 salta all’etichetta alfa% DIVR1,R2 … alfa: … Lab Programmazione L. Capra
Un semplice algoritmo • Esercizio: vogliamo calcolare xy, dove x,y: Int, y 0 • assumiamo che in due locazioni omonime si trovino i valori corrispondenti • Usiamo la definizione xy = • Idea base: memorizziamo in un registro (R3) risultato parziale della moltiplicazione 1 se y = 0 x x… x se y > 0 { y volte Lab Programmazione L. Capra
Caricamento dati LOAD R1, y % valore loc. y caricato in R1% LOAD R2, x % valore loc. x caricato in R2% LOAD R3, #1 % val. 1 memorizzato in R3% LOAD R4, #1 % val. 1 memorizzato in R4 % …. Lab Programmazione L. Capra
Prima parte (caso y = 0) LOAD R1, y % valore loc. y caricato in R1% LOAD R2, x % valore loc. x caricato in R2% LOAD R3, #1 % val. 1 memorizzato in R3% LOAD R4, #1 % val. 1 memorizzato in R4 % loop :JZERO R1, fine % se R1 = 0 vai a fine% …. fine:PRINT R3 Lab Programmazione L. Capra
Seconda parte (caso y > 0) LOAD R1, y % valore loc. y caricato in R1% LOAD R2, x % valore loc. x caricato in R2% LOAD R3, #1 % val. 1 memorizzato in R3% LOAD R4, #1 % val. 1 memorizzato in R4 % loop :JZERO R1, fine % se R1 = 0 vai a fine% JUMP loop % ritorna a loop% fine:PRINT R3 Lab Programmazione L. Capra
Seconda parte (caso y > 0) LOAD R1, y % valore loc. y caricato in R1% LOAD R2, x % valore loc. x caricato in R2% LOAD R3, #1 % val. 1 memorizzato in R3% LOAD R4, #1 % val. 1 memorizzato in R4 % loop :JZERO R1, fine % se R1 = 0 vai a fine% MUL R3, R2 % moltiplica per x risultato parz.% JUMP loop % ritorna a loop% fine:PRINT R3 Lab Programmazione L. Capra
Seconda parte (caso y > 0) LOAD R1, y % valore loc. y caricato in R1% LOAD R2, x % valore loc. x caricato in R2% LOAD R3, #1 % val. 1 memorizzato in R3% LOAD R4, #1 % val. 1 memorizzato in R4 % loop :JZERO R1, fine % se R1 = 0 vai a fine% MUL R3, R2 % moltiplica per x risultato parz.% SUB R1, R4 JUMP loop % ritorna a loop% fine:PRINT R3 Lab Programmazione L. Capra
Codifica algoritmo ad alto livello • Usiamo uno pseudo-linguaggio di alto livello per implementare lo stesso calcolo • Strutture di controllo (sintassi) • Selezione SEcondizione ALLORA istruzione1 ALTRIMENTI istruzione2 FINESE • Iterazione QUANDOcondizioneESEGUI istruzione RIPETI Lab Programmazione L. Capra
Codifica ad alto livello (1) VAR x,y,r: INT leggi x , y r = 1 QUANDO y > 0 ESEGUI r = r * x y = y – 1; RIPETI scrivi r Lab Programmazione L. Capra
Codifica ad alto livello (2) VAR x,y,r: INT leggi x , y SE y < 0 oppure (x == 0 e y ==0) ALLORA scrivi “parametri non corretti” ALTRIMENTI r = 1 QUANDO y > 0 ESEGUI r = r * x y = y – 1; RIPETI scrivi r FINESE Lab Programmazione L. Capra