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
