Esercitazione 4 Chiamate di procedure Claudia Raibulet

Slides:



Advertisements
Presentazioni simili
Programmazione assembler
Advertisements

in un programma Assembler
Procedure In assembler.
Array multidimensionali
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
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.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
FUNZIONI DI BIBLIOTECA
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Funzioni definite dall’utente
Laboratorio di informatica: ASSEMBLER
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Funzioni.
Algoritmi Politecnico di Milano
File.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
CALCOLATORI ELETTRONICI Gestione delle subroutine.
CALCOLATORI ELETTRONICI
Il linguaggio Fortran 90: 4. Array: Vettori e Matrici
Gestione delle subroutine
Corso di Informatica Applicata - Lezione 3 - © 2005 Saverio De Vito Corso di Informatica Applicata Lezione 3 Università degli studi di Cassino Corso di.
Il Linguaggio Macchina
1 Generazione codice Daniela Briola Lorena Bellino.
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
memoria gestita staticamente:
Strutture dei sistemi di calcolo Funzionamento di un sistema di calcolo Struttura di I/O Struttura della memoria Gerarchia delle memorie Architetture di.
I File.
Le funzioni.
Lezione 2 Programmare in ASP
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Programmazione in Java
Elementi di Informatica
STRUTTURA GENERALE DI UN ELABORATORE
Architettura degli Elaboratori II (canale P-Z) Linguaggi e moduli
Introduzione al linguaggio assembly del microprocessore a parte
BIOINFO3 - Lezione 24 ARRAY
Architettura degli Elaboratori II (canale P-Z) Istruzioni di controllo Dott. Franco Liberati.
Cicli in Fortran I cicli consentono di eseguire una sequenza di istruzioni più di una volta due tipi: Cicli iterativi Cicli while.
Introduzione al linguaggio assembly del microprocessore a parte
Array e Funzioni in PHP Laboratorio di Progettazione Web AA 2007/2008 Chiara Renso ISTI- CNR -
BIOINFO3 - Lezione 201 Come in ogni corso di introduzione ad un linguaggio di programmazione, proviamo a scrivere lormai celebre primo programma di prova.
BIOINFO3 - Lezione 331 SUBROUTINE IN PERL Una subroutine (funzione, metodo, procedura o sottoprogramma), e` una prozione di codice all`interno di un programma.
File e Funzioni Si possono distinguere tre tipi di file che vengono utilizzati in MATLAB: M-file: hanno estensione .m e in essi vengono memorizzati i.
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.
Calcolatori Elettronici Assemblatore, Linker e Loader
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Programmazione Assembly
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
Corso di Laurea in Informatica Architettura degli elaboratori a.a ISA e Asm: esempi e suggerimenti.
DIPARTIMENTO DI ELETTRONICA, INFORMAZIONE E BIOINGEGNERIA Lab 2: 20 Aprile 2015 Marco D. Santambrogio – Gianluca Durelli –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 26 Marzo 2014.
Esempi domande primo compitino Claudia Raibulet
Esercitazione 3 Introduzione allo SPIM Pseudo-Istruzioni
SPIM Esercizi. Esercizio 1 – il comando ‘li’ Il codice deve eseguire una singola operazione: mettere il valore immediato 1023 nel registro s3.
Esercizio 14 – chiamata di una procedura Il codice deve: Passare due parametri alla procedura ‘salva’ Questa procedura deve salvare i due parametri nel.
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Fondamenti di Informatica1 Linguaggi Diversi tipi di linguaggi: –Imperativi –Funzionali –Dichiarativi Tutti basati sulla traduzione nell'unico linguaggio.
Esercizi.
Convenzioni chiamate a procedure Riassunto Pratico.
Esempio scriviamo un programma in linguaggio macchina che: trasferisce il contenuto delle 2 parole della RAM di indirizzi 64 e 68 nei registri R 0 ed R.
Corso di Laurea in Informatica Architettura degli elaboratori a.a Programmazione Assembly: procedure (1) Supporto hardware alle procedure Passaggio.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 14 Marzo 204.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 3 – Info B Marco D. Santambrogio – Riccardo Cattaneo –
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 3 L Aprile 2015 Marco D. Santambrogio – Gianluca Durelli -
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Array e “stringhe” Marco D. Santambrogio – Ver. aggiornata al 28 Ottobre 2014.
InformaticApp 1 biennio. Access CREA TABELLE IN MODALITÀ STRUTTURA.
“ Pseudocodice ” Un programma per computer lavorerà su in insieme di “ variabili ” contenenti i dati del problema, soluzioni intermedie, soluzioni finali.
Corso di Laurea in Informatica Architettura degli elaboratori a.a ISA e Asm: esempi e suggerimenti.
Transcript della presentazione:

Esercitazione 4 Chiamate di procedure Claudia Raibulet

Procedure  Una procedura – simile ad una spia che parte con un piano segreto, aquisisce risorse, svolge dei lavori, nasconde le tracce e torna al punto di partenza con dei risultati quando la missione è completata  Osservazione: la spia opera soltanto in base a ciò che deve sapere e non può fare assunzioni di che l’ha assoldata

Scopo delle procedure  Strutturare i programmi  Rendere i programmi più facili da capire  Permettere il riutilizzo del codice  I parametri rappresentano una barriera fra la procedura e il resto del programma e permettono lo scambio dei dati

Passi per chiamare una procedura  Per l’esecuzione di una procedura, un programma deve eseguire i seguenti sei passi: 1.mettere i parametri in un posto dove la procedura possa recuperarli 2.trasferire il controllo alla procedura 3.allocare le risorse (di memorizzazione dei dati) necessarie alla procedura 4.effettuare la computazione della procedura 5.mettere i risultati in un posto accessibile al chiamante 6.restituire il controllo al chiamante

Convenzione uso registri per il passaggio di parametri a procedure  La procedura A, durante la sua esecuzione, chiama la procedura B. La procedura B esegue i suoi compiti senza chiamare nessuna altra procedura. L’interfaccia tra A e B segue le convenzioni di uso dei registri per il passaggio parametri. Indicare qualli delle seguenti scelte sono necessarie per garantire un risultato corretto. La procedura B richiede 2 parametri in ingresso (scalari a 32 bit) e fornisce uno scalare a 32 in uscita. 1.il programmatore della procedura A non si deve interessare del passaggio dei parametri perchè questo viene gestito dall’assemblatore 2.la procedura A, prima di effettuare la chiamata a B, imposta i parametri attuali nei registri $v0, $v1 3.la procedura A, prima di effettuare la chiamata a B, imposta i parametri attuali nei registri $t0, $t1 4.la procedura A, prima di effettuare la chiamata a B, imposta i parametri attuali nei registri $s0, $s1 5.la procedura A, prima di effettuare la chiamata a B, imposta i parametri attuali nei registri $a0, $a1

Convenzione uso registri per il passaggio di parametri a procedure  La procedura A, durante la sua esecuzione, chiama la procedura B. La procedura B esegue i suoi compiti senza chiamare nessuna altra procedura. L’interfaccia tra A e B segue le convenzioni di uso dei registri per il passaggio parametri. Indicare qualli delle seguenti scelte sono necessarie per garantire un risultato corretto.La procedura B richiede 2 parametri in ingresso (scalari a 32 bit) e fornisce uno scalare a 32 in uscita. 1.la procedura A, al termine della procedura B, trova i parametri di uscita nei registri $a0, $a1 2.la procedura A, al termine della procedura B, trova i parametri di uscita nei registri $t0, $t1 3.la procedura A, al termine della procedura B, trova i parametri di uscita nei registri $v0, $v1 4.la procedura A, al termine della procedura B, trova i parametri di uscita nei registri $s0, $s1 5.il programmatore della procedura B non si deve interessare del passaggio dei parametri perchè questo viene gestito dall’assemblatore

Convenzione uso registri per il passaggio di parametri a procedure  $a0 - $a3 -> quattro registri argomento per il passaggio dei parametri  $v0 - $v1 -> due registri valore per la restituzione dei valori  $ra ->registro di ritorno per tornare al punto di origine Procedura chiamante A.... //argomenti in $a0 - $a3 jal B //valore ritornato in $v0, $v1 Procedura chiamata B //leggi argomenti da $a0 - $a3.... //salva valore calcolato in $v0, $v1 jr $ra

Esercizio 1  Si chiede di scrivere una procedura che incrementa il valore ricevuto come argomento di ingresso..globl proc proc: addi $a0, $a0, 1 move $v0, $a0 jr $ra.globl __start.data numero:.word 123.text __start: lw $a0, numero jal proc move $a0, $v0 li $v0, 1 syscall

Esercizio 2  Si chiede di scrivere una procedura che calcola il prodotto tra due numeri interi specificati come argomenti di ingresso..globl prodotto prodotto: mul $t0, $a0, $a1 move $v0, $t0 jr $ra.text __start: la $a0, inMsg li $v0, 4 syscall li $v0, 5 syscall move $a0, $v0 li $v0, 5 syscall move $a1, $v0 jal prodotto move $a0, $v0 li $v0, 1 syscall

Esercizio 3  Si chiede di scrivere una procedura che ricevendo come valori di ingresso l’indirizzo di un array di 10 elementi, e un numero compreso tra 0 e 9, ritorna l’elemento dell’array che si trova nella posizione indicata dal secondo argomento della procedura..globl estraiElemento estraiElemento: mul $t0, $a1, 4 # calcolo spiazzamento add $t0, $t0, $a0 # calcolo indice assoluto lw $t1, 0($t0) # caricamento elemento move $v0, $t1 # metto il valore di ritorno in $v0 jr $ra # ritorno al chiamante

.globl __start.data vett:.word 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 in_msg:.asciiz "Inserisci l'indice dell'elemento che vuoi estrarre\n" out_msg:.asciiz "Elemento estratto: ".text __start:li $v0, 4 # stampa messaggio per input la $a0, in_msg syscall li $v0, 5# leggi intero syscall la $a0, vett move $a1, $v0 jal estraiElemento move $s1, $v0 li $v0, 4 # stampa messaggio di output la $a0, out_msg syscall li $v0, 1 # stampa l'elemento estratto move $a0, $s1 syscall

Esercizio 4  Si chiede di scrievere una procedura che riceve in ingresso 3 numeri interi e calcola il minimo di essi..globl calcolaMinimo calcolaMinimo: slt $t0, $a0, $a1 beq $t0, $0, label1 move $t7, $a0 j label2 label1: move $t7, $a1 label2:slt $t0, $a2, $t7 beq $t0, $0, exit move $t7, $a2 exit: move $v0, $t7 jr $ra

.globl __start.data in_msg:.asciiz "Inserisci tre numeri: \n" out_msg:.asciiz "Il numero minimo inserito: ".text __start:li $v0,4 # stampa del messaggio per input la $a0,in_msg syscall li $v0,5 # read_int syscall move $a0, $v0 li $v0,5 # read_int syscall move $a1, $v0 li $v0,5 # read_int syscall move $a2, $v0 jal calcolaMinimo # chiamata della procedura move $s0, $v0 li $v0, 4 # stampa messaggio di output la $a0, out_msg syscall li $v0,1 # stampa dell'elemento estratto move $a0,$s0 syscall

Esercizio 5  Si chiede di scrivere una procedura che calcola la media degli elementi di un array..globl media media: move $t0, $a0 move $t1, $a1 move $t7, $0 ciclo:beq $t1, $0, EXIT lw $t2, 0($t0) addi $t0, $t0, 4 add $t7, $t7, $t2 addi $t1, $t1, -1 j ciclo EXIT:divu $v0, $t7, $a1 jr $ra.globl __start.data vett:.word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 dim:.word 10 outMsg:.asciiz "La media e': ".text __start: la $a0, vett lw $a1, dim jal media move $s0, $v0 la $a0, outMsg li $v0, 4 syscall move $a0, $s0 li $v0, 1 syscall

Prova di valutazione  Sapendo che la cifra "0" ha codice ASCII 0x30, a quale carattere ASCII corrisponde il codice binario ? 1.'\t' C 4.0x '\n' 8.nessuna delle altre risposte 9.non rispondo

Prova di valutazione  Che cosa è una pseudo-istruzione in assembly MIPS? 1.una istruzione simbolica mai utilizzata nei programmi assembly 2.una istruzione macchina usata al posto di altre istruzioni assembly 3.una istruzione simbolica che viene tradotta in una o più istruzioni macchina 4.una istruzione simbolica inesistente 5.nessuna delle altre risposte 6.non rispondo

Prova di valutazione  Facendo riferimento alla Appendice A del testo dire a quale dei seguenti codici macchina in esadecimale corrisponde l'istruzione MIPS "jr $t3" (come usuale si suggerisce di non usare la tabella a pagina A-54 della Appendice A del testo, ma le pagine successive)? 1.0x x x x x x nessuna delle altre risposte 8.non rispondo

Prova di valutazione  Inserire, nel Data Segment, il valore -0x74d40011 all'indirizzo 0x Quale delle seguenti prime righe del Data Segment è corretta? È visualizzata soltanto la prima riga del Data Segment, dalla locazione [0x ] alla [0x C] 1.0x x x74d x x x74d x x x x8b2bffef 0x x x x x8b2bffef 0x x x x74d x x x x8c3ffffc 0x nessuna delle altre risposte 8.non rispondo

Prova di valutazione  Dato il seguente frammento di codice: dire quale dei seguenti valori assume l'etichetta "eol": 1.0x A 2.0x x E 4.0x x x x x F 9.0x E 10.nessuna delle altre risposte 11.non rispondo.data 0x ciao:.asciiz "Ciao\n" t:.asciiz "\t" mamma:.asciiz "Mamma".space 2 eol:.asciiz "\n"

Prova di valutazione  Dato il seguente frammento di codice: li $v0, 4 # codice "print_string" syscall # operazione di sistema quale delle seguenti istruzioni va collocata al posto dei puntini per stampare sulla Console la stringa collocata all'indirizzo rappresentato dalla etichetta msg? 1.lw $a0, msg 2.sw $a0, msg 3.li $a0, msg 4.la $a0, msg 5.move $a0, msg 6.lui $a0, msg 7.nessuna delle altre risposte 8.non rispondo

Prova di valutazione  Dato il seguente frammento di codice: li $t2, 8 ciclo: sw $t2, 0($t0) addi $t0, $t0, 4 addi $t2, $t2, -1 j ciclo fine_ciclo: jr $ra quale delle seguenti istruzioni va collocata al posto dei puntini per scrivere nell'array di word indirizzato da $t0 i valori 8,7,6,5,4,3,2,1,0? 1.bgtz $t2, fine_ciclo 2.bltz $t2, fine_ciclo 3.bgez $t2, fine_ciclo 4.blez $t2, fine_ciclo 5.beqz $t2, fine_ciclo 6.bnez $t2, fine_ciclo 7.nessuna delle altre risposte 8.non rispondo

Prova di valutazione  Si consideri una procedura A che effettua una chiamata ad una procedura B. La procedura B richiede in ingresso due parametri (scalari a 32 bit) e fornisce uno scalare a 32 bit in uscita. La procedura A, prima di chiamare B, ha i valori da passare a B nei registri $t0 e $t2. Quale delle seguenti istruzioni permettono il corretto passaggio dei parametri a B? 1.move $a0, $t0 move $a1, $t2 2.move $t0, $a0 move $t2, $a1 3.move $v0, $t0 move $v1, $t2 4.la $a0, $t0 la $a1, $t2 5.move $a0, $t0 move $a1, $t3 6.nessuna delle altre risposte 7.non rispondo