La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

CALCOLATORI ELETTRONICI Gestione delle subroutine.

Presentazioni simili


Presentazione sul tema: "CALCOLATORI ELETTRONICI Gestione delle subroutine."— Transcript della presentazione:

1 CALCOLATORI ELETTRONICI Gestione delle subroutine

2 SUBROUTINES / 1 Vantaggi delle subroutines In maniera analoga alle funzioni/metodi dei linguaggi ad 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 lelaborazione.

3 SUBROUTINES / 2 Salto a sottoprogramma Listruzione 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 Lesecuzione del sottoprogramma termina con listruzione RET, con la quale si ritorna ad eseguire il programma principale, o meglio il programma chiamante.

4 SUBROUTINES / 3 JSR A RET Programma principale Sottoprogramma A JSR A 1. chiamata 1. risposta 2. chiamata 2. risposta

5 JMP e JSR / 1 La sintassi di JSR (Jump To Subroutine) è la stessa dellistruzione di salto incondizionato JMP, cioè: JSR dove dest è lindirizzo di memoria della prima istruzione della subroutine espresso sotto forma di numero binario a 32 bit o di riferimento simbolico(label).

6 JMP e JSR / 2 A differenza dellistruzione JMP, il microprogramma associato allistruzione JSR, prima di rimpiazzare il contenuto del PC con lindirizzo, deve memorizzarne il valore in memoria. In questo modo, al termine della subroutine, lesecuzione può riprendere dallistruzione successiva alla JSR. Larea di memoria preposta alla memorizzazione degli indirizzi di ritorno delle subroutines deve permettere di gestire efficientemente anche situazioni più complesse, in cui i sottoprogrammi chiamano a loro volta altri sottoprogrammi (nested subroutines). Differenza tra JMP e JSR

7 SUBROUTINES ANNIDATE JSR A RET Programma principale Sottoprogr. A JSR A RET Sottoprogr. B JSR B RET Sottoprogr. C JSR C 1 2 3 4 5 6

8 STACK / 1 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 dallultimo che è stato memorizzato. Loperazione di inserimento di un elemento alla sommità (top) dello stack è chiamata push, mentre loperazione inversa è chiamata pop.

9 STACK / 2 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 dallassemblatore che provvede a mapparle nelle istruzioni del microprocessore equivalenti.

10 GESTIONE STACK PD32 / 1 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 lindirizzo iniziale dello stack (base), allora gli n elementi presenti sono memorizzati nelle locazioni consecutive: S, S-4, S-8,…,S-4*n STACK 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 S-8 R7 TOP

11 GESTIONE STACK PD32 / 2 Come detto in precedenza le istruzioni PUSH e POP non sono vere e proprio istruzioni che appartengono al set del PD32, bensì sono istruzioni che il compilatore traduce in particolari MOV. PUSH: inserisce elemento e in pila S BASE S-1 S-2 S-3 S-4 S-5 S-6 S-7 S-8 S R7 e_b4 e_b3 e_b2 e_b1

12 GESTIONE STACK PD32 / 2 Come detto in precedenza le istruzioni PUSH e POP non sono vere e proprio istruzioni che appartengono al set del PD32, bensì sono istruzioni che il compilatore traduce in particolari MOV. POP: estrae lelemento e dalla pila S BASE S-1 S-2 S-3 S-4 S-5 S-6 S-7 S-8 S-4 R7 e_b4 e_b3 e_b2 e_b1

13 STACK & PD32 / 2 Le pseudoistruzioni per la gestione dello stack Ripristina lo Status Register con la longword presente in cima allo stack. Viene tradotta come: MOVTOSR (R7)+ - POPSR Estrae dallo stack una longword e la pone nella locazione indicata dalloperando D. Viene tradotta come: MOVL (R7)+, D DPOP Inserisce lo Status Register in cima allo stack. Viene tradotta come: MOVRFRSR -(R7) - PUSHSR Inserisce in cima allo stack una longword indirizzata dalloperando sorgente S. Viene tradotta come: MOVL S, -(R7) SPUSH COMMENTOOP.PSEUDO- ISTRUZIONE

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

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

16 STACK E SUBROUTINE Listruzione JSR inserisce (PUSH) in cima allo stack il valore del PC, ovvero lindirizzo di ritorno della subroutine. In maniera analoga, listruzione RET estrae dalla cima dello stack una longword che memorizza allinterno del PC. Nella successiva fase di fetch sarà quindi caricata nellIR listruzione 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 lesecuzione della subroutine. (OPERAZIONE MOLTO UTILE!!!!!!!)

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

18 Utilizzo subroutine mondo reale 1.Implementazione di chiamate a funzioni / metodi 2.Interruzione asincrona del flusso di esecuzione di un programma 3.Implementazione di porzioni di codice per la gestione di eventi (Gestione driver ) ….un milione di altri usi……


Scaricare ppt "CALCOLATORI ELETTRONICI Gestione delle subroutine."

Presentazioni simili


Annunci Google