Esplora E-book
Categorie
Esplora Audiolibri
Categorie
Esplora Riviste
Categorie
Esplora Documenti
Categorie
Procedure
Definizione:
Procedura o subroutine - Particolare sequenza di istruzioni su dati di volta in volta differenti
Problematiche:
1. Collegamento (o linkage) - Modo in cui un calcolatore rende possibili le operazioni di chiamata e di ritorno delle procedure 2. Passaggio dei parametri - Modo in cui il programma chiamante rende disponibili le informazioni di ingresso alla subroutine e la subroutine rende disponibili al programma chiamante le informazioni di uscita
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
Roadmap
Meccanismi per il collegamento Meccanismi per lo scambio dei parametri Un meccanismo per il collegamento e lo scambio dei parametri
Ad ogni istruzione eseguita, il PC viene incrementato per puntare allistruzione successiva while (TRUE){ Fetch; Execute; }
Es: somma di due numeri Segmento di programma
i+1 i+2
B C
i+k
SUBR SUBR+4
RET2
Ritorno - Schema
Memory A0 00008014
JMP (A0)
00008014
NOP
Esercizio
Scrivere ed assemblare un programma che usi unistruzione di salto per effettuare una chiamata a sottoprogramma Eseguire il programma sul simulatore e sperimentare:
Il salvataggio dellindirizzo di ritorno nellarea codice della subroutine Levoluzione del PC
Soluzione (subjmp.a68)
ORG DC.L MOVE.L JMP NOP MOVE.L JMP SUBR+4 NOP DS.L MOVE.W MOVEA.L JMP (A0) $8000 MAIN #RET1,SUBR SUBR+4 #RET2,SUBR
MAIN RET1
RET2 SUBR
Salta alla subroutine Indirizzo di ritorno dalla chiamata Salva lindirizzo di ritorno Salta alla subroutine Indirizzo di ritorno dalla chiamata Riserva una Long Word per ind.ritorno Prima istruzione della procedura Carica A0 con lindirizzo di ritorno Salta allindirizzo contenuto in A0
1 D0,D2 SUBR,A0
Esercizio
Da unanalisi dellesecuzione del programma subjmp.a68, ricavare i vantaggi e gli svantaggi della soluzione proposta
Soluzione
Vantaggi:
Non occorre definire istruzioni nuove Non occorre dedicare risorse hardware
Svantaggi:
Non possibile memorizzare la subroutine in una ROM Non sarebbe possibile memorizzare lindirizzo di ritorno Non possibile effettuare chiamate ricorsive La subroutine in grado di conservare un solo indirizzo di ritorno
II soluzione
Collegamento mediante stack:
Gli indirizzi di ritorno vengono salvati in una struttura dati a pila, chiamata stack del processore Un registro particolare, chiamato Stack Pointer, punta alla cima della pila
Pila
0
Move N,R1
Push:
Decrement SP Move NEWITEM, (SP) FONDO
Pop:
Move Increment (SP), ITEM SP
43
Push:
Move NEWITEM, -(SP)
Pop:
Move (SP)+, ITEM
2k -1
Esercizio
Riscrivere il programma nellipotesi di usare uno stack per il collegamento
Soluzione (substack.a68)
SUBR ORG $8000 MOVE.W D0,D2 MOVEA.L (SP)+,A0 JMP (A0)
* Main Program ORG $8010 START MOVE.L JMP SUBR RET1 NOP
#RET1,-(SP)
RET2
Lindirizzo di ritorno (contenuto del PC) salvato in un registro, chiamato registro di collegamento o link register
In molti processori questa operazione eseguita dallistruzione call_subroutine (Es: PowerPC, ARM) Difficile luso di procedure annidate (cio, la corretta gestione di procedure annidate a carico del programmatore)
Lo schema identico a quello visto nellesempio discusso, con la differenza che ora lindirizzo di ritorno viene salvato nel Link Register anzich nella locazione di memoria SUBR
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
Esercizio
Riscrivere il programma subjmp.a68 nellipotesi che il processore target sia dotato di registro di collegamento Disegnare la mappa della memoria del codice assemblato Discutere i vantaggi e gli svantaggi della soluzione proposta
Inizio programma principale Salva lindirizzo di ritorno nel LR e salta alla subroutine Salva lindirizzo di ritorno nel LR e salta alla subroutine
SUBR
MOVE.W D0, D2
JSR SUBR
RET2
start MOV MOV BL SWI firstfunc ADD MOV END r0, #15 r1, #20 firstfunc 0x11 ; Set up parameters ; Call subroutine ; terminate ; Subroutine firstfunc ; r0 = r0 + r1 ; Return from subroutine ; with result in r0 ; mark end of file
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
Svantaggi:
Non possibile effettuare chiamate ricorsive (le chiamate ricorsive devono essere gestite esplicitamente dal programmatore)
Gli indirizzi di ritorno vengono salvati nello stack dallistruzione call_subroutine Gli indirizzi di ritorno vengono ripristinati nel PC dallistruzione return_from_subroutine
Esercizio
Riscrivere il programma nellipotesi di usare uno stack per il collegamento, avendo a disposizione istruzioni dedicate per la chiamata a procedura e il ritorno da procedura
Soluzione (subrts.a68)
* Subroutine ORG SUBR $8000 D0,D2
MOVE.W RTS
* Main Program ORG $8010 START JSR NOP JSR NOP END SUBR
SUBR
START
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
Esercizio
Disegnare la mappa della memoria del codice assemblato Disegnare levoluzione dello stack Discutere i vantaggi e gli svantaggi della soluzione proposta
SUBR
MOVE.W D0, D2
JSR SUBR
RET2
Svantaggi:
Per essere veloce, richiede risorse hardware extra
Sommario
Passaggio dei parametri nei registri del processore Passaggio dei parametri in aree di memoria
Soluzione con modulo sorgente unico Soluzione con due moduli sorgente, con il modulo del chiamante che alloca larea di memoria Soluzione con due moduli sorgente, con il modulo del chiamato che alloca larea di memoria
D0 accumula il risultato altrimenti aggiunge MCND al prodotto decrementa il contatore e ripete il giro esce D1 e' il moltiplicando D2 e' il moltiplicatore
1 3 4 MAIN
Riserva spazio di memoria per PROD Definisce il valore di MPY Definisce il valore di MCND
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
3 0 2 4
Parametri in area di memoria multlocs.a68 2/3 ORG $8080 MAIN LEA.L PARMS,A0 MOVE.W MCND,MCNDOFF(A0) MOVE.W MPY,MPYOFF(A0) JSR MULT MOVE.W PRODOFF(A0),PROD ORG PROD MPY MCND $80C0 DS.W DC.W DC.W
1 3 4
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
$8040 MOVE.W MCNDOFF (A0),D1 MPYOFF(A0),D2 D0 Codice ADD.W D1,D0 subroutine #-1,D2 LOOP D0,PRODOFF(A0)
0 4 8 12 16
*Area Dati ORG P Q PDIVQ PMODQ PARMS DC.L DC.L DS.L DS.L DS.L END $8500 10 5 1 1 5 DIVPQ
DIVLUP
Codice subroutine
QUOT1 QUOTOK
CNT SYSOVF
Codice subroutine
CNT SYSOVF
1 $1800
DIVPQ
P Q PDIVQ PMODQ
#32,CNT
D0,REM(A0) D1,QUOT(A0)
Codice subroutine
$8100 5 1 $1800
Parametri in aree di memoria Vantaggi e svantaggi Se larea di memoria appartiene al chiamante, possibile memorizzare la subroutine su una ROM pi lento
Parametri in stack
I parametri di input, quelli di output e lindirizzo di ritorno vengono messi in unarea di memoria organizzata a stack Il programma chiamante
Riserva spazio sullo stack per i parametri di output Mette i parametri di input sullo stack
La subroutine
Sceglie un registro da usare come Frame Pointer Inizializza FP a SP Esegue il proprio codice Mette i parametri di output sullo stack Ripulisce lo stack
SP
Immediatamente dopo la chiamata a SUB1
SP
Variabili locali 1
Variabili locali 1
FP Vecchio FP1 SP
Indirizzo di Ritorno 1 Parametri di input 1 Parametri di output 1 Indirizzo di Ritorno 1 Parametri di input 1 Parametri di output 1
FP Vecchio FP1
Indirizzo di Ritorno 1 Parametri di input 1 Parametri di output 1
FP
Funzionamento:
1. Esegue push su stack del contenuto del registro indirizzo specificato 2. Il registro indirizzo specificato viene caricato con il nuovo valore dello stack pointer 3. Il displacement viene esteso in segno e sommato a SP. Questo valore viene assegnato a SP. 4. Durante lesecuzione SP varia, mentre FP rimane costante
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
FP
91F2
91F4 91F6 91FA 91FE 9200
ORG MAIN ADDA.L MOVE.W MOVE.W JSR MOVE.L ORG DS.W DC.W DC.W
LOOP
Codice subroutine
D0,PRODOFF(A6) A6 (SP)+,A0 #PRODOFF-MCNDOFF,SP (A0) DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
Ritorno Esecuzione
Stack
DIVLUP
Codice subroutine
BGT.S MOVE.L MOVE.L UNLK MOVEA.L ADDA.L JMP DIVLUP D0,REM(A6) D1,QUOT(A6) A6 (SP)+,A0 #REM-DVSR,SP (A0) DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
CLNSTK
Ritorno - Schema
Memory A0 0000806A
JMP (A0)
0000806A
MOVE.L (SP)+,PMODQ
Ritorno Stack
STATUS
STATUS
SP
SP
SP FP
FP
FP
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
Esercizio
Interpretare assembly:
SWAP
il
seguente
frammento
di
codice
MOVE.W (A0),-(SP) MOVE.W (A1),(A0) MOVE.W (SP)+,(A1) RTS LEA.L VARP,A0 LEA.L VARQ,A1 JSR SWAP DS.W 1 DS.W 1 Reserve storage for VARP and VARQ
START
VARP VARQ
Soluzione (swap912.a68)
Il programma inverte i valori delle variabili in memoria
Esercizio
Interpretare assembly:
SWAP
il
seguente
frammento
di
codice
* Main program MOVE.W VARP,D0 MOVE.W VARQ,D1 JSR SWAP VARP VARQ DS.W 1 DS.W 1
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli
Soluzione (swap913.a68)
Il programma scambia le copie delle variabili nei registri, lasciando inalterate le originali in memoria