Anteprima
Vedrai una selezione di 1 pagina su 4
Calcolatori elettronici I - Sottoprogrammi e parametri su Stack Pag. 1
1 su 4
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

AVVERTENZE

I valori di offset dipendono strettamente dalla dimensione delle variabili, che devono venir memorizzate. Nel caso di

byte lo spiazzamento da considerare è di 1, se word lo spiazzamento è di 2, se di longword lo spiazzamento è pari a 4.

7 byte

6 word

4 longword

0 stack

Nell’area dati, allora, dobbiamo definire delle costanti, che costituiranno i nostri valori di offset.

* Area dati

FAT1 DC.W 4

FAT2 DC.W 3

RIS DS.W 1

OFF1 EQU 8 costante di valore 8

OFF2 EQU 10 costante di valore 10

OFF3 EQU 12 costante di valore 12

Per accedere alla variabile con displacement 8 la sintassi da usare è:

*ESEMPIO MOVE.W OFF1(A6),D n

La traduzione dell’istruzione sopra riportata è all’indirizzo memorizzato nel frame pointer, aggiungi il valore dell’offset e

. In

trasferisci dall’area di memoria corrispondente a quell’indirizzo, il valore in essa conservato al registro D A6

n

abbiamo il valore 0, pertanto sarà acceduto il valore memorizzato alla posizione 8.

Alla routine aggiungiamo ora il codice per trasferire i dati effettivi dallo stack ai registri dato:

MOLT

MOVE.W OFF1(A6),D2 al valore contenuto in A6 (cioè 0) aggiungi OFF1 e copia il valore

MOVE.W OFF2(A6),D1 contenuto in quella posizione dello stack all’interno del registro D0

analogamente succede per il registro D1

MOVE.W #0,D0 inizializzazione del registro D0 al valore 0

4 –

PASSO LOOP PER LA MOLTIPLICAZIONE

Il loop aggiunge ad un registro vuoto il valore contenuto in D2 (uno dei due fattori) tante volte quante contenute in D1

(l’altro fattore), poiché 4×3 = 4+4+4 oppure 3+3+3+3.

LOOP ADD.W D2,D0 al valore in D0 viene aggiunto il contenuto di D2

ADD.W #-1,D1 la variabile contatore è decrementata di un’unità

BNE LOOP se D1 non è uguale a 0, viene ripetuto il ciclo

MOVE.W D0,OFF3(A6) sposta il risultato nello stack alla posizione (A6)+OFF3

… RISULTATO

12 frame pointer+OFF3

FAT2

10 FAT1

8 contenuto

frame pointer

0 stack

5 –

PASSO DEALLOCAZIONE

La deallocazione delle variabili deve avvenire in modo speculare rispetto all’allocazione. Se ad esempio sono

stati messi sullo stack nell’ordine A, B e C dovranno essere deallocati nell’ordine C, B, A. Inoltre se per allocare, lo

stack prevede il decremento, per deallocare viene previsto l’incremento.

MOVE.W (SP)+,D2 deallocazione dei registri D2-D0

MOVE.W (SP)+,D1

MOVE.W (SP)+,D0

UNLK A6 ripristino del contenuto del registro A6

RTS ritorno al programma principale

6 –

PASSO CHIUSURA

Al momento del ripristino del registro, che funge da frame pointer, in particolare il contenuto che era stato

A6,

preventivamente salvato nello spazio tra 0 e 8, è stato, ovviamente, liberato. Pertanto all’interno dello stack

risulteranno unicamente le due variabili iniziali ed il risultato. I due operandi, oramai, non hanno più nessuna utilità

per cui vengono deallocati mediante l’istruzione:

ADD.W #4,SP il valore è 4 in quanto 2 word prendono uno spazio di 4 byte

… RISULTATO

12 FAT2

10 6 RISULTATO

FAT1

8 4 FAT2

contenuto 2

frame pointer FAT1

0 0

stack stack

Allo stack l’accesso non è più possibile mediante il frame pointer, pertanto viene utilizzato lo stack pointer.

Dettagli
Publisher
A.A. 2012-2013
4 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Menzo di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici I e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Canonico Roberto.