Assembly MC68000 Stack e Based addressing
* 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
"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.
grazie