Gestione delle subroutine

Slides:



Advertisements
Presentazioni simili
in un programma Assembler
Advertisements

Dalla scrittura all’esecuzione
Estendere i linguaggi: i tipi di dato astratti
Procedure In assembler.
Procedure e funzioni A. Ferrari.
Strutture dati lineari
LS Tron Classe 4TC – as 2006/07 LORGANIZZAZIONE DEI PROGRAMMI UD. 8 p. 282.
Università degli Studi di Napoli Federico II Facoltà di Ingegneria Dipartimento di Informatica e Sistemistica Corso di Sistemi ad elevate prestazioni –
Definizione e tipi di implementazione
Generazione di Codice Intermedio
Elaboratore e Sistemi Operativo
Massa Laura Mela Enrica
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.
Indirizzi delle variabili A ogni variabile sono associati tre concetti fondamentali: il valore memorizzato; il tipo dati di appartenenza; lindirizzo. Il.
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Laboratorio di informatica: ASSEMBLER
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Funzioni.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
eliana minicozzi linguaggi1a.a lezione2
Microprogrammazione Codice operativo.
CALCOLATORI ELETTRONICI II
CALCOLATORI ELETTRONICI Gestione delle subroutine.
Esercizio Semaforo Un processore è interfacciato a due periferiche di input che indicano il numero di autovetture passate nelle due direzioni di un incrocio.
Il processore PD32 Set Istruzioni. Listruzione (almeno 32 bit) è divisa in più campi codice operativo specifica operazione (classe e tipo) parte indirizzo.
CALCOLATORI ELETTRONICI
Interfaccia del Timer1 I/O AB I/O DB I/O CB Dec SELECT START IRQ SCO R Q S Q STATUS STARTDEV COMPLETE CLEAR IVN CPU IACK IN IACK OUT IRQ IOWR REG COUNTER.
Esercizio Esame Un processore PD32 è interfacciato a due periferiche di input A e B, e ad un DMAC il quale puo’ gestire trasferimento di dati da B verso.
Il processore PD32.
Dal busy-wait allinterrupt Tecniche di interazione con periferiche di I/O finora studiate sono: Polling Busy-waiting Entrambe nella categoria sincrona.
Il processore PD32 Set Istruzioni.
Esercizio Temperatura Una stanza e monitorata da 4 sensori di temperatura, i quali sono pilotati da un PD32. Questultimo controlla costantemente che il.
Il Linguaggio Macchina
1 Generazione codice Daniela Briola Lorena Bellino.
Codifica di algoritmi linguaggio macchina vs programmazione strutturata 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.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
CALCOLATORI ELETTRONICI II
Introduzione al linguaggio assembly del microprocessore a parte
Introduzione al linguaggio assemby del microprocessore a parte
I vettore interruzioni
Architettura del calcolatore
Alcune Istruzioni per la gestione dellI/O (Classe 7) Per la destinazione D0 sono ammessi tutti i tipi di indirizzamento tranne quello immediato. Per la.
Sottoprogramma Un blocco di istruzioni, come ad esempio lanello di ritardo, può costituire un sottoprogramma (subroutine) a sé stante, richiamabile dal.
Introduzione al linguaggio assembly del microprocessore a parte
Sia TAPE una periferica di gestione di nastri magnetici in grado di acquisire/fornire dati a 8 bit, e sia CD una periferica di masterizzazione in grado.

Calcolatori Elettronici Il Processore
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 11 Ottobre 2014.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Procedure e Macro.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allievi Elettrici - AA Le funzioni ricorsive in C
Programmazione Assembly
Corso di Laurea in Informatica Architettura degli elaboratori a.a La macchina programmata Instruction Set Architecture (2) Istruzioni I-type Indirizzamento.
1 M. Rebaudengo, M. Sonza Reorda Politecnico di Torino Dip. di Automatica e Informatica M. Rebaudengo - M. Sonza Reorda L’Assembler 8086 Istruzioni per.
Relazione sulle strutture dati Svolta da: Buccella Simone Strutture di dati Aree di memoria Puntatore numericibooleani alfabetici Statici dinamici Puntatori.
L’esecuzione dei programmi
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
FUNZIONI: IL MODELLO A RUN-TIME 1) creazione di una nuova attivazione (istanza) del servitore 2) allocazione di memoria per i parametri e per le variabili.
Esercitazione 4 Chiamate di procedure Claudia Raibulet
Fondamenti di Informatica1 Linguaggi Diversi tipi di linguaggi: –Imperativi –Funzionali –Dichiarativi Tutti basati sulla traduzione nell'unico linguaggio.
Il calcolatore Stefano Cagnoni e Monica Mordonini
Convenzioni chiamate a procedure Riassunto Pratico.
1 System Call ancora Vediamo passo passo come funziona una SC.
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.
Corso di Informatica Applicata Introduzione Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Ing. Saverio De.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Strutture dati di tipo astratto 19 Strutture dati,
 Ogni processo che deve essere eseguito da un sistema di elaborazione, deve essere caricato e risiedere almeno parzialmente nella memoria centrale 
Transcript della presentazione:

Gestione delle subroutine

Vantaggi delle subroutines In maniera analoga alle funzioni/metodi dei linguaggi di alto livello, anche in assembly le subroutines garantiscono una maggiore semplicità, modularità e riusabilità del software. Inoltre riducono il consumo di memoria necessario per la memorizzazione del codice, nel caso in cui un determinato insieme di istruzioni debba essere richiamato più volte durante l’elaborazione.

Salto a sottoprogramma L’istruzione di salto a subroutine (JSR) permette di saltare da un programma – programma principale – ad un altro programma – sottoprogramma. Esempio JSR moltiplicazione ;salta al sottoprogramma “moltiplicazione” L’esecuzione del sottoprogramma termina con l’istruzione RET, con la quale si ritorna ad eseguire il programma principale, o meglio il programma chiamante.

Collegamento tra programma e sottoprogramma Programma principale Sottoprogramma A JSR A JSR A RET

Differenza tra JMP e JSR La sintassi di JSR (Jump To Subroutine) è la stessa dell’istruzione di salto incondizionato JMP, cioè: JSR <dest> dove dest è l’indirizzo di memoria della prima istruzione della subroutine espresso sotto forma di numero binario a 32 bit o di riferimento simbolico. A differenza dell’istruzione JMP, il microprogramma associato all’istruzione JSR, prima di rimpiazzare il contenuto del PC con l’indirizzo <dest>, deve memorizzarne il valore in memoria. In questo modo, al termine della subroutine, l’esecuzione può riprendere dall’istruzione successiva alla JSR. L’area di memoria preposta alla memorizzazione degli indirizzi di ritorno delle subroutines deve permettere di gestire efficentemente anche situazioni più complesse, in cui i sottoprogrammi chiamano a loro volta altri sottoprogrammi (nested subroutines).

Nested subroutines Programma principale Sottoprogr. C Sottoprogr. A 1 2 JSR A 3 JSR B 6 5 JSR C 4 RET RET RET JSR A

Lo stack La gestione dei sottoprogrammi è basata su una struttura dati chiamata stack (pila), gestita con una tecnica LIFO (Last In First Out): gli elementi vengono prelevati a partire dall’ultimo che è stato memorizzato. L’operazione di inserimento di un alla sommità (top) dello stack è chiamata push, mentre l’operazione inversa è chiamata pop. Le operazioni di PUSH e POP, sebbene non disponibili nel set di istruzioni del PD32, vengono comunque implementate come pseudoistruzioni di movimento dati. Le pseudoistruzioni sono non sono implementate a livello hardware, ma sono messe a disposizione dall’assemblatore che provvede a mapparle nelle istruzioni del microprocessore equivalenti.

La gestione dello stack nel PD32 Nel PD32 lo stack è costituito da longword e ad esso è associato un particolare registro detto SP (Stack Pointer) che nel PD32 coincide con il registro R7. Tale registro punta sempre alla cima (top) dello stack. Per “ragioni storiche”, nel PD32 lo stack cresce verso indirizzi di memoria decrescenti. Sia S l’indirizzo iniziale dello stack (base), allora gli n elementi presenti sono memorizzati nelle locazioni consecutive: S, S-4, S-8,…,S-4*n elem.2 byte 2 S BASE S-1 S-2 S-3 S-4 S-5 S-6 S-7 S-8 elem.1 byte 4 LSB elem.1 byte 3 elem.1 byte 2 elem.1 byte 1 MSB elem.2 byte 4 LSB elem.2 byte 3 elem.2 byte 1 MSB TOP S-8 R7

Le pseudoistruzioni per la gestione dello stack PSEUDO-ISTRUZIONE OP. COMMENTO PUSH S Inserisce in cima allo stack una longword indirizzata dall’operando sorgente S. Viene tradotta come: MOVL S, -(R7) POP D Estrae dallo stack una longword e la pone nella locazione indicata dall’operando D. Viene tradotta come: MOVL (R7)+, D PUSHSR - Inserisce lo Status Register in cima allo stack. Viene tradotta come: MOVRFRSR -(R7) POPSR Ripristina lo Status Register con la longword presente in cima allo stack. Viene tradotta come: MOVTOSR (R7)+

Esempio esecuzione PUSH PRIMA DI ESEGUIRE PUSH R6… … E DOPO BASE 78 56 34 12 000027FC 000027FC BASE 78 56 34 TOP 000027F8 000027F8 12 44 33 22 TOP 000027F4 11 R6 R6 11223344 11223344 PC PC 00000410 00000414 R7 R7 000027F8 000027F4

Esempio esecuzione POP PRIMA DI ESEGUIRE POP R5… … E DOPO BASE 78 56 34 12 000027FC BASE 000027FC 78 56 34 000027F8 TOP 12 000027F8 44 33 22 TOP 000027F4 11 R5 R5 FFFFFFFF 11223344 PC PC 00000414 00000418 R7 R7 000027F4 000027F8

Lo stack e le subroutines L’istruzione JSR inserisce (PUSH) in cima allo stack il valore del PC, ovvero l’indirizzo di ritorno della subroutine. In maniera analoga, l’istruzione RET estrae dalla cima dello stack una longword che memorizza all’interno del PC. Nella successiva fase di fetch sarà quindi caricata nell’IR l’istruzione che segue la JSR. Lo stack è inoltre utilizzato dalla subroutine chiamata per salvare i registri che saranno utilizzati e quindi sovrascritti, così da poterne ripristinare il valore originale prima di eseguire il RET. Questa operazione assicura che la funzione chiamante trovi i registri inalterati una volta terminata l’esecuzione della subroutine.

Il passaggio di parametri alle subroutine Esistono diverse tecniche per il passaggio di parametri ad una subroutine: La soluzione più efficiente è prevedere l’utilizzo di uno o più registri per il passaggio diretto dei alla subroutines. In tal modo si evitano completamente accessi alla memoria. Il limite di tale tecnica è legato al ristretto numero di registri disponibili. Nel caso in cui i parametri da passare alla subroutine non possano essere memorizzati direttamente all’interno dei registri del PD32 è comunque possibile utilizzare i registri per indirizzare una o più aree di memoria nelle quali siano state preventivamente memorizzate i parametri da scambiare.

Le variabili nell’assembly del PD32

Direttive di definizione variabili Sintassi: label dl/dw/db n {,nj} Dichiara una variabile di nome label inizializzata al valore n. Eventuali altri numeri specificati oltre il primo sono allocati consecutivamente in memoria a partire dall’indirizzo associato a label. Tale indirizzo è scelto dall’assemblatore! var1 DW 4 var1 è un place-holder per una word collocata in memoria in una locazione scelta dall’assemblatore ed inizializzata a 4. var2 DL 4, 22h, 3 alloca 3 longwords inizializzate a 4, 22h e 3. var2 punta alla prima locazione

Esempi org 400h var1 DW 2 ; memorizzata in 400h var2 DL 4, 22h, 3; memorizzata a partire da 402h code movw var1,R0 ; R0=2 movl #var1,R1 ; R1=400h movw R1,var1 ; scrive nella locazione 400h il valore 400h movl #0,r0 movl var2(R0), R1 ;r1=4h=00000004h; movl #1,r0 movl var2(R0), R1 ;r1=22000000h movl #2,r0 movl var2(R0), R1; r1=00220000h movl #4,r0 movl var2(R0), R1; r1=22h=00000022h; halt end