Sei sulla pagina 1di 89

Subroutines

Corso di Calcolatori Elettronici I


Dipartimento di Informatica e Sistemistica Universit degli Studi di Napoli Federico II

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Meccanismi per il collegamento


Nuovo Corso di Calcolatori Elettronici I
Dipartimento di Informatica e Sistemistica Universit degli Studi di Napoli Federico II

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esecuzione in sequenza lineare


i Move A,R0 Add B,R0 Move R0,C

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

A Dati del programma

B C

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esecuzione con istruzione di salto


Ad ogni istruzione eseguita, il PC viene settato in modo da puntare ad unopportuna istruzione (in genere in base al risultato di un confronto) Segmento di
programma i i+1 LOOP
Move #N,R1 Clear R0 Add NUM,R0

Determina lindirizzo del numero successivo


Decrement R1 Branch > 0 LOOP

Es: somma di una lista di numeri

PC = i, i+1, LOOP, ..., LOOP, ..., i+k

i+k

Move R0, SUM

NUM1 Dati del programma NUMN SUM


DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

I soluzione: Collegamento mediante salto


possibile realizzare una chiamata a sottoprogramma senza fare uso di istruzioni specifiche (JSR, RTS)
MAIN MOVE.L #RET1,SUBR JMP SUBR+4 RET1 MOVE.L #RET2,SUBR JMP SUBR+4 RET2 SUBR DS.L 1 MOVE.W D0,D2 MOVEA.L SUBR, A0 JMP (A0) Inizio programma principale Salva lindirizzo di ritorno 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 lindirizzo di ritorno Prima istruzione della procedura Carica A0 con lindirizzo di ritorno Salta allindirizzo contenuto in A0
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Mappa della memoria


MAIN

SUBR SUBR+4

RET1/RET2 RET1/RET2 MOVE.W D0, D2

MOVE.L #RET1, SUBR JMP SUBR+4

Codice programma principale

RET1 Codice sottoprogramma


MOVE.L #RET2, SUBR JMP SUBR+4 MOVEA.L SUBR, A0 JMP (A0)

RET2

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Ritorno - Schema

Memory A0 00008014
JMP (A0)

00008014

NOP

Questa istruzione significa: salta allistruzione puntata dal registro indirizzo A0

Listruzione specifica loperando come (A0)

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Soluzione (Esecuzione su ASIM)

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esercizio
Da unanalisi dellesecuzione del programma subjmp.a68, ricavare i vantaggi e gli svantaggi della soluzione proposta

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Pila
0
Move N,R1

@@@ - SP punta allultima locazione occupata


SP -28 -17 739

Push:
Decrement SP Move NEWITEM, (SP) FONDO

Pop:
Move Increment (SP), ITEM SP

43

Push:
Move NEWITEM, -(SP)

Pop:
Move (SP)+, ITEM

2k -1

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esercizio
Riscrivere il programma nellipotesi di usare uno stack per il collegamento

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

MOVE.L #RET2,-(SP) JMP SUBR NOP END START


DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Soluzione (Esecuzione su ASIM)

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

III soluzione, prima variante


Il processore viene dotato di istruzioni apposite:
call_subroutine return_from_subroutine

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Soluzione (Pseudo-codice Assembly)

MAIN JSR SUBR JSR SUBR SUBR MOVE.W D0,D2 RTS

Inizio programma principale Salva lindirizzo di ritorno nel LR e salta alla subroutine Salva lindirizzo di ritorno nel LR e salta alla subroutine

Prima istruzione della procedura Salta allindirizzo di ritorno contenuto in LR

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Soluzione (Mappa della memoria)


MAIN

SUBR

MOVE.W D0, D2

JSR SUBR

Codice programma principale

RET1 Codice sottoprogramma


JSR SUBR RTS

RET2

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Soluzione (Codice Assembly ARM)

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

r0, r0, r1 pc, lr

Soluzione (Vantaggi e Svantaggi)


Vantaggi:
possibile memorizzare la subroutine in una ROM veloce Richiede poche risorse hardware

Svantaggi:
Non possibile effettuare chiamate ricorsive (le chiamate ricorsive devono essere gestite esplicitamente dal programmatore)

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

III soluzione, seconda variante


Il processore viene dotato di istruzioni apposite:
call_subroutine return_from_subroutine

Gli indirizzi di ritorno vengono salvati nello stack dallistruzione call_subroutine Gli indirizzi di ritorno vengono ripristinati nel PC dallistruzione return_from_subroutine

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

Soluzione (Esecuzione su ASIM)

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Soluzione (Mappa della memoria)


MAIN

SUBR

MOVE.W D0, D2

JSR SUBR

Codice programma principale

RET1 Codice sottoprogramma


JSR SUBR RTS

RET2

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Soluzione (Vantaggi e Svantaggi)


Vantaggi:
possibile memorizzare la subroutine in una ROM possibile effettuare chiamate ricorsive

Svantaggi:
Per essere veloce, richiede risorse hardware extra

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Meccanismi per il passaggio dei parametri


Nuovo Corso di Calcolatori Elettronici I
Dipartimento di Informatica e Sistemistica Universit degli Studi di Napoli Federico II

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

I soluzione: Parametri in registri


possibile passare i parametri di input/output in registri del processore

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in registri Esempio (multregs.a68)


ORG $8000 * MULT CLR.W LOOP ADD.W parziale ADD.W BNE RTS MAIN MOVE.W MOVE.W JSR MOVE.W

D0 D1,D0 #-1,D2 LOOP

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

MCND,D1 MPY,D2 MULT D0,PROD

PROD MPY MCND

DS.W DC.W DC.W END

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

Parametri in registri Esecuzione su ASIM

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in registri Vantaggi e svantaggi


veloce possibile solo se si dispone di abbastanza registri per contenere tutti i dati Richiede uno stretto accordo tra chiamante e chiamato

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

II soluzione: Parametri in aree di memoria


possibile passare i parametri di input/output in unarea di memoria

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in area di memoria multlocs.a68 - 1/3


I parametri di input e output vengono messi in unarea di memoria di 3 word Il programma chiamante passa alla subroutine il base address dellarea di memoria mettendolo nel registro A0 La subroutine accede ai parametri usando il based addressing

ORG PARMS PRODOFF MPYOFF MCNDOFF

$8000 DS.W EQU EQU EQU

3 0 2 4

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

Codice programma principale

1 3 4
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in area di memoria multlocs.a68 3/3

ORG MULT MOVE.W CLR.W LOOP ADD.W BNE MOVE.W RTS

$8040 MOVE.W MCNDOFF (A0),D1 MPYOFF(A0),D2 D0 Codice ADD.W D1,D0 subroutine #-1,D2 LOOP D0,PRODOFF(A0)

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in aree di memoria Esecuzione

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esempio Divisione con Parametri in memoria


possibile passare i parametri di input/output in aree di memoria Tale area pu:
Appartenere al programma chiamato Appartenere al programma chiamante

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in area di memoria div914.a68 - 1/3


I parametri di input e output vengono messi in unarea di memoria di 10 word Il programma chiamante passa alla subroutine il base address dellarea di memoria mettendolo nel registro A0 La subroutine accede ai parametri usando il based addressing Gli spiazzamenti sono definiti dal seguente frammento di codice:

HIDVND LODVND DVSR QUOT REM

EQU EQU EQU EQU EQU

0 4 8 12 16

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in area di memoria div914.a68 2/3


DIVPQ LEA.L MOVE.L CLR.L MOVE.L JSR MOVE.L MOVE.L PARMS,A0 P,LODVND(A0) HIDVND(A0) Q,DVSR(A0) DIVIDEL QUOT(A0),PDIVQ REM(A0),PMODQ

*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

Codice programma principale

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in area di memoria div914.a68 3/3


DIVIDEL MOVE.W MOVE.L MOVE.L CMP.L BCS.S JMP LSL.L ROXL.L BCS.S CMP.L BCS.S ADD.L SUB.L SUB.W BGT.S MOVE.L MOVE.L RTS DS.W EQU #32,CNT HIDVND(A0),D0 LODVND(A0),D1 DVSR(A0),D0 DIVLUP SYSOVF #1,D1 #1,D0 QUOT1 DVSR(A0),D0 QUOTOK #1,D1 DVSR(A0),D0 #1,CNT DIVLUP D0,REM(A0) D1,QUOT(A0) 1 $1800
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

DIVLUP

Codice subroutine

QUOT1 QUOTOK

CNT SYSOVF

Parametri in aree di memoria Esecuzione

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Assemblaggio per moduli div914p1.a68


* Agreement on displacement values HIDVND EQU 0 LODVND EQU 4 DVSR EQU 8 QUOT EQU 12 REM EQU 16 DIVIDEL EQU ORG DIVPQ LEA.L MOVE.L CLR.L MOVE.L JSR MOVE.L MOVE.L $8200 $8000 PARMS,A0 P,LODVND(A0) HIDVND(A0) Q,DVSR(A0) DIVIDEL QUOT(A0),PDIVQ REM(A0),PMODQ
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Codice programma principale

Assemblaggio per moduli div914p2.a68


* Agreement on displacement values HIDVND LODVND DVSR QUOT REM EQU EQU EQU EQU EQU ORG DIVIDEL 0 4 8 12 16 $8200 #32,CNT

Codice subroutine

CNT SYSOVF

MOVE.W RTS DS.W EQU

1 $1800

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Assemblaggio per moduli Esecuzione 1/4

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Assemblaggio per moduli Esecuzione 2/4

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Assemblaggio per moduli Esecuzione 3/4

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Assemblaggio per moduli Esecuzione 4/4

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Allocazione nel chiamato divp1na.a68


PARMS DIVIDEL EQU EQU ORG LEA.L MOVE.L CLR.L MOVE.L JSR MOVE.L MOVE.L ORG DC.L DC.L DS.L DS.L END $8100 $8400 $8000 PARMS,A0 P,LODVND(A0) HIDVND(A0) Q,DVSR(A0) DIVIDEL QUOT(A0),PDIVQ REM(A0),PMODQ $8300 10 5 1 1 DIVPQ
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

DIVPQ

Codice programma principale

P Q PDIVQ PMODQ

Allocazione nel chiamato divp2a.a68


ORG * DIVIDEL $8400

MOVE.W MOVE.L MOVE.L RTS ORG

#32,CNT

D0,REM(A0) D1,QUOT(A0)

Codice subroutine

$8100 5 1 $1800

PARMS CNT SYSOVF

DS.L DS.W EQU

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Allocazione nel chiamato Esecuzione 1/2

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Allocazione nel chiamato Esecuzione 2/2

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in aree di memoria Vantaggi e svantaggi Se larea di memoria appartiene al chiamante, possibile memorizzare la subroutine su una ROM pi lento

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Linkage e passaggio dei Parametri su Stack


Nuovo Corso di Calcolatori Elettronici I
Dipartimento di Informatica e Sistemistica Universit degli Studi di Napoli Federico II

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

III soluzione: Parametri in area a Stack


possibile passare i parametri di input/output in aree organizzate a stack una forma di allocazione dinamica della memoria

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Evoluzione dello stack


Durante lesecuzione di SUB1 Immediatamente prima della chiamata a SUB2 Indirizzo di Ritorno 2 Parametri di input 2 Parametri di output 2 Variabili locali 1 Vecchio FP1 Indirizzo di Ritorno 1 Parametri di input 1 Parametri di output 1

SP
Immediatamente dopo la chiamata a SUB1

Parametri di input 2 Parametri di output 2

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Link and allocate


Sintassi:
LINK An,#<displacement>

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

Parametri in stack multstck.a68 - 1/2

FP

91F2
91F4 91F6 91FA 91FE 9200

vecchio FP (2 W) Indirizzo di Ritorno (2 W)

MCNDOFF EQU 08 MPYOFF EQU 10 PRODOFF EQU 12

MCND (1 W) MPY (1 W) output (1 W)

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in stack multstck.a68 - 1/2


MCNDOFF MPYOFF PRODOFF EQU EQU EQU 08 10 12 $8040 #-2,SP MPY,-(SP) MCND,-(SP) MULT (SP)+,PROD $8080 1 3 4
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

ORG MAIN ADDA.L MOVE.W MOVE.W JSR MOVE.L ORG DS.W DC.W DC.W

Codice programma principale

PROD MPY MCND

Parametri in stack multstck.a68 - 2/2


ORG MULT $80C0 LINK MOVE.W MOVE.W CLR.W ADD.W ADD.W BNE LOOP MOVE.W UNLK MOVEA.L ADDA.L JMP

A6,#0 MCNDOFF(A6),D1 MPYOFF(A6),D2 D0 D1,D0 #-1,D2

LOOP

Codice subroutine

D0,PRODOFF(A6) A6 (SP)+,A0 #PRODOFF-MCNDOFF,SP (A0) DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in stack Esecuzione

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Ritorno Esecuzione

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Stack

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in stack div916.a68 - 1/2


DIVPQ ADDA.L MOVE.L CLR.L MOVE.L JSR MOVE.L MOVE.L TST.W BNE #-10,SP P,-(SP) -(SP) Q,-(SP) DIVIDEL (SP)+,PMODQ (SP)+,PDIVQ (SP)+ DIVOVF

*Area Dati P Q PDIVQ PMODQ DC.L DC.L DS.L DS.L 10 5 1 1

Codice programma principale

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in stack div916.a68 - 2/2


DIVIDEL LINK MOVE.W CLR.W MOVE.L MOVE.L CMP.L BCS.S MOVE.W BRA.S LSL.L A6,#-2 #32,CNT(A6) STATUS(A6) HIDVND(A6),D0 LODVND(A6),D1 DVSR(A6),D0 DIVLUP #1,STATUS(A6) CLNSTK #1,D1

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

Parametri in stack Esecuzione

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Ritorno - Schema

Memory A0 0000806A
JMP (A0)

0000806A

MOVE.L (SP)+,PMODQ

Questa istruzione significa: salta allistruzione puntata dal registro indirizzo A0

Listruzione specifica loperando come (A0)

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Ritorno Stack

STATUS

STATUS

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Evoluzione dello stack - div916.a68


SP FP
CNT OLD FP RETURN ADDRESS

SP

DVSR HIDVND LODVND REM QUOT STATUS

DVSR HIDVND LODVND REM QUOT STATUS

SP

REM QUOT STATUS

SP FP

FP

FP
DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Parametri in stack Vantaggi e svantaggi


possibile usare la stessa area di memoria sia per salvare gli indirizzi di ritorno che per passare i parametri di I/O possibile usare lo stack per variabili temporanee

@@@ - Lallocazione della memoria dinamica


Per essere veloce, richiede risorse hardware extra

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Passaggio dei parametri per riferimento e per valore


Nuovo Corso di Calcolatori Elettronici I
Dipartimento di Informatica e Sistemistica Universit degli Studi di Napoli Federico II

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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Soluzione (swap912.a68)
Il programma inverte i valori delle variabili in memoria

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esecuzione (swap912.a68) 1/3

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esecuzione (swap912.a68) 2/3

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esecuzione (swap912.a68) 3/3

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esercizio
Interpretare assembly:
SWAP

il

seguente

frammento

di

codice

MOVE.W D0,-(SP) MOVE.W D1,D0 MOVE.W (SP)+,D1 RTS

* 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

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esecuzione (swap913.a68) 1/4

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esecuzione (swap913.a68) 2/4

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esecuzione (swap913.a68) 3/4

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Esecuzione (swap913.a68) 4/4

DIS - Dipartimento di Informatica e Sistemistica- Universit di Napoli

Potrebbero piacerti anche