Gestione dello Stack nel MIPS
|
|
- Gianfranco Grandi
- 6 anni fa
- Visualizzazioni
Transcript
1 Gestione dello Stack nel MIPS Lo stack cresce da indirizzi di memoria alti verso indirizzi di memoria bassi ad es. sp-> 0x7fffffff 0x7ffffdfc riservata stack L inserimento di un dato nello stack (operazione di push) avviene decrementando $sp per allocare lo spazio ed eseguendo sw per inserire il dato Ex: salvare il registro $s0 nello stack addi $sp, $sp, -4 sw $s0, 0($sp) Il prelevamento di un dato nello stack (operazione di pop) avviene eseguendo lw ed incrementando $sp (per eliminare il dato), riducendo così la dimensione dello stack Es: prelevare la cima dello stack e salvarla in $s0 lw $s0, 0($sp) addi $sp, $sp, 4 gp-> PC-> 0x x x x x dati dinamici (heap) dati statici Segmento testo (istruzioni) riservata Procedure 1
2 Esempio: Allocazione e deallocazione stack.globl main leaf_example: addi $sp, $sp, -4# decrementa lo stack di 4 per salvare $s0 sw $s0, 0($sp) # push di $s0 nello stack # Here Other operation on registers and stack addi $v0, $s0, 1# restituisci s0+1 come risultato lw $s0, 0($sp) # pop di $s0 dallo stack addi $sp, $sp, 4 # incrementa lo stack jr $ra # ritorna alla procedura chiamante main: addi $s0, $zero, 1 jal leaf_example Procedure 2
3 Esempio: Allocazione e Deallocazione stack Procedure 3
4 Esempio: Allocazione e Deallocazione stack Procedure 4
5 Record di Attivazione e Stack Tutto lo spazio di cui ha bisogno una procedura (record di attivazione) viene esplicitamente allocato dal programmatore Lo spazio dello stack viene allocato sottraendo a $sp il numero di byte necessari addi $sp, $sp, -24 # alloca 6 parole nello stack Al rientro da una procedura, il record di attivazione viene rimosso (deallocato) dalla procedura stessa, incrementando $sp della stessa quantità di cui lo si era decrementato alla chiamata addi $sp, $sp, 24 # deall. 6 parole nello stack Procedure 5
6 Record di Attivazione e Stack (2) Allocazione dello stack prima (a), durante (b) e dopo (c) la chiamata di una procedura stack frame Il frame consiste nello spazio di memoria tra il registro frame pointer ($fp), che punta alla prima parola del frame, e lo stack pointer ($sp), che punta all ultima parola del frame Si può accedere ai dati tramite $fp $sp puo variare durante l esecuzione Procedure 6
7 Esempio uso frame pointer #Example Stack # Use of frame pointer #.globl main leaf_example: addi $fp, $sp, -4 # sp start at 7ffffdf8. The first available #location is the next 7ffffdf4 addi $sp, $sp, -24 # devono essere allocate 6 parole di memoria sw $s0, 0($fp) # push di $s0 nello stack # Here Other operation on registers and stack addi $v0, $s0, 1 # restituisci f come risultato lw $s0, 0($fp) # pop di $s0 dallo stack main: addi $sp, $sp, 24 # incrementa lo stack addi $fp, $zero, 0 jr $ra # ritorna alla procedura chiamante addi $s0, $zero, 1 jal leaf_example $sp $fp=$sp-4 $sp=$sp-24 7ffffdf8 7ffffdf4 7ffffdf0 Record di attivazione (Procedure Frame) 7ffffde0 Procedure 7
8 Convenzioni per il salvataggio dei registri/ambiente L esecuzione di una procedura non deve interferire con l ambiente chiamante I registri usati dalla procedura chiamante devono poter essere ripristinati al rientro della procedura chiamata Convenzioni adottate dal MIPS Per ottimizzare gli accessi alla memoria, la chiamante e la chiamata salvano sullo stack soltanto un particolare gruppo di registri La chiamante, se vuole che siano preservati, salva i registri $t0- $t9, i registri $a0-$a3 e passa eventuali argomenti aggiuntivi La chiamata salva $ra e registri $s0-$s7 (se li usa), e usa lo stack per le strutture dati locali (ad es. array, strutture) e le variabili locali Se serve anche $fp Preservato (dal callee) Registri saved: $s0-$s7 Registro stack pointer: $sp Registro return address: $ra Stack sopra lo stack pointer Non preservato (dal callee) Registri temporanei: $t0-$t9 Registri argomento: $a0-$a3 Registri di ritorno: $v0-$v1 Stack sotto lo stack pointer Procedure 8
9 Convenzioni di Chiamata a Procedura: Caller La procedura chiamante deve 1. Mettere i valori dei parametri da passare alla procedura chiamata nei registri $a0-$a3. Ulteriori argomenti sono inseriti nello stack (dopo 2). 2. Salva i registri Caller-saved. La chiamante, se vuole che siano preservati, inserisce i registri $t0-$t9, i registri $a0-$a3, $v0-$v1 (Caller-saved) nello stack 1. perche la procedura chiamata li usa senza salvarli 3. Utilizzare l istruzione jal per saltare alla procedura chiamata e memorizzare il valore di PC+4 nel registro $ra 4. Al ritorno ripristinare i registri salvati nella fase 2 Procedure 9
10 Convenzioni di Chiamata a Procedura: Callee Inizializzazione Ritorno La procedura chiamata deve 1. Allocare la memoria per lo stack-frame sottraendo da $sp il numero di byte necessari 2. Salvare i registri Callee-saved - $s0-$s7, $fp e $ra che verranno modificati dalla procedura stessa Perche la procedura chiamante si aspetta che siano preservati $fp solo se viene usato $ra solo se la procedura ne chiama altre 3. Impostare $fp = $sp+dimensione stack-frame-4 Solo se $fp viene usato 4. Eseguire il compito richiesto 5. Memorizzare il risultato nei registri $v0, $v1 6. Ripristinare i registri salvati nella fase 2 quelli effettivamente modificati 7. Deallocare lo stack-frame sommando a $sp la dimensione del frame 8. Restituire il controllo alla procedura chiamante con l istruzione jr $ra Procedure 10
11 Esempio di procedura foglia E una procedura che non ha annidate al suo interno chiamate ad altre procedure Non serve salvare nello stack $ra (perché nessun altro lo modifica) Codice C: int leaf_example(int g, int h, int i, int j) { } int f; f = (g+h) (i+j); return f; Assumiamo che le variabili g, h, i e j corrispondono a $a0- $a3 e f a $s0 Utilizzeremo i registri $t0 e $t1 per le somme parziali Procedure 11
12 Esempio di procedura foglia (2).globl main leaf_example: addi $sp, $sp, -4 # decrementa lo stack di 4 per salvare $s0 sw $s0, 0($sp) # push di $s0 nello stack add $t0, $a0, $a1 # $t0 = g + h add $t1, $a2, $a3 # $t1 = i + j sub $s0, $t0, $t1 # f = $t0 - $t1 add $v0, $s0, $zero # restituisci f come risultato lw $s0, 0($sp) # pop di $s0 dallo stack addi $sp, $sp, 4 # incrementa lo stack jr $ra # ritorna alla procedura chiamante main: addi $s0, $zero, 1 addi $s1, $zero, 2 addi $a0, $zero, 5 addi $a1, $zero, 6 addi $a2, $zero, 4 addi $a3, $zero, 3 jal leaf_example Procedure 12
13 Esempio di procedura foglia (3).globl main leaf_example: # gestione stack add $t0, $a0, $a1 # $t0 = g + h add $t1, $a2, $a3 # $t1 = i + j sub $s0, $t0, $t1 # f = $t0 - $t1 # gestione stack add $v0, $s0, $zero # restituisci f come risultato jr $ra # ritorna alla procedura chiamante main: addi $s0, $zero, 1 addi $s1, $zero, 2 # Operazioni su $t0 e $t1 addi $a0, $zero, 5 addi $a1, $zero, 6 addi $a2, $zero, 4 addi $a3, $zero, 3 jal leaf_example # Operazioni su $t0 e $t1 Problema: Come devo fare se il chiamante (main) volesse preservare il contenuto di $t0 e $t1????? Procedure 13
14 Esempio di procedura foglia (3).globl main leaf_example: # gestione stack add $t0, $a0, $a1 # $t0 = g + h add $t1, $a2, $a3 # $t1 = i + j sub $s0, $t0, $t1 # f = $t0 - $t1 # gestione stack add $v0, $s0, $zero # restituisci f come risultato jr $ra # ritorna alla procedura chiamante main: addi $sp, $sp, -8 sw $t0, 4($sp) # push di $t0 nello stack sw $t1, 0($sp) # push di $t1 nello stack jal leaf_example lw $t1, 0($sp) # pop di $t1 dallo stack lw $t0, 4($sp) # pop di $t0 dallo stack addi $sp, $sp, 8 # incrementa lo stack Il chiamante deve esplicitamente preservare il contenuto dei rigistri tomporanei. E LA CONVENZIONE Procedure 14
15 Esempio (13) ## Procedure call to add 10 to input parameter.text.globl main main: addi $s0, $0, 5 add $a0, $s0, $0 # load $a0 with parameter to pass to callee procedure jal add10 # jump and link: return address saved in register $ra add $s1, $v0, $0 # value returned by callee procedure is in $v0 add $s0, $s1, $0 li $v0, 10 # load code for program end syscall # exit add10: addi $sp, $sp, Quali -4 # registri make vanno space preservati????? in stack to sw $s0, 0($sp) # save register for caller addi $s0, $a0, 10 # add 10 to input parameter add $v0, $s0, $0 # return value placed in register $v0 lw $s0, 0($sp) # restore register before returning to caller addi $sp, $sp, 4 # restore stack before returning to caller jr $ra # jump to return address to give control back to caller Procedure 15
16 Esempio (13) ## Procedure call to add 10 to input parameter.text.globl main main: addi $s0, $0, 5 add $a0, $s0, $0 # load $a0 with parameter to pass to callee procedure jal add10 # jump and link: return address saved in register $ra add $s1, $v0, $0 # value returned by callee procedure is in $v0 add $s0, $s1, $0 li $v0, 10 # load code for program end syscall # exit add10: addi $sp, $sp, -4 # make space in stack to sw $s0, 0($sp) # save register for caller addi $s0, $a0, 10 # add 10 to input parameter add $v0, $s0, $0 # return value placed in register $v0 lw $s0, 0($sp) # restore register before returning to caller addi $sp, $sp, 4 # restore stack before returning to caller jr $ra # jump to return address to give control back to caller Procedure 16
17 Esempio (14) Confronta uso di $sp e $fp in esempi 14-procCallsProg1Modified.asm uso stack in modo non pianificato 14-procCallsProg1Modified-preAlloc.asm pianifico dimensione e uso stack frame 14-procCallsProg1Modified-fp.asm uso frame pointer al posto dello stack pointer Procedure 17
18 $sp=$sp-4 $sp=$sp-8 $sp=$sp-4 $sp????? $s0 Record di $t0 attivazione (Procedure $t1 Frame) $t2 Procedure 18
19 $sp=$sp-16 $sp????? $s0 $t0 $t1 $t2 12($sp) 8($sp) 4($sp) 0($sp) Procedure 19
20 $fp=$sp+12 $sp=$sp-16 $sp????? $s0 $t0 $t1 $t2 12($sp) o 0($fp) 8($sp) o -4($fp) 4($sp) o -8($fp) 0($sp) o -12($fp) Procedure 20
21 Esempio (14-2) Quando va preservato $ra??? Quale $ra??? Procedure 21
22 Esempio (14-2) ## Procedure call to swap two array words.text $a0: indirizzo array $a1: elemento da scambiare.globl main main: la $a0, array # load $a0 with parameter(=array address) to pass to #callee procedure addi $a1, $0, 1 # load $a1 with parameter(= 0) to pass to callee procedure addi $sp, $sp, -4 # make space in stack to 1 sw $ra, 0($sp) # save #ra (return address) value though # there is no procedure that called the current one jal swap # jump and link: return address stored in register $ra lw $ra, 0($sp) # control comes back here from callee; restore $ra addi $sp, $sp, 4 # restore stack jr $ra # give control to calling procedure (default, there is none) # swap contents of elements $a1 and $a1+1 of the array that starts at $a0 # equivalent C code: swap: add $t1, $a1, $a1 # $t1 = 2*$a1 # swap(int v[], int k) add $t1, $t1, $t1 # $t1 = 4*$a1 # { add $t1, $a0, $t1 # $t1 = array + 4*$a1 # int temp; lw $t0, 0($t1) # $t0 = array[$a1] # temp = v[k]; lw $t2, 4($t1) # $t2 = array[$a1+1] # v[k] = v[k+1]; sw $t2, 0($t1) # array[$a1] = array[$a1+1] # v[k+1] = temp; sw $t0, 4($t1) # array[$a1+1] = array[$a1] # } jr $ra # jump to return address to give control back to caller.data array:.word 5, 4, 3, 2, 1 Procedure 22
23 Esempio (14-2) ## Procedure call to swap two array words.text $a0: indirizzo array $a1: elemento da scambiare.globl main main: la $a0, array # load $a0 with parameter(=array address) to pass to #callee procedure addi $a1, $0, 1 # load $a1 with parameter(= 0) to pass to callee procedure addi $sp, $sp, -4 # make space in stack to sw $ra, 0($sp) # save #ra (return address) value though # there is no procedure that called the current one jal swap # jump and link: return address stored in register $ra lw $ra, 0($sp) # control comes back here from callee; restore $ra addi $sp, $sp, 4 # restore stack jr $ra # give control to calling procedure (default, there is none) # swap contents of elements $a1 and $a1+1 of the array that starts at $a0 swap: add $t1, $a1, $a1 # $t1 = 2*$a1 2 add $t1, $t1, $t1 # $t1 = 4*$a1 array: add $t1, $a0, $t1 # $t1 = array + 4*$a1 lw $t0, 0($t1) # $t0 = array[$a1] lw $t2, 4($t1) # $t2 = array[$a1+1] sw $t2, 0($t1) # array[$a1] = array[$a1+1] sw $t0, 4($t1) # array[$a1+1] = array[$a1] jr $ra # jump to return address to give control back to caller.data.word 5, 4, 3, 2, 1 # equivalent C code: # swap(int v[], int k) # { # int temp; # temp = v[k]; # v[k] = v[k+1]; # v[k+1] = temp; # } Procedure 23
24 Esempio: Somma dei primi 100 numeri ## Program adds the first 100 positive integers ## and displays the result. # Variables: # $s1 - iterations counter # # $s4 - accumulator for sum $a0 - number of system service Procedure 24
25 Procedure 25
26 RICORSIONE Procedure 26
27 Esempio di procedura ricorsiva E una procedura che contiene una chiamata a se stessa al suo interno Occorre prestare attenzione al salvataggio nello stack dei registri che occorrono alla procedura chiamante (parametri di input, indirizzo di ritorno) Codice C: int fact(int n) { if (n < 1) return(1); else return (n * fact(n-1)); } Assumiamo che la variabile n corrisponde a $a0 Procedure 27
28 Esempio di procedura ricorsiva Per semplicità consideriamo prima la seguente versione Codice C: int fact(int n) { } int i=n, ris; if (i < 1) ris=1; else ris=i * fact(i-1); return ris; Quanti registri mi servono? i $s0 ris $s1 Cosa succede in C quando chiamo una procedura ricorsiva? Ad ogni chiamata corrisponde uno scope privato, ovvero il record di attivazione Da cosa è composto il mio record di attivazione? Quali registri dovrò salvare nello stack? $ra, $s0, $s1 Procedure 28
29 fact(n) (prima versione) fact: addi $sp, $sp, -12 # per salvare 3 registri nello stack sw $ra, 8($sp) # push di $ra nello stack sw $s0, 4($sp) # push di $s0 nello stack sw $s1, 0($sp) # push di $s1 nello stack add $s0, $0, $a0 # copia $a0 in $s0 add $s1, $0, $0 # ris=0; slti $t0, $s0, 1 # test se n < 1 beq $t0, $zero, Else # se n>= 1, vai a Else addi $s1, $0, 1 # se n<1 ris=1 addi $v0, $0, $s1 # $v0=ris=1 j Exit if (i < 1) ris=1; Else:addi $a0, $s0, -1 # if n >= 1 $a0=n-1 jal fact # chiama fact(n-1) mul $v0, $s0, $v0 # $v0=n*fact(n-1) Exit: lw $s1, 0($sp) # pop di $s1 dallo stack lw $s0, 4($sp) # pop di $s0 dallo stack lw $ra, 8($sp) # pop di $ra dallo stack addi $sp, $sp, 12 # dealloca stack jr $ra # ritorno alla procedura chiamante else ris=i * fact(i-1); Procedure 29
30 Esempio di procedura ricorsiva (3) Stack alla chiamata fact(0) nel caso in cui main chiama fact(4) stack Crescita dello stack $ra = 0x40004c $s0 = 0, $s1=0 $ra = 0x4000b0 $s0 = 4, $s1=0 $ra = 0x4000b0 $s0 = 3, $s1=0 $ra = 0x4000b0 $s0 = 2, $s1=0 $ra = 0x4000b0 $s0 = 1, $s1=0 fact(4) fact(3) fact(2) fact(1) fact(0) Procedure 30
31 Esempio di esecuzione fact(4) Procedure 31
Architetture dei Calcolatori
Architetture dei Calcolatori Lezione 8 -- 01/12/2011 Procedure Emiliano Casalicchio emiliano.casalicchio@uniroma2.it Create da: F. Lo Presti Modificate da: E.Casalicchio Le procedure q In ogni linguaggio
DettagliLe procedure. L insieme delle istruzioni (4) Prima della chiamata di una procedura. Le procedure (2) Architetture dei Calcolatori (lettere A-I)
Le procedure L insieme delle istruzioni (4) Architetture dei Calcolatori (lettere A-I) In ogni linguaggio di programmazione si struttura il proprio codice usando procedure (funzioni, metodi, ) L utilizzo
DettagliAssembly (3): le procedure
Architettura degli Elaboratori e delle Reti Lezione 13 Assembly (3): le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 13 1/23 Chiamata
DettagliLe procedure. Architetture dei Calcolatori (Lettere. Le procedure (3) Le procedure (2)
Le procedure Architetture dei Calcolatori (Lettere A-I) Procedure Prof. Francesco Lo Presti In ogni linguaggio di programmazione si struttura il proprio codice usando procedure (funzioni, metodi, ) L utilizzo
DettagliAssembly (3): le procedure
Architettura degli Elaboratori e delle Reti Lezione 13 Assembly (3): le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano (Patterson-Hennessy:
DettagliAssembly IV Le procedure
rchitettura degli Elaboratori e delle Reti Lezione 14 ssembly IV Le procedure Proff.. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano (Patterson-Hennessy:
Dettagli15 April LABORATORIO 04 PROCEDURE STACK. CHIAMATA A PROCEDURE I. Frosio
15 April 2011 05 LABORATORIO 04 PROCEDURE STACK CHIAMATA A PROCEDURE I. Frosio 1 SOMMARIO Procedure Stack Chiamata a procedure 2 PERCHÈ LE PROCEDURE? 15 April 2011 Main Proc3 Proc2 Proc1 Programmazione
DettagliIl linguaggio assembly
Il linguaggio assembly Chiamata a procedura PH cap. 2.7 e app. A.6 1 Chiamata a procedura in C int prod (int x, int y) { int out; out = x * y; return out; } f = f + 1; if (f == g) res = prod(f,g); else
DettagliAssembly MIPS: le procedure
Architettura degli Elaboratori e delle Reti Assembly MIPS: le procedure Proff. A. Borghese, F. Pedersini Dipartimento di Informatica Università degli Studi di Milano 1/40 Chiamata a procedura: esempio
DettagliIl Linguaggio Assembly: Le procedure
Il Linguaggio Assembly: Le procedure Prof. Alberto Borghese Ing. I. Frosio Dipartimento di Scienze dell Informazione {borghese,frosio}@dsi.unimi.it Università degli Studi di Milano Riferimento sul Patterson:
DettagliIstruzioni di controllo del flusso
Istruzioni di controllo del flusso Il flusso di esecuzione è normalmente sequenziale Le istruzioni di controllo cambiano la prossima istruzione da eseguire Istruzioni di salto condizionato branch if equal
DettagliConvenzioni di chiamata a procedure
Università degli Studi di Milano Laboratorio di Architettura degli Elaboratori II Corso di Laurea in Informatica, A.A. 2016-2017 Convenzioni di chiamata a procedure Nicola Basilico Dipartimento di Informatica
DettagliConvenzioni per la chiamata a procedure
Università degli Studi di Milano Corso di Laurea in Informatica, A.A. 2017-2018 Convenzioni per la chiamata a procedure Homepage del corso Turno A Nicola Basilico Dipartimento di Informatica Via Comelico
DettagliIstruzioni di trasferimento dati
Istruzioni di trasferimento dati Leggere dalla memoria su registro: lw (load word) Scrivere da registro alla memoria: sw (store word) Esempio: Codice C: A[8] += h A è un array di numeri interi Codice Assembler:
DettagliArchitettura dei calcolatori e sistemi operativi. Sottoprogrammi e MIPS. Espressioni algebriche. Capitolo 2 P&H
Architettura dei calcolatori e sistemi operativi Sottoprogrammi e MIPS Espressioni algebriche Capitolo 2 P&H Sottoprogrammi Modello di chiamata Area di attivazione Calcolare un espressione algebrica 2
DettagliArchitetture dei Calcolatori
Architetture dei Calcolatori Lezione 11 -- 10/12/2011 Procedure Emiliano Casalicchio emiliano.casalicchio@uniroma2.it Fattoriale: risparmiamo sull uso dei registri q Rispetto alla soluzione precedente
DettagliGestione dei sottoprogrammi. temporaneo passaggio del controllo dal programma in esecuzione ad un sottoprogramma
Gestione dei sottoprogrammi temporaneo passaggio del controllo dal programma in esecuzione ad un sottoprogramma programma CALL sottoprogramma RETURN Subroutine linkage CALL: viene salvato l indirizzo di
DettagliAssembly V: Procedure annidate e recursive
Architettura degli Elaboratori e delle Reti Lezione 15 Assembly V: Procedure annidate e recursive Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano
DettagliUniversità degli Studi di Cassino
Corso di Gestione dei sottoprogrammi Anno Accademico 2007/2008 Francesco Tortorella Gestione dei sottoprogrammi temporaneo passaggio del controllo dal programma in esecuzione ad un sottoprogramma programma
DettagliUniversità degli Studi di Cassino e del Lazio Meridionale
di Cassino e del Lazio Meridionale Corso di Gestione dei sottoprogrammi Anno Accademico Francesco Tortorella Gestione dei sottoprogrammi temporaneo passaggio del controllo dal programma in esecuzione ad
DettagliFetch Decode Execute Program Counter controllare esegue prossima
Stored Program Istruzioni sono stringhe di bit Programmi: sequenze di istruzioni Programmi (come i dati) memorizzati in memoria La CPU legge le istruzioni dalla memoria (come i dati) Ciclo macchina (ciclo
DettagliArchitettura degli STACK. Dott. Franco Liberati
Architettura degli Elaboratori Dott. Franco Liberati Argomenti della lezione Approccio pratico in MARS Architettura degli Elaboratori Dott. Franco Liberati Generalità Lo stacko pila indica un tipo di dato
Dettaglip = 7. E = bias + p = = E = s e m
255 1 0.125 0 127 1 0.25 0 63 1 0.5 1 31 1 15 1 7 1 3 1 1 1. Rappresentazione binaria: 11111111.001 2. Scorrere la virgola: 3. Bit di segno: Numero positivo 0. 4. Esponente: 5. Mantissa: 1111111001 (ottenuta
DettagliProcedure: esempi. Esempi: ricorsione fattoriale Fibonacci ordinamenti
Procedure: esempi Esempi: ricorsione fattoriale Fibonacci ordinamenti 1 Fattoriale ricorsivo PH p. 83 e A27 main(int argc, char *argv[]) { int n; printf( Inserire un numero intero\n"); scanf("%d", &n);
DettagliProcedure SOMMARIO: DIPARTIMENTO DI INFORMATICA Laboratorio di Architetture degli Elaboratori II Turno B : ( G Z )
UNIVERSITÀ DEGLI STUDI DI MILANO matteo.re@unimi.it https://homes.di.unimi.it/re/arch2-lab-2015-2016.html DIPARTIMENTO DI INFORMATICA Laboratorio di Architetture degli Elaboratori II Turno B : ( G Z )
DettagliProgrammazione C. Funzioni e procedure: Activation record. passaggio per indirizzo
Programmazione C Funzioni e procedure: passaggio per indirizzo Activation record 2. PASSAGGIO PER INDIRIZZO Dire alla funzione l indirizzo di memoria cui accedere Se occorre passare un array ad una funzione,
DettagliAssembler MIPS 32 Assembly II
TITLE Assembler MIPS 32 Assembly II Riccardo Solmi 1 Indice degli argomenti Programmazione assembly Definizione e controllo di sottoprogrammi Definizione di funzione Chiamate a funzioni Convenzioni riguardanti
DettagliMIPS Instruction Set 2
Laboratorio di Architettura 18 Maggio 2012 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference cards: http://refcards.com/docs/waetzigj/mips/mipsref.pdf http://www.mips.com/media/files/md00565-2b-mips32-qrc-01.01.pdf
DettagliProgrammi in Assembly
Programmi in Assembly Prof. Alberto Borghese Dipartimento di Scienze dell Informazione borghese@dsi.unimi.it Università degli Studi di Milano 1/23 Esempio Numeri positivi # Programma che copia tramite
DettagliLe procedure ricorsive Come eseguire un programma. Architettura degli Elaboratori e delle Reti, Turno I
Le procedure ricorsive Come eseguire un programma Architettura degli Elaboratori e delle Reti, Turno I Alberto Borghese Università degli Studi di Milano Dipartimento di Scienze dell Informazione email:
DettagliAddendum: istruzioni linguaggio macchina. Università di Bergamo - corso di Calcolatori Elettronici 1
Addendum: istruzioni linguaggio macchina Università di Bergamo - corso di Calcolatori Elettronici 1 Control Loop C code: L1: g = g + A[i]; i = i + j; if (i!= h) goto L1; MIPS code: L1: add $t1, $s3, $s3
DettagliCalcolatori Elettronici
Calcolatori Elettronici Il linguaggio assemblativo MIPS (4) Le function (2) Gestione dei sottoprogrammi $a0 - $a3 - $v1 $ra : 4 registri argomento per il passaggio dei parametri : due registri per la restituzione
DettagliSpazio di indirizzamento virtuale
Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A. 016-01 Spazio di indirizzamento virtuale Pietro Di Lena - pietro.dilena@unibo.it // The function name says it all int stack_overflow (){
DettagliProcedure annidate. Università degli studi di Milano
Procedure annidate Università degli studi di Milano matteo.re@unimi.it http://homes.di.unimi.it/re/ Procedura foglia Scenario più semplice: il main chiama una procedura, la procedura termina senza chiamare
Dettagli5 April LABORATORIO 03 CONTROLLO DEL FLUSSO DI UN PROGRAMMA JUMP ADDRESS TABLE. I. Frosio
5 April 2012 04 LABORATORIO 03 CONTROLLO DEL FLUSSO DI UN PROGRAMMA JUMP ADDRESS TABLE I. Frosio 1 SOMMARIO If... Then... If... Then... Else... For... Break... While... Do Do... While Switch (jump address
DettagliSottoprogrammi in linguaggio assembly del Motorola 68000
Sottoprogrammi in linguaggio assembly del Motorola 68000 Daniele Paolo Scarpazza daniele.scarpazza@elet.polimi.it Politecnico di Milano Ultimo aggiornamento: 10 Maggio 2005 Bibliografia Sezioni 4.9, 5.6
DettagliARM: stack e subroutine
ARM: stack e subroutine 05.d Le istruzioni di accesso allo stack L istruzione di chiamata a subroutine Gestione degli stack frame Istruzione di store multiplo (STM Le istruzioni LDR e STR operano su parole
DettagliCalcolatori Ele,ronici Lezione 6 17/11/2011. Emiliano Casalicchio
Calcolatori Ele,ronici Lezione 6 17/11/2011 Emiliano Casalicchio Emiliano.Casalicchio@uniroma2.it Argomen7 della lezione Progammazione Assembler Richiamo sull uso dei registri Uso della memoria Esempio1:
DettagliSubroutine in linguaggio macchina: collegamento e passaggio dei parametri
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
DettagliSubroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami
Corso di Calcolatori Elettronici I Subroutine in linguaggio macchina: collegamento e passaggio dei parametri Prof. Roberto Canonico Università degli Studi di Napoli Federico II Facoltà di Ingegneria Corso
DettagliProgrammazione Assembly. RISC e CISC Esecuzione sequenziale Esecuzione condizionata Cicli Subroutine
Programmazione Assembly RISC e CISC Esecuzione sequenziale Esecuzione condizionata Cicli Subroutine RISC e CISC Possiamo classificare le architetture di microprocessore in due classi principali RISC CISC
DettagliIl set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini
Architettura degli Elaboratori e delle Reti Il set istruzioni di MIPS Modalità di indirizzamento Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano
DettagliGestione delle eccezioni.
Gestione delle eccezioni nicola.basilico@unimi.it http://homes.di.unimi.it/basilico/teaching/ Eccezioni Fetch Decodifica Calcolo Lettura / scrittura Eccezione (es. istruzione non riconosciuta) Eccezione
DettagliCorso di Architettura (Prof. Scarano) 10/05/2002
Lezione 0 Il Set di Istruzioni (6) Vittorio Scarano Architettura Corso di Laurea in Informatica Università degli Studi di Salerno Le procedure Prima della chiamata di una procedura In ogni linguaggio di
DettagliOttenere una modifica del parametro attuale
Ottenere una modifica del parametro attuale Le variabili passate come parametri a una funzione, se alterate durante l esecuzione, non cambiano valore all uscita dalla funzione (parametri passati per valore)
DettagliIl set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini
Architettura degli Elaboratori e delle Reti Il set istruzioni di MIPS Modalità di indirizzamento Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano
DettagliCalcolatori Elettronici Prof. Fabio Roli. Linguaggio Assembly. Capitolo 5. Corso di Laurea di Ingegneria Elettronica
Calcolatori Elettronici Prof. Fabio Roli Corso di Laurea di Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Fonti principali: Patterson, A.D., Hennessy, J., "Struttura, organizzazione e progetto
DettagliCalcolatori Ele,ronici Lezione del 15/11/2012. Emiliano Casalicchio
Calcolatori Ele,ronici Lezione del 15/11/2012 Emiliano Casalicchio Emiliano.Casalicchio@uniroma2.it Argomen> della lezione Progammazione Assembler Richiamo sull uso dei registri Uso della memoria Esempio1:
DettagliFondamenti di Informatica T. Linguaggio C: Stack e Ricorsione
Linguaggio C: Stack e Ricorsione FUNZIONI: IL MODELLO A RUN-TIME Ogni volta che viene invocata una funzione: si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri
DettagliARCHITETTURE DEI CALCOLATORI (canale A-I) - Prima prova in itinere del 16/6/2003 Compito tipo A
ARCHITETTURE DEI CALCOLATORI (canale A-I) - Prima prova in itinere del 16/6/2003 Compito tipo A *** indicano le affermazioni corrette. 1. Con riferimento alle architetture dei calcolatori ed alla valutazione
DettagliIl Linguaggio Assembly: Controllo del flusso: istruzioni e costrutti
Il Linguaggio Assembly: Controllo del flusso: istruzioni e costrutti Prof. Alberto Borghese Ing. Iuri Frosio Dipartimento di Scienze dell Informazione borghese,frosio@dsi.unimi.it Università degli Studi
DettagliManualino minimale MIPS
Università degli Studi dell Insubria Dipartimento di Scienze Teoriche e Applicate Manualino minimale MIPS Marco Tarini Operazioni aritmetiche Nome Comando completo Esempio Sintassi (es) Significato Semantica
Dettagli7 May INTERRUPT ED ECCEZIONI I. Frosio
1 INTERRUPT ED ECCEZIONI I. Frosio SOMMARIO Eccezioni ed interrupt Esempi Gestione SW delle eccezioni: i dettagli 2 CICLO DI ESECUZIONE DI UN ISTRUZIONE Fecth (prelievo istruzione dalla RAM) Decodifica
DettagliRecord di Attivazione Cenni sulla ricorsione
MASTER Information Technology Excellence Road (I.T.E.R.) Cenni sulla ricorsione Maurizio Palesi Salvatore Serrano Master ITER Informatica di Base Maurizio Palesi, Salvatore Serrano 1 Il modello a RUN-TIME
DettagliEccezioni. Università degli Studi di Milano Corso di Laurea in Informatica, A.A
Università degli Studi di Milano Corso di Laurea in Informatica, A.A. 2018-2019 Eccezioni Turno A Nicola Basilico Dipartimento di Informatica Via Comelico 39/41-20135 Milano (MI) Ufficio S242 nicola.basilico@unimi.it
DettagliMIPS Instruction Set 2
Laboratorio di Architettura 15 aprile 2011 1 Architettura Mips 2 Chiamata a Funzione 3 Esercitazione Registri MIPS reference card: http://refcards.com/docs/waetzigj/mips/mipsref.pdf 32 registri general
DettagliRecord di Attivazione
Record di Attivazione La macchina virtuale Record di attivazione di funzioni e procedure Record di attivazione 1 LA MACCHINA VIRTUALE DEL C MODELLO A TEMPO DI ESECUZIONE Aree di memoria: Area del codice
DettagliInvocazione di funzioni. Passaggio parametri Creazione record di attivazione (anche chiamato stack frame o area di attivazione)
Invocazione di funzioni Passaggio parametri Creazione record di attivazione (anche chiamato stack frame o area di attivazione) Passaggio parametri F(a,b,c) { } Z = g(x, y, z) Record di attivazione o registri
DettagliGestione della memoria
Gestione della memoria Stack di attivazione, Heap Stack di attivazione, Heap Gestione della memoria 1 / 52 La gestione della memoria Come il compilatore-interprete, organizza i dati necessari all esecuzione
DettagliMacchina di Riferimento: argomenti
Macchina di Riferimento: argomenti L'architettura di una macchina MIPS Organizzazione della memoria I registri della CPU L'esecuzione dei programmi Il ciclo fetch-execute Il simulatore SPIM 1 Architettura
DettagliUniversità degli Studi di Roma La Sapienza
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Introduzione ai concetti ed al simulatore SPIM Indice degli argomenti Introduzione Assembler, compilatore, linker, programma
DettagliRichiami: v[i] e &v[i] Organizzazione della memoria. Esercizio 1. Esercitazione di Calcolatori Elettronici Prof. Gian Luca Marcialis
Esercitazione di Calcolatori Elettronici Prof. Gian Luca Marcialis Corso di Laurea in Ingegneria Biomedica Corso di Laurea in Ingegneria Elettrica, Elettronica ed Informatica Capitolo 5 Linguaggio Assembly
Dettagli15 April INTERRUPT ED ECCEZIONI I. Frosio
15 April 2011 1 INTERRUPT ED ECCEZIONI I. Frosio SOMMARIO Eccezioni ed interrupt Esempi Gestione SW delle eccezioni: i dettagli 2 CICLO DI ESECUZIONE DI UN ISTRUZIONE Fecth (prelievo istruzione dalla RAM)
Dettagli/ sezione dichiarativa variabili globali / #define N 10 int vett [N];
esercizio linguaggio macchina esame 9 luglio 2015 prima parte traduzione in assembler Si deve tradurre in linguaggio macchina simbolico (linguaggio assemblatore) MIPS il frammento di programma C riportato
DettagliLa gestione della memoria. Gestione della memoria. Uso della Memoria RAM
La gestione della memoria Gestione della memoria Stack di attivazione, Heap Come il compilatore-interprete, organizza i dati necessari all esecuzione del programma. Alcuni aspetti organizzativi già visti
DettagliArchitettura degli. Assemblatore Nomenclatura MARS. Dott. Franco Liberati
Architettura degli Elaboratori Assemblatore Nomenclatura MARS Dott. Franco Liberati Assemblatore Introduzione Argomenti della lezione Nomenclatura Registri Istruzioni e pseudoistruzioni Architettura degli
DettagliSystem Calls, Register Spilling
System Calls, Register Spilling Ultimo aggiornamento: 8/4/2016 UNIVERSITÀ DEGLI STUDI DI MILANO nicola.basilico@unimi.it http://basilico.di.unimi.it/ Esercizio 3.1 Eseguire il seguente codice assembly
DettagliCalcolatori Elettronici Lezione A4 Programmazione a Moduli
Calcolatori Elettronici Lezione A4 Programmazione a Moduli Ing. Gestionale e delle Telecomunicazioni A.A. 2007/08 Gabriele Cecchetti Sommario Programmazione a moduli Programmi con linguaggi misti Tempo
DettagliArchitettura degli Elaboratori e Laboratorio. Matteo Manzali Università degli Studi di Ferrara Anno Accademico
Architettura degli Elaboratori e Laboratorio Matteo Manzali Università degli Studi di Ferrara Anno Accademico 2016-2017 Syscall Le syscall (chiamate di sistema) sono un insieme di servizi di sistema invocabili
DettagliProgrammazione II. Lezione 7. Daniele Sgandurra 9/11/2010.
Programmazione II Lezione 7 Daniele Sgandurra daniele.sgandurra@iit.cnr.it 9/11/2010 1/24 Programmazione II Lezione 7 9/11/2010 Sommario 1 Gestione della Memoria 2/24 Programmazione II Lezione 7 9/11/2010
DettagliPassaggio di Parametri per Valore o Indirizzo
Passaggio di Parametri per Valore o Indirizzo Come in C, l assembler permette di passare un dato per valore (copia) o per indirizzo, nel secondo caso rendendo modificabile il dato stesso da dentro una
DettagliIstruzioni assembler Istruzione N Registri
Istruzioni assembler Istruzione N Registri Aritmetica add a, b, c a = b+c addi a, b, num a = b + sub a, b, c a = b - c mul a, b, c a = b*c div a, b, c a = b/c utilizzati Descrizione 3 Somma. Somma b e
DettagliL'INDIRIZZAMENTO NEL PROCESSORE MC PARTE 1 -
L'INDIRIZZAMENTO NEL PROCESSORE MC 68000 - PARTE 1 - CALCOLATORI ELETTRONICI I CdL Ingegneria Biomedica (A-I) DIS - Università degli Studi di Napoli Federico II Modi di indirizzamento Tecniche di indirizzamento:
DettagliEsempi di Programmi Assembly. Luigi Palopoli, Luca Abeni
Esempi di Programmi Assembly Luigi Palopoli, Luca Abeni Scopo della lezione In questa lezione vedremo alcuni esempi di programmi (o frammenti di programmi) in vari linguaggi assembly per renderciconto
DettagliProcedure annidate. Università degli Studi di Milano Corso di Laurea in Informatica, A.A Homepage del corso
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
DettagliAssembly III SPIM: un ambiente di simulazione MIPS
Architettura degli Elaboratori e delle Reti Lezione 13 Assembly III SPIM: un ambiente di simulazione MIPS Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi
DettagliSPIM e MIPS. Non abbiamo bisogno di una PSP per testare il codice
SPIM e MIPS Non abbiamo bisogno di una PSP per testare il codice Michele Jazzinghen Bianchi Interessi: Game Design, Embedded Systems email: michele.bianchi@unitn.it Webpage: http://disi.unitn.it/~bianchi
DettagliIntroduzione a MIPS64 (II parte)
Introduzione a MIPS64 (II parte) Chiamate di Sistema syscall n Utilizzate come interfaccia col sistema operativo, funzioni diverse (n = 0..5) Sono simili alle chiamate exit(), open(), close(), read(),
DettagliLa struttura delle istruzioni elementari: il linguaggio Macchina. Sommario
La struttura delle istruzioni elementari: il linguaggio Macchina Prof. Alberto Borghese Dipartimento di Scienze dell Informazione borghese@dsi.unimi.it Università degli Studi di Milano Riferimento sul
DettagliRichiami: v[i] e &v[i] Organizzazione della memoria. Organizzazione della memoria. Esercitazione di Calcolatori Elettronici Ing. Gian Luca Marcialis
Esercitazione di Ing. Gian Luca Corso di Laurea in Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Richiami: v[i] e &v[i] v[i] è il valore dell elemento i nel vettore v; &v[i] è il suo indirizzo.
DettagliESERCIZIO 1 Si consideri la seguente funzione f (A, B, C, D) non completamente specificata definita attraverso il suo ON-SET e DC-SET:
Università degli Studi di Milano Corso Architettura degli elaboratori e delle reti Prof. Cristina Silvano A.A. 2004/2005 Esame scritto del 15 luglio 2005 Cognome: Matricola: Nome: Istruzioni Scrivere solo
DettagliSommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali
Prof. Gian Luca Marcialis Corso di Laurea di Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Fonti principali: Patterson, A.D., Hennessy, J., "Struttura, organizzazione e progetto dei calcolatori
DettagliCorso di Laurea in Ingegneria Biomedica Corso di Laurea in Ingegneria Elettrica, Elettronica ed Informatica
Modulo Calcolatori Elettronici Prof. Gian Luca Marcialis Corso di Laurea in Ingegneria Biomedica Corso di Laurea in Ingegneria Elettrica, Elettronica ed Informatica Capitolo 5 Linguaggio Assembly Fonti
DettagliFRAMEWORK PER L'ESECUZIONE DI APPLICAZIONI ASSEMBLY SUL MODELLO VERILOG DI UN SISTEMA DI ELABORAZIONE BASATO SUL PROCESSORE emips-sc
44 FRAMEWORK PER L'ESECUZIONE DI APPLICAZIONI ASSEMBLY SUL MODELLO VERILOG DI UN SISTEMA DI ELABORAZIONE BASATO SUL PROCESSORE emips-sc MODELLO VERILOG DEL PROCESSORE 45 MODELLO VERILOG DEL SISTEMA COMPLETO
DettagliMIPS! !
MIPS! Sono descritte solamente le istruzioni di MIPS32, le pseudo-istruzioni, System Calls e direttive del linguaggio assembly che sono maggiormente usate.! MIPS è big-endian, cioè, lʼindirizzo di una
DettagliLe etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j
L insieme delle istruzioni (2) Architetture dei Calcolatori (lettere A-I) Istruzioni per operazioni logiche: shift Shift (traslazione) dei bit di una parola a destra o sinistra sll (shift left logical):
DettagliEsercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Capitolo 5 Linguaggio Assembly
Esercitazione di Calcolatori Elettronici Ing. Battista Biggio Corso di Laurea in Ingegneria Elettronica Capitolo 5 Linguaggio Assembly Richiami: v[i] e &v[i] v[i] è il valore dell elemento i nel vettore
DettagliDal sorgente all eseguibile I programmi Assembly. Prof. Alberto Borghese Dipartimento di Scienze dell Informazione
Dal sorgente all eseguibile I programmi Assembly Prof. Alberto Borghese Dipartimento di Scienze dell Informazione alberto.borghese@unimi.it Riferimenti sul Patterson: Cap. 2.10 + Appendice B, tranne B.7
DettagliAllocazione dinamica della memoria
Università degli Studi di Milano Corso di Laurea in Informatica, A.A. 2017-2018 Allocazione dinamica della memoria Homepage del corso Turno A Nicola Basilico Dipartimento di Informatica Via Comelico 39/41-20135
DettagliAutilia Vitiello Dip. di Informatica ed Applicazioni Stecca 7, 2 piano, stanza 12
Autilia Vitiello Dip. di Informatica ed Applicazioni Stecca 7, 2 piano, stanza 12 vitiello@dia.unisa.it http://www.dia.unisa.it/~avitiello Presentazione Corso di Architettura matricole congruo a 0: prof.
DettagliDal sorgente all eseguibile I programmi Assembly. Prof. Alberto Borghese Dipartimento di Scienze dell Informazione
Dal sorgente all eseguibile I programmi Assembly Prof. Alberto Borghese Dipartimento di Scienze dell Informazione alberto.borghese@unimi.it Riferimenti sul Patterson: Cap. 2.10 + Appendice B, tranne B.7
DettagliL ambiente di simulazione SPIM
Architettura degli Elaboratori e delle Reti Lezione 14 L ambiente di simulazione SPIM Proff. A. Borghese, F. Pedersini Dipartimento di Scienze dell Informazione Università degli Studi di Milano L 14 1/28
DettagliArchitettura degli Elaboratori
Architettura degli Elaboratori Linguaggio macchina e assembler (caso di studio: processore MIPS) slide a cura di Salvatore Orlando, Marta Simeoni, Andrea Torsello Architettura degli Elaboratori 1 1 Istruzioni
DettagliFUNZIONI: IL MODELLO A RUN-TIME!
FUNZIONI: IL MODELLO A RUN-TIME! Ogni volta che viene invocata una funzione si crea di una nuova attivazione (istanza) del servitore viene allocata la memoria per i parametri e per le variabili locali
DettagliLinguaggio assembler e linguaggio macchina (caso di studio: processore MIPS)
Linguaggio assembler e linguaggio macchina (caso di studio: processore MIPS) Salvatore Orlando Arch. Elab. - S. Orlando 1 Livelli di astrazione Scendendo di livello, diventiamo più concreti e scopriamo
Dettagli