Procedure annidate. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

Documenti analoghi
Procedure annidate. Università degli studi di Milano

Convenzioni per la chiamata a procedure

Convenzioni di chiamata a procedure

System calls. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

15 April LABORATORIO 04 PROCEDURE STACK. CHIAMATA A PROCEDURE I. Frosio

Assembly (3): le procedure

System calls. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

Assembly (3): le procedure

Assembly IV Le procedure

Controllo di flusso. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso

Allocazione dinamica della memoria

Indirizzamento, lettura e scrittura della memoria

Memorie e contatori. Laboratorio di Architetture degli Elaboratori I Corso di Laurea in Informatica, A.A Università degli Studi di Milano

Architetture dei Calcolatori

Le procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)

Intro ai tools di MARS

Controllo di flusso. Università degli Studi di Milano Corso di Laurea in Informatica, A.A

Assembly MIPS: le procedure

Architettura dei calcolatori e sistemi operativi. Sottoprogrammi e MIPS. Espressioni algebriche. Capitolo 2 P&H

Circuiti combinatori

Procedure SOMMARIO: DIPARTIMENTO DI INFORMATICA Laboratorio di Architetture degli Elaboratori II Turno B : ( G Z )

Fetch Decode Execute Program Counter controllare esegue prossima

Le procedure ricorsive Come eseguire un programma. Architettura degli Elaboratori e delle Reti, Turno I

Il linguaggio assembly

Indirizzamento, lettura e scrittura della memoria

Assembly V: Procedure annidate e recursive

Istruzioni di controllo del flusso

Circuiti combinatori

Eccezioni. Università degli Studi di Milano Corso di Laurea in Informatica, A.A

Il Linguaggio Assembly: Le procedure

Gestione dello Stack nel MIPS

Record di Attivazione

Istruzioni di trasferimento dati

Funzioni, Stack e Visibilità delle Variabili in C

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

PROGETTO ASSEMBLY: REQUISITI,

Gestione dei sottoprogrammi. temporaneo passaggio del controllo dal programma in esecuzione ad un sottoprogramma

Manualistica 3 Le strutture di controllo

Architettura degli Elaboratori II Laboratorio

Contatori. Laboratorio di Architetture degli Elaboratori I Corso di Laurea in Informatica, A.A Università degli Studi di Milano

Funzioni, Stack e Visibilità delle Variabili in C

Record di Attivazione Cenni sulla ricorsione

Università degli Studi di Cassino

Laboratorio di informatica Ingegneria meccanica

Architettura degli Elaboratori II Laboratorio

Università degli Studi di Cassino e del Lazio Meridionale

Ambienti di Programmazione per il Software di Base

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

Architetture dei Calcolatori

Manualistica 3 Le strutture di controllo

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Aritmetica dei puntatori

Informatica/ Ing. Meccanica/ Ing. Edile/ Prof. Verdicchio/ 05/02/2014/ Foglio delle domande / VERSIONE 1

Appello di Fondamenti di Informatica 12/09/2017

Descrizione del progetto di laboratorio.

Programmi in Assembly

FUNZIONI: IL MODELLO A RUN-TIME!

ESERCIZIO: Analisi di un programma. Dato il seguente programma C:

Generatore random. Laboratorio di Architetture degli Elaboratori I Corso di Laurea in Informatica, A.A Università degli Studi di Milano

Calcolatori Elettronici Prof. Fabio Roli. Linguaggio Assembly. Capitolo 5. Corso di Laurea di Ingegneria Elettronica

Introduzione a MIPS64 (II parte)

Fondamenti di Informatica

Politecnico di Milano Facoltà di Ingegneria Civile, Ambientale e Territoriale. Informatica B [079904]

Le procedure. Architetture dei Calcolatori (Lettere. Le procedure (3) Le procedure (2)

Un algoritmo realizza una relazione funzionale tra i valori di input e quelli di output

Le funzioni in JavaScript. Modularizzazione

MIPS Instruction Set 2

Preparazione allo Scritto di Programmazione

Calcolatori Elettronici

Memorie. Laboratorio di Architetture degli Elaboratori I Corso di Laurea in Informatica, A.A Università degli Studi di Milano

A.A. 2018/2019. Esercitazione 3 [Per Casa] Strutturazione del Codice Sorgente per la Risoluzione di Problemi mediante MATLAB

Procedure: esempi. Esempi: ricorsione fattoriale Fibonacci ordinamenti

Fondamenti di Informatica

C: primi elementi. Lezione 4

Architettura degli STACK. Dott. Franco Liberati

Esercitazione di Reti degli elaboratori

FUNZIONI: IL MODELLO A RUN-TIME

5 April LABORATORIO 03 CONTROLLO DEL FLUSSO DI UN PROGRAMMA JUMP ADDRESS TABLE. I. Frosio

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Fondamenti di Informatica

Ottenere una modifica del parametro attuale

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

Matrici (array bidimensionali)

Definizione di metodi in Java

ARM: stack e subroutine

ARCHITETTURE DEI CALCOLATORI (canale A-I) - Prima prova in itinere del 16/6/2003 Compito tipo A

Informatica A aa Seconda prova in itinere. Esempi di esercizi possibili

Programmazione I - Laboratorio

Addendum: istruzioni linguaggio macchina. Università di Bergamo - corso di Calcolatori Elettronici 1

Oggetti SOMMARIO: DIPARTIMENTO DI INFORMATICA Laboratorio di Architetture degli Elaboratori II Turno B : ( G Z )

Pag. 1. La formalizzazione dell informazione: Dati e Diagrammi di Flusso. Codifica degli algoritmi

MIPS Instruction Set 2

cout << "Inserisci un numero:" << endl; cin >> n; ris = n*2; cout << "Il doppio di " << n << " e " << ris << endl;

Transcript:

Università degli Studi di Milano Corso di Laurea in Informatica, A.A. 2017-2018 Procedure annidate Homepage del corso Turno A Nicola Basilico Dipartimento di Informatica Via Comelico 39/41-20135 Milano (MI) Ufficio S242 nicola.basilico@unimi.it +39 02.503.16294 Turno B Jacopo Essenziale Dipartimento di Informatica Via Celoria 20-20133 Milano (MI) AISLab jacopo.essenziale@unimi.it +39 02.503.14010

Procedure «foglia» Scenario più semplice: main chiama la procedura funct che, senza chiamare a sua volta altre procedure, termina e restituisce il controllo al main main f = f + 1; if (f == g) res = funct(f,g); else print(res) f = f -1; funct int funct (int p1, int p2){ } int out; out = p1 * p2; return out; Una procedura che non ne chiama un altra al suo interno è detta procedura foglia Perché? Rappresentiamo le nostre procedure con un albero: le procedure diventano nodi e un arco tra due nodi x e y indica che x contiene almeno una chiamata a y.

Procedure non «foglia» Una procedura che può invocarne un altra durante la sua esecuzione non è una procedura foglia, ha annidata al suo interno un altra procedura: main funct funct2 f = f + 1; int funct (int p1, int p2){ int funct2 (int p1){ if (f == g) res = funct(f,g); else f = f -1; } int out,x; x = p1 * p2; out = funct2(x) return out; } return p1^2; print(res) Se una procedura contiene una chiamata ad un altra procedura dovrà effettuare delle operazioni per (1) garantire la non-alterazione dei registri opportuni (2) consentire una restituzione del controllo consistente con l annidamento delle chiamate. Ricordiamo: in assembly la modularizzazione in procedure è un assunzione concettuale sulla struttura e sul significato del codice. Nella pratica, ogni «blocco» di istruzioni condivide lo stesso register file e aree di memoria.

Procedure non «foglia» Supponiamo che: il main invochi una procedura A passandogli 3 come parametro e cioè copiando 3 nel registro $a0 ed eseguendo jal A la procedura A chiami a sua volta una procedura foglia B passandogli 5 come parametro e cioè copiando 5 nel registro $a0 e eseguendo jal B Nell esempio sopra ci potrebbero essere problemi con $a0 e $ra: 1. main potrebbe necessitare di $a0 (il suo parametro in input) anche dopo la chiamata ad A 2. invocando B, A perde il suo return address ($ra) e non sa più a chi restituire il controllo Cosa previene questo problema: la convenzione di chiamata a procedure! Perché?

Procedure non «foglia» La convenzione di chiamata a procedure ci dà già il meccanismo con cui prevenire il problema attraverso la classificazione dei registri tra callersaved and callee-saved $ra è un registro callee-saved: deve essere preservato tra chiamate a procedura $a0 è un registro caller-saved: non deve essere preservato tra chiamate Procedimento: 1. main salva sullo stack i registri di cui avrà ancora bisogno dopo la chiamata, ad esempio $a0 2. A salva sullo stack il registro $ra in modo da poter restituire il controllo: Una volta che B è terminata, A potrà terminare correttamente ripristinando le informazioni dallo stack

Esempio Calcolo dell espressione (a+b) (c+d) utilizzando due chiamate annidate (codice pseudo-c):

Esempio Calcolo l espressione (a+b) (c+d) utilizzando due procedure annidate (codice pseudo-c):

Esempio Calcolo l espressione (a+b) (c+d) utilizzando due procedure annidate (codice pseudo-c): f1 salva sullo stack tutto ciò che spetta a lei (in qualità di chiamante) così da poter terminare correttamente ogni sua esecuzione

Esempio Calcolo l espressione (a+b) (c+d) utilizzando due procedure annidate (codice pseudo-c): dopo la chiamata ad f2, f1 ripristina quanto salvato in precedenza (in questo esempio $ra) e poi riporta lo stack allo stato iniziale

Esercizio 7.1 Nome del file sorgente: prodottoconsomme.asm Si implementino queste procedure 1. somma: input: due interi a e b output: a+b 2. prodotto_s input: due interi a e b output: a*b la procedura prodotto_s NON utilizzi istruzioni di moltiplicazione (mult et simila), ma calcoli il prodotto effettuando chiamate multiple alla procedura somma Esempio: il prodotto 3x2 è svolto come 3+3 oppure 2+2+2

Nome del file sorgente: maxmin.asm Esercizio 7.2 Si implementi la procedura max così definita: Input: un intero N e un array A di N interi Output: il valore massimo in A Si implementi la procedura min così definita: Input: un intero N e un array A di N interi Output: il valore minimo in A Si implementi la procedura maxmin così definita: Input: un intero N e una matrice di interi M di dimensione N x N Output: il massimo valore tra i minimi di riga in M Si implementi la procedura minmax così definita: Input: un intero N e una matrice di interi M di dimensione N x N Output: il minimo valore tra i massimi di riga in M Si implementi infine il main che acquisisca i dati, chiami maxmin e minmax e stampi i risultati

Università degli Studi di Milano Laboratorio di Architettura degli Elaboratori II Corso di Laurea in Informatica, A.A. 2017-2018 Nicola Basilico Dipartimento di Informatica Via Comelico 39/41-20135 Milano (MI) Ufficio S242 nicola.basilico@unimi.it +39 02.503.16294 Hanno contribuito alla realizzazione di queste slides: Iuri Frosio Jacopo Essenziale