Assembly MC68000 Stack e Based addressing

Angelo.V1
* File: multiply_sub.a68
* Programma per moltiplicare MCND e MPY tramite subroutine MULT.
* Effettua lo scambio dei parametri usando stack
*
MCNDOFF 	EQU	08		Offset moltiplicando  rispetto a FP
MPYOFF 	EQU	10		Offset moltiplicatore rispetto a FP
PRODOFF 	EQU	12		Offset prodotto rispetto a FP

      	ORG   		$8000     	Inizio text segment del programma principale
MAIN	ADDA.L	#-2,SP
	MOVE.W	MPY,-(SP)
	MOVE.W	MCND,-(SP)
	JSR		MULT
	ADDA.L	#4,SP
	MOVE		(SP)+,PROD
	STOP		#$2700

      	ORG   		$8040   	Inizio data segment del programma principale
PROD 	DS.W   	1         		Riserva spazio di memoria per PROD
MPY   	DC.W  		3         		Definisce il valore di MPY
MCND 	DC.W        	4         		Definisce il valore di MCND

      	ORG   		$8080            		Inizio text segment della subroutine
MULT  LINK		A6,#0		     	Inizializza Frame Pointer A6
	MOVEM	D0-D2,-(SP) 		Salva registri su stack
	MOVE.W 	MCNDOFF(A6),D1   	D1 e' il moltiplicando
	MOVE.W 	MPYOFF(A6),D2    	D2 e' il moltiplicatore
	CLR.W	      	D0               		D0 accumula il risultato
LOOP  ADD.W       	D1,D0            		altrimenti aggiunge MCND al prodotto parziale
      	ADD.W       	#-1,D2           		decrementa il contatore
      	BNE         	LOOP             		e ripete il giro
	MOVE.W	D0,PRODOFF(A6)   	Mette il risultato nel record di attivazione
	MOVEM	(SP)+,D0-D2      	Ripristina registri dallo stack	
	UNLK		A6 			Ripristina FP
	RTS

	END		MAIN


Quale è la funzione di queste due righe?

MOVE.W MCNDOFF(A6),D1 D1 e' il moltiplicando
MOVE.W MPYOFF(A6),D2 D2 e' il moltiplicatore

Risposte
yoshiharu
"Angelo.V":


Quale è la funzione di queste due righe?

MOVE.W MCNDOFF(A6),D1 D1 e' il moltiplicando
MOVE.W MPYOFF(A6),D2 D2 e' il moltiplicatore


Servono a mettere il valore dei due fattori nei registri di dati usati nell'algoritmo.
Gli offset MCNDOFF e MPYOFF servono perche' dopo l'istruzione LINK lo stack pointer viene modificato, per cui hai bisogno dell'offset per ripescare i fattori della moltiplicazione.
Il registro A6 viene usato come sp temporaneo nella routine delimitata da LINK e UNLINK.
Almeno questo e' quello che ci capisco io :-)
Hope this helps.

Angelo.V1
grazie :D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.