• Non ci sono risultati.

Gestione delle subroutine

N/A
N/A
Protected

Academic year: 2022

Condividi "Gestione delle subroutine"

Copied!
18
0
0

Testo completo

(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

l’elaborazione.

(3)

SUBROUTINES / 2 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.

(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 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(label).

(6)

JMP e JSR / 2

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

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 6 5

(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 dall’ultimo che è stato memorizzato.

L’operazione di inserimento di un elemento alla sommità (top) dello stack è chiamata push, mentre l’operazione inversa è

chiamata pop.

(9)

STACK / 2

Le operazioni di PUSH e POP, sebbene disponibili nel set di istruzioni del PD32, vengono comunque implementate come pseudoistruzioni di movimento dati.

Le pseudoistruzioni non sono implementate a livello hardware, ma sono messe a disposizione dall’assemblatore 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 l’indirizzo 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

BASE S

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

BASE S

S-2S-1

S-3S-4 S-5S-6 S-7S-8

S R7

e_b4 e_b2e_b3 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 l’elemento “e” dalla pila

BASE S

S-2S-1

S-3S-4 S-5S-6 S-7S-8

S-4 R7

e_b4e_b3 e_b2e_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 dall’operando D. Viene tradotta come: MOVL (R7)+, D D

POP

Inserisce lo Status Register in cima allo stack. Viene tradotta come: MOVRFRSR -(R7)

-

PUSHSR

Inserisce in cima allo stack una longword indirizzata

dall’operando sorgente S. Viene tradotta come: MOVL S, -(R7) S

PUSH

COMMENTO OP.

PSEUDO- ISTRUZIONE

(14)

ESEMPIO PUSH

PRIMA DI ESEGUIRE PUSH R6…

000027FC BASE

78 56 34 12

000027F8 000027F8 TOP

R7PCR6 0000041011223344

000027FC BASE

78 56 34 12

000027F4 000027F8

R7PCR6 0000041411223344 44 33 22

000027F4 11 TOP

… E DOPO

(15)

ESEMPIO POP

PRIMA DI ESEGUIRE POP R5… … E DOPO

000027FC BASE

78 56 34 000027F8 12

00000414 PC FFFFFFFF R5

44 33 22

000027F4 11 TOP

000027F4 R7

000027FC BASE

78 56 34

12 TOP

000027F8

00000418 PC 11223344 R5

000027F8 R7

(16)

STACK E SUBROUTINE

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.

(17)

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

(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……

Riferimenti

Documenti correlati

Prima dell’applicazione, sfiatare il set tubi facendo passare il liquido di irrigazione fino a completa eliminazione delle bolle d’aria dal sistema di irrigazione...

In sede di ponderazione degli interessi secondo l’articolo 8 paragrafo 2 CEDU, le autorità devono valutare anche se si possa esigere dai familiari aventi il diritto

Dopo aver selezionato “F4.Y”, premete il pulsante [+/YES] per abilitare il sub-modo delle funzioni del modo Split e usate poi i pulsanti [TEMPO/FUNCTION t, s] per selezionare

Al termine della formattazione, tutte le immagini e i dati presenti nella scheda vengono eliminati, incluse le immagini protette. Prima di attivare questa funzione, si

3 - allegato solo bilancio XBRL ma erroneamente dichiarato doppio deposito Qualora nella pratica è presente il solo prospetto contabile XBRL ma l'utente avesse

Vengono automaticamente compilati i campi seguenti con il codice documento “BILANCIO XBRL B06”, il codice atto “711” – Bilancio ordinario di esercizio o comunque un

Scegliere il tipo di bilancio e indicare la data di chiusura, nel caso di distribuzione utili spuntare l’apposito check, nel campo relativo al formato XBRL

Premere, sul quadro comandi, il pulsante corrispondente selezionando ON (la funzione viene confermata dalla accensione della spia interna rossa) mantenere premuto il