Architettura degli Elaboratori II (canale P-Z) Istruzioni di controllo Dott. Franco Liberati.

Slides:



Advertisements
Presentazioni simili
INFORMATICA Strutture condizionali
Advertisements

Programma: main() { istruzioni } ; assegnazione condizione ciclo istruzione: ;
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità F2 Selezione.
Selezione - approfondimento
PROGRAMMARE IN PASCAL (le basi)
Universita di Camerino
MATLAB.
Algoritmi e Programmazione
Informatica Generale Marzia Buscemi
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture di controllo Ing.
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Strutture di controllo Ing. Simona Colucci.
Ottimizzazione statica del codice per processori pipelined Canella Matteo & Miglioli Filippo.
Chiamate a Procedure. Per lesecuzione di una procedura, un programma deve eseguire i seguenti sei passi: mettere i parametri in un posto dove la procedura.
SPIM Esercizi. Esercizio 7 – load/store Il codice deve: Inserire in memoria la word 0x a Leggere questo dato e inserirlo in s0 Sommarci 5 Salvare.
INFORMATICA Strutture iterative
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
Tipi di dato e controllo del flusso Dott. Ing. Leonardo Rigutini Dipartimento Ingegneria dellInformazione Università di Siena Via Roma 56 – – SIENA.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli.
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Funzioni.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Informatica (Programmazione) Lezione 11 (19 novembre 2008) Programmazione in Java: controllo del flusso (iterazione)
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
Programmazione Un programma descrive al computer, in estremo dettaglio, la sequenza di passi necessari a svolgere un particolare compito L’attività di.
Introduzione alla programmazione lll
ITERAZIONE e RICORSIONE (eseguire uno stesso calcolo ripetutamente) ITERAZIONE: ripetere piu volte una sequenza di operazioni istruzioni: for, while, do.
Somma = A + B start Stampa Somma Leggi A,B stop Sub SOMMA( ) Dim A, B as Integer A = InputBox("Immetti un numero") B = InputBox(Immetti un secondo numero)
Lezione 4: Costrutti Condizionali Prof. Raffaele Montella.
Codifica di algoritmi linguaggio macchina vs programmazione strutturata Lab Programmazione - turno /2006.
Istruzioni di selezione in Java Programmazione Corso di laurea in Informatica.
Istruzioni Iterative Nicola Fanizzi
10) switch, else if e ifdef. Lab.Calc.I AA2002/03 - cap.102 espressione condizione.
Strutture di controllo nel C
RICORSIONE & ITERAZIONE
2000 Prentice Hall, Inc. All rights reserved. Capitolo 3 (Deitel) Lo sviluppo di programmi strutturati Indice degli argomenti Introduzione 3.2 -
Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli
CODIFICA Da flow-chart a C++.
Laboratorio di Informatica INF3 INTDER01 Prodotto da Generali Matteo e da Zaniboni Filippo.
Strutture di Controllo
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
Parte 4 Elementi di Informatica di base
Laboratorio di Informatica1 Parte 4 Laboratorio di Informatica Dott.ssa Elisa Tiezzi Dott.ssa Elisa Mori.
Capitolo 4 (Deitel) Le strutture di controllo in C
1 Università di Pavia - corso di Calcolatori Elettronici C code: L1:g = g + A[i]; i = i + j; if (i != h) goto L1; MIPS code: L1:add $t1, $s3, $s3# $t1.
Arch. Elab. - S. Orlando 1 Esercitazione su Instruction Level Parallelism Salvatore Orlando.
Calcolatori Elettronici Assemblatore, Linker e Loader
Corso JAVA Lezione n° 03 Istituto Statale di Istruzione Superiore “F. Enriques”
Introduzione a Javascript
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Strutture di controllo Esercizi!. Utilizzare i metodi: I modi per poter richiamare un metodo, di una classe (ad esempio SavitchIn) sono due. 1) E’ sempre.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Programmazione Assembly
Tecnologie Informatiche ed Elettroniche per le Produzioni Animali
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
1 Fabio Scotti – Università degli Studi di Milano Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( )
L’esecuzione dei programmi
SPIM Esercizi. Esercizio 1 – il comando ‘li’ Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Esercitazione 4 Chiamate di procedure Claudia Raibulet
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Diagrammi a blocchi.
Corso di Laurea in Informatica Architettura degli elaboratori a.a Programmazione Assembly: procedure (1) Supporto hardware alle procedure Passaggio.
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata (3) Istruzioni J-type Istruzioni di salto Istruzioni.
Cicli e Array. 2 Costrutto while while(espressione) { … } Il codice dentro le parentesi graffe viene eseguito finché la condizione è vera Potrebbe non.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Corso di Laurea in Informatica Architettura degli elaboratori a.a ISA e Asm: esempi e suggerimenti.
Transcript della presentazione:

Architettura degli Elaboratori II (canale P-Z) Istruzioni di controllo Dott. Franco Liberati

Argomenti Istruzione IF Ciclo FOR Istruzione SWITCH Ciclo WHILE Ciclo LOOPLOOPWHILE SWITCH FOR IF

Istruzioni di controllo Le istruzioni formano sempre una sequenza che corrisponde allordine in cui vengono eseguite Il microprocessore non ha una visione di insieme del programma: vede solo listruzione che deve eseguire e il contenuto dei registri. Esegue una istruzione alla volta nellordine scritto in memoria Fanno eccezione le istruzioni di salto che fanno proseguire lesecuzione allindirizzo specificato Listruzione che viene eseguita dopo un salto è quella che si trova allindirizzo specificato come destinazione del salto. Se il salto è condizionato e la condizione è falsa si prosegue normalmente con listruzione successiva. Lintero programma è una sequenza di istruzioni; con i salti si possono controllare lordine di esecuzione

IF Si esegue del codice solo se una condizione (espressione) è vera Ifespressioneistruzione If (espressione) istruzione In assembler 1.Codice per valutare lespressione e mettere il risultato in un registro (o due) 2.Salto condizionato per saltare il codice opzionale se la condizione è falsa 3.Codice opzionale da eseguire solo quando la condizione è vera If (x>0) {y=x+2;}

IF : esempio Se x > 0 allora y = x+2 (altrimenti y resta invariato).text.globl main main: lw $t0,x # carica x lw $t1,y # carica y blez $t0,endif # salto se condizione falsa add $t1,$t0,2 # codice se condizione vera endif: # fine if sw $t1,y # salva $t1 in y break.data x:.word 5 # valore y:.word 0 # y = x+2 se x>0; y = 0 If (x>0) {y=x+2;}

IF (estensione) Ifespressione istruzione istruzione istruzione } If (espressione) { istruzione istruzione istruzione } Si esegue del codice solo se una condizione (espressione) è vera In assembler 1.Codice per valutare lespressione e mettere il risultato in un registro (o due) 2.Salto condizionato per saltare il codice opzionale se la condizione è falsa 3.Codice opzionale da eseguire solo quando la condizione è vera If (x>0) { x=x+2; y=y·10; }

IF (estensione) : esempio Se x > 0 allora x = x+2; y=x ·10 (altrimenti y resta invariato).text.globl main main: lw $t0,x # carica x lw $t1,y # carica x blez $t0,endif # salto se condizione falsa add $t0,$t0,2 # codice se condizione vera mul $t1,$t0,10# codice se condizione vera endif: # fine if sw $t1,y # salva $t1 in variabile y break.data x:.word 5 # valore y:.word 0 # y = x+2 se x>0; y = 0 If (x>0) { x=x+2; y=y·10; }

IF… ELSE Ifespressioneistruzione If (espressione) istruzione else istruzione Si esegue del codice solo se una condizione (espressione) è vera altrimenti si esegue altro codice In assembler 1.Codice per valutare lespressione e mettere il risultato in un registro (o due) 2.Salto condizionato per saltare il ramo then se la condizione è falsa 3.Codice da eseguire solo quando la condizione è vera (ramo then) 4.Salto per evitare di eseguire anche il ramo else 5.Codice da eseguire solo quando la condizione è falsa (ramo else) Posso scambiare i due rami (punti 3 e 5) se salto quando la condizione è vera If (x>0) {y=x+2;} else {y=x-2;}

IF…ELSE : esempio Se x > 0 allora y = x+2 altrimenti y=x-2.text.globl main main: lw $t0,x # carica x lw $t1,y # carica y blez $t0,else # salto se condizione falsa add $t1,$t0,2 # se non è vero j fine# salto del then else: # else sub $t1,$t0,2# y=x-2 fine: sw $t1,y # salva $t1 in y break.data x:.word 5 # valore y:.word 0 # y = x+2 se x>0; y = 0 If (x>0) {y=x+2;} else {y=x-2;}

IF ANNIDATI Un if annidato è unistruzione if che è controllata da un altro if o da un else Ifespr1 Ifespr2istr1 Ifespr3istr2 //questo if elseespr4istr3 // è associato a questo else If (espr1) { If (espr2) istr1 If (espr3) istr2 //questo if else (espr4) istr3 // è associato a questo else } elseespr5istr4 else (espr5) istr4 In assembler applicare ricorsivamente i due schemi di soluzione già visti nei due lucidi precedenti codice complicato e poco chiaro If (x>0) { if (y>=0){y=x·2;} else{y=-x;} } else {y=y+1;}

IF ANNIDATI : esempio Se x > 0 allora (ramo then 1 che contiene scelta annidata) se y >= 0 allora y = x·2 (ramo then 2) altrimenti y = -x (ramo else 2) altrimenti incrementa y (ramo else 1) lw $t0,x # Carica x lw $t1,y # Carica y blez $t0,else1 # Salta se la cond1 falsa bltz $t1,else2 # Salta se la cond2 falsa mul $t1,$t0,2 # Ramo then2: $t1 = x*2 j end # Salta fine else2: neg $t1,$t0 # Ramo else2: $t1 =-x j end # Salta fine else1: addi $t1,$t1,1 # Ramo else1:$t1=y+1 end: sw $t1, y # Scrive $t1 in y If (x>0) { if (y>=0){y=x·2;} else{y=-x;} } else {y=y+1;}

SWITCH Il valore di una espressione viene confrontato in successione con un elenco di costanti. Quando un confronto ha successo viene eseguita listruzione associata switchespressione case 1:istruzione salto_a_fine_switch case 2:istruzione salto_a_fine_switch … case n:istruzione salto_a_fine_switch default: istruzione salto_a_fine_switch switch (espressione) case 1: istruzione salto_a_fine_switch case 2: istruzione salto_a_fine_switch … case n: istruzione salto_a_fine_switch default: istruzione salto_a_fine_switch In assembler Si usa la variabile come indice per caricare dalla tabella lindirizzo del codice dove saltare NB: viene fatto un solo test anziché uno per ogni ramo, riducendo la complessità da lineare a costante. Switch(op) { case 0: y=x·3 case 1: y=x+5 case 2: y=-x default:y=x }

SWITCH : esempio se op = 0 allora y = x·3 se op = 1 allora y = x+5 se op = 2 allora y = -x altrimenti y = x lw $t1,x lw $t0,op bge $t0,3,default # Salta a default se op >= 3 sll $t0,$t0,2 # $t0 = op*4 lw $t0,stable($t0) # $t0 = (stable+op*4) jr $t0 # Salta al case corrispondente a op case0:mul $t2,$t1,3 # $t2 = x*3 j end case1:addi $t2,$t1,5 # $t2 = x+5 j end case2:div $t2,$t1,2 # $t2 = x/2 j end default: move $t2,$t1 # $t2 = x end:sw $t2,y # Scrive $t2 in y.data # oltre a op, x e y stable:.word case0,case1,case2 Switch(op) { case 0: y=x·3 case 1: y=x+5 case 2: y=-x default:y=x }

WHILE Si vuole eseguire più volte del codice finché una espressione è vera. Non si sa se lespressione è vera allinizio (quindi va controllata prima di eseguire il codice) whileespressione while (espressione) {istruzione1istruzione2…istruzionen } In assembler 1.Codice per valutare lespressione e mettere il risultato in un registro (o due) 2.Salto condizionato per saltare il codice da ripetere se la condizione è falsa 3.Codice da ripetere finché la condizione è vera 4.Salto al punto 1 in modo da poter eseguire il codice unaltra volta oppure 5.Salto condizionato al punto 3 per eseguire unaltra volta se la condizione è vera While(x>0) { y=y+x; x=x-1; }

WHILE : esempio Finché x > 0 lo sommo a y (y = y + x) e lo decremento (x = x – 1) lw $t0,x # Carica x lw $t1,y # Carica y blez $t0,end # Salta se condizione è falsa while: # (Inizio ciclo) add $t1,$t1,$t0 # Effettua sommatoria sub $t0,$t0,1 # Sottrae uno bgtz $t0,while # Esegue ciclo finché cond. vera end: sw $t1,y # Salva risultato in y While(x>0) { y=y+x; x=x-1; }

DO … WHILE (LOOP) Si vuole eseguire più volte del codice finché una espressione è vera. Si sa se che lespressione è vera allinizio (quindi si esegue il codice e poi si controlla lespressione) do do {istruzione1istruzione2…istruzionen } whileespressione while (espressione) In assembler Inizializzare i registri che servono prima di iniziare il ciclo 1. Codice da ripetere finché la condizione è vera 2. Codice per valutare lespressione e mettere il risultato in un registro (o due) 3. Salto condizionato al punto 1 per eseguire unaltra volta se la condizione è vera do{ y=y+x; x=x-1; } while (x>0)

DO … WHILE (LOOP) : esempio Finché x > 0 lo sommo a y (y = y + x) e lo decremento (x = x – 1) lw $t0,x# Carica x lw $t1,y# Carica y dowhile:# (Inizio ciclo) add $t1,$t1 $t0# Effettua sommatoria sub $t0,$t0,1 # Decrementa x bgtz $t0,dowhile # Riesegue ciclo finché cond. vera sw $t1,y # Salva risultato in y do{ y=y+x; x=x-1; } while (x>0)

FOR Si vuole eseguire più volte del codice finché una espressione è vera. Si sa se che lespressione è vera allinizio (quindi si esegue il codice e poi si controlla lespressione) For (inzializzazione, condizione, incremento) istruzione In assembler Inizializzare i registri che mi servono prima di iniziare il ciclo (compreso lindice) 1. Codice da ripetere il numero stabilito di volte 2. Incremento il registro usato come indice 3. Salto condizionato al punto 1 per eseguire unaltra volta se la condizione è vera for{i=0;i<5;i++) { y=y+x; }

FOR : esempio Per 5 volte (contando da 1 a 5) sommo lindice a y (y = y + x) li $t0,1 # Inizializza indice lw $t1,y # Carica y loop: # (Inizio ciclo) add $t1,$t1,$t0 # Effettua sommatoria addi $t0,$t0,1 # Incrementa indice ble $t0,5,loop # Continua ciclo se <= 5 volte sw $t1,y # Salva risultato in y for {i=0;i<5;i++) { y=y+x; }