Calcolatori Elettronici

Похожие документы
Istruzioni di trasferimento dati

ESERCIZIO 1 Si consideri la seguente funzione f (A, B, C, D) non completamente specificata definita attraverso il suo ON-SET e DC-SET:

MIPS Instruction Set 2

Il set istruzioni di MIPS Modalità di indirizzamento. Proff. A. Borghese, F. Pedersini

Esercitazione di Calcolatori Elettronici Ing. Battista Biggio. Corso di Laurea in Ingegneria Elettronica. Capitolo 5 Linguaggio Assembly

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri. Sottoprogrammi: richiami

Subroutine in linguaggio macchina: collegamento e passaggio dei parametri

Spazio di indirizzamento virtuale

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Università degli Studi di Cassino

Il linguaggio Assembly

ARM: stack e subroutine

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

Corso di Calcolatori Elettronici MIPS: Istruzioni di confronto Istruzioni di controllo Formato delle istruzioni in L.M.

Istruzioni assembler Istruzione N Registri

Sommario Introduzione al linguaggio Assembly. Calcolatori Elettronici Prof. Gian Luca Marcialis. Le operazioni fondamentali

1. Si effettui la divisione di 7/5 utilizzando un efficiente algoritmo e illustrando la corrispondente architettura hardware.

Passaggio di Parametri per Valore o Indirizzo

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Calcolatori Elettronici

Sottoprogrammi in linguaggio assembly del Motorola 68000

Lecture 2: Prime Istruzioni

Calcolatori Elettronici A a.a. 2008/2009

Riassunto. Riassunto. Ciclo fetch&execute. Concetto di programma memorizzato. Istruzioni aritmetiche add, sub, mult, div

Linguaggio Assembler MIPS

Linguaggio macchina. Architettura degli Elaboratori e delle Reti. Il linguaggio macchina. Lezione 16. Proff. A. Borghese, F.

Linguaggio Assembly e linguaggio macchina

Istruzioni MIPS per floating point

Linguaggio Assembly e linguaggio macchina

Linguaggio Assembly e linguaggio macchina

Funzioni, Stack e Visibilità delle Variabili in C

Assembly III SPIM: un ambiente di simulazione MIPS

Introduzione. Indice. Linguaggio macchina. Linguaggio assembler

Processore Danilo Dessì. Architettura degli Elaboratori.

L ambiente di simulazione SPIM

Richiami sull architettura del processore MIPS a 32 bit

Richiami sull architettura del processore MIPS a 32 bit

COMPITINO #1 di CALCOLATORI ELETTRONICI 1 del COGNOME NOME

Linguaggi di alto livello, compilatori e interpreti

I processi: concetti di base, context switch e scheduling

L'architettura del processore MIPS

Il linguaggio macchina

ISA (Instruction Set Architecture) della CPU MIPS

Assembly MIPS: gestione degli array strutture di controllo. A. Borghese, F. Pedersini Dipartimento di Informatica Università degli Studi di Milano

Calcolatori Elettronici A a.a. 2008/2009

MIPS Instruction Set 1

Architettura dei Calcolatori elettronici

Lezione 20. Assembly MIPS: Il set istruzioni, strutture di controllo in Assembly

Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina. Linguaggio Macchina ADD A,B ISTRUZIONE SUCCESSIVA

Gestione Degli INTERRUPT

Il linguaggio assembly

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Laboratorio di Architettura lezione 5. Massimo Marchiori W3C/MIT/UNIVE

Parametri Formali di una Funzione e Record di Attivazione

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Laboratorio di Architettura degli Elaboratori

Il simulatore SPIM SPIM

Транскрипт:

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 dei valori : un registro di ritorno per tornare al punto di origine jal etichetta_function : istruzione che salta all etichetta specificata e salva in $ra l indirizzo di ritorno jr $ra : istruzione che permette il ritorno al punto di origine (salta all indirizzo contenuto in $ra) Calcolatori Elettronici - MIPS(5) - Slide 2 L. Tarantino - a.a. 2004/2005 1

Esempio main() $a0,$a1 int a,b,c,d; a = molt(b,c); int molt (int op1, int op2) int prod; prod = 0; while (op2!= 0) prod = prod + op1; op2 = op2-1; return prod; Ipotesi: op2 > 0 Var Registro a $s0 b $s1 c $s2 Nel programma chiamante: La function: add $a0,$s1,$zero add $a1,$s2,$zero jal molt add $s0,,$zero molt: add,$zero,$zero loop: beq $a1,$zero,exit add,,$a0 addi $a1,$a1,-1 j loop exit: jr $ra Calcolatori Elettronici - MIPS(5) - Slide 3 L. Tarantino - a.a. 2004/2005 I registri temporanei (1) int esempio (int g, int h, int f; f = (g + h) - (i + j); $t0,$t1 Si assume che i registri temporanei siano a disposizione del programma chiamato. E compito del chiamante salvarne i valori se vuole che siano preservati vedremo dove Calcolatori Elettronici - MIPS(5) - Slide 4 L. Tarantino - a.a. 2004/2005 2

I registri temporanei (2) int esempio (int g, int h, int f; f = (g + h) - (i + j); $t0,$t1 La function: esempio: add $t0,$a0,$a1 add $t1,$a2,$a3 sub,$t0,$t1 jr $ra Calcolatori Elettronici - MIPS(5) - Slide 5 L. Tarantino - a.a. 2004/2005 Il salvataggio dei registri temporanei Necessario quando il programma chiamante non vuole perdere il contenuto di qualche registro temporaneo E buona norma di programmazione ricordarsi di salvare tutti i registri che non si vogliono perdere e non solo quelli usati dal programma chiamato (potremmo non conoscerlo nei dettagli) Viene usata un area di memoria che può crescere su richiesta del programma (struttura dinamica) Al ritorno al programma chiamante bisogna ripristinare il valore dei registri recuperandoli da tale struttura dinamica Si può utilizzare il protocollo last-in-first-out (lifo), cioè una struttura a pila (stack) Calcolatori Elettronici - MIPS(5) - Slide 6 L. Tarantino - a.a. 2004/2005 3

Lo stack Il puntatore alla cima dello stack (stack pointer ) è in un registro: $sp Lo stack cresce da indirizzi di memoria alti verso indirizzi di memoria più bassi ($sp diminuisce), diminuisce da indirizzi bassi verso indirizzi più alti ($sp aumenta) Memoria $sp $sp Stack vuoto Lo stack cresce $sp Lo stack diminuisce Calcolatori Elettronici - MIPS(5) - Slide 7 L. Tarantino - a.a. 2004/2005 Esempio (1) - La function main() int a,b,c,d,e; a = esempio(b,c,d,e); int esempio (int g, int h, int f; f = (g + h) - (i + j); $t0,$t1 Var Registro a $s0 b $s1 c $s2 d $s3 e $s4 La function: esempio: add $t0,$a0,$a1 add $t1,$a2,$a3 sub,$t0,$t1 jr $ra Calcolatori Elettronici - MIPS(5) - Slide 8 L. Tarantino - a.a. 2004/2005 4

Esempio (2) - Nel programma chiamante main() int a,b,c,d,e; a = esempio(b,c,d,e); Supponiamo di non voler perdere $t0 Var Registro a $s0 b $s1 c $s2 d $s3 e $s4 addi $sp,$sp,-4 # aggiornamento di $sp per far spazio # a un elemento (4 byte) sw $t0,0($sp) # salvataggio di $t0 nello stack add $a0,$s1,$zero # passaggio primo parametro # gli altri sono analoghi jal esempio # salto al sottoprogramma add $s0,,$zero # recupero il valore restituito in lw $t0,0($sp) # recupero il valore di $t0 dallo stack addi $sp,$sp,4 # aggiornamento di $sp per eliminare # un elemento (4 byte) Calcolatori Elettronici - MIPS(5) - Slide 9 L. Tarantino - a.a. 2004/2005 Esempio (3) - Nel programma chiamante Supponiamo di non voler perdere $t0 e $t1 addi $sp,$sp,-8 # aggiornamento di $sp per far spazio # a due elementi (8 byte) sw $t0,4($sp) # salvataggio di $t0 nello stack sw $t1,0($sp) # salvataggio di $t1 nello stack add $a0,$s1,$zero # passaggio primo parametro # gli altri sono analoghi jal esempio # salto al sottoprogramma add $s0,,$zero # recupero il valore restituito in lw $t1,0($sp) # recupero il valore di $t1 dallo stack lw $t0,4($sp) # recupero il valore di $t0 dallo stack addi $sp,$sp,8 # aggiornamento di $sp per eliminare # due elementi (8 byte) Notare l ordine: l ultimo a entrare è il primo a uscire Calcolatori Elettronici - MIPS(5) - Slide 10 L. Tarantino - a.a. 2004/2005 5

Generalizzando elementi del codice da specificare Nel programma chiamante (gestione della chiamata) addi $sp,$sp,-4*n # aggiornamento di $sp per far spazio # a n elementi (4*n byte) sw $t0, 4*(n-1)($sp) #... # salvataggi registri nello stack sw $t1,0($sp) # add $a0,$s_,$zero # passaggi parametri... # gli altri sono analoghi jal etichetta # salto al sottoprogramma add $s_,,$zero # recupero valore restituito in lw $t0, 0($sp) #... # ripristino registri dallo stack lw $t0, 4*(n-1)($sp) # addi $sp,$sp, 4*n # aggiornamento di $sp per eliminare # n elementi (4*n byte) Calcolatori Elettronici - MIPS(5) - Slide 11 L. Tarantino - a.a. 2004/2005 Esercizio (1) Compilare la seguente chiamata a function ipotizzando di non voler perdere il valore dei registri $t0, $t1 e $t3 Si noti che non è necessario conoscere il corpo della function Var Registro a $s0 b $s1 c $s2 main() int a,b,c,d,e; a = esempio(b,c); $a0,$a1 Calcolatori Elettronici - MIPS(5) - Slide 12 L. Tarantino - a.a. 2004/2005 6

I registri salvati ($s_ ) int esempio (int g, int h, int f; int k; k = g + h f = k - (i + j); $t1 $s0 secondo la convenzione che le variabili vadano nei registri $sx Si assume che i registri salvati rimangano inalterati (cioè al ritorno al programma chiamante il valore è lo stesso che avevano prima della chiamata) E compito del chiamato salvarne i valori se vuole che siano preservati nello stack! Calcolatori Elettronici - MIPS(5) - Slide 14 L. Tarantino - a.a. 2004/2005 Il salvataggio dei registri salvati Necessario quando il programma chiamato vuole usare qualche registro salvato (non bisogna perderne il contenuto) Occorre salvare tutti i registri che vengono usati Anche in questo caso viene usato lo stack Prima di ritornare al programma chiamante bisogna ripristinare il valore dei registri recuperandoli dallo stack Calcolatori Elettronici - MIPS(5) - Slide 15 L. Tarantino - a.a. 2004/2005 7

Esempio La function: int esempio (int g, int h, int f; int k; $s0 k = (g + h) f = k - (i + j); $t1 esempio: addi $sp,$sp,-4 # aggiornamento di $sp per far spazio # a un elemento (4 byte) sw $s0,0($sp) # salvataggio di $s0 nello stack add $s0,$a0,$a1 # k = g + h add $t1,$a2,$a3 # $t1 = i + j sub,$s0,$t1 # f = k - (i + j) lw $s0,0($sp) # recupero il valore di $s0 dallo stack addi $sp,$sp,4 # aggiornamento di $sp per eliminare # un elemento (4 byte) jr $ra # ritorno al programma chiamante Calcolatori Elettronici - MIPS(5) - Slide 16 L. Tarantino - a.a. 2004/2005 Generalizzando Nel programma chiamato addi $sp,$sp,-4*n elementi del codice da specificare # aggiornamento di $sp per far spazio # a n elementi (4*n byte) sw $s0, 4*(n-1)($sp) #... # salvataggi registri nello stack sw $s1,0($sp) #... #... # corpo della subroutine... # lw $s1, 0($sp) #... # ripristino registri dallo stack lw $s0, 4*(n-1)($sp) # addi $sp,$sp, 4*n # aggiornamento di $sp per eliminare # n elementi (4*n byte) Calcolatori Elettronici - MIPS(5) - Slide 17 L. Tarantino - a.a. 2004/2005 8

Esercizio (1) Compilare la seguente function: int esercizio (int g, int h, int f; int k1; int k2; $s0,$s1 k1 = g + h; k2 = i - j; f = k1 - k2; Calcolatori Elettronici - MIPS(5) - Slide 18 L. Tarantino - a.a. 2004/2005 Identificatori numerici dei registri $zero 0 costante zero 1 da definire - $v1 2-3 restituzione dei valori $a0 - $a3 4-7 parametri $t0 - $t7 8-15 variabili temporanee $s0 - $s7 16-23 variabili salvate $t8 - $t9 24-25 altre variabili temporanee 26-28 da definire $sp 29 stack pointer 30 da definire $ra 31 indirizzo di ritorno Calcolatori Elettronici - MIPS(5) - Slide 20 L. Tarantino - a.a. 2004/2005 9

Esercizio (1) Determinare i registri ($s_,$t_,$a_,$v_) necessari alla compilazione delle seguenti linee di codice e determinare i necessari salvataggi sullo stack k = A[i] - (g + k); g = molt(k,5): B[i] = g + 10; Calcolatori Elettronici - MIPS(5) - Slide 21 L. Tarantino - a.a. 2004/2005 10