ASM Problema primo programma MC68K

Stato
Discussione chiusa ad ulteriori risposte.

andrea96b

Utente Silver
7 Ottobre 2009
69
21
4
88
Ho iniziato da poco a studiare l'assembler e ho qualche perplessità. Sto provando a fare la moltiplicazione degli elementi di due vettori e salvarli in un terzo. Il codice è questo
Codice:
*Prodotto scalare tra due vettori A e B salvato in un terzo vettore C*


        ORG        $8000
START
A        DS.W        10
B        DS.W        10
C        DS.W        10
        LEA        A,A0
        LEA        B,A1
        LEA        C,A2
        CLR.W        D0
FOR        ADD.W        #1,(A0)+
        ADD.W        #1,(A1)+
        ADD.W        #1,(A2)+
        ADD.W        #1,D0
        CMP        #9,D0
        BEQ        FOR       
        CLR.W        D0
LOOP        MULU        (A0)+,(A1)+
        MOVE        (A1),(A2)+
        ADD.W        #1,D0
        CMP        #9,D0
        BEQ        LOOP
        END        START
[\CODE]

mi da errore nell'istruzione LOOP MULU (A0)+,(A1)+, leggendo l'istruction set dell'assembly dice che l'istruzione mulu può avere un solo operando registro con metodo di indirizzamento indiretto. La mia domanda è, come potrei procedere?
 
Che architettura è? A che documentazione stai facendo riferimento? Dai qualche informazione nella domanda D:

Tirerei a indovinare 68k dalla sintassi (o ARM? boh...), ma non mi risulta LOOP come istruzione...
 
L'ho scritto nel titolo del posto, motorola 68000, architettura a registri generali D0-D7 per i dati e A0-A7 per le istruzioni, entrambi con un parallelismo a 32 bit. Registro di stato a 16 bit e condition code a 8 bit. Come documentazione uso degli appunti sul processore fatti dal professore Bruno Fadini che puoi vedere qui http://wpage.unina.it/rcanonic/didattica/ce1/docs/Appunti-68000.pdf e il manuale di istruzioni http://wpage.unina.it/rcanonic/didattica/ce1/docs/68000.pdf.
P.S scusa se ho descritto poco il problema ma è la prima volta che posto in questa sezione ed effettivamente al contrario di quando si chiede un problema in c++ qui bisogna specificare molte più cose xD
 

Se ho ben capito il primo operando può essere quello che vuoi, il secondo deve essere un particolare tipo di registro, non è sufficente usare un MOVE prima per spostare uno degli operandi in un registro appropriato, prima di effettuare la moltiplicazione?
 
Rimane un problema
MULU (A1)+,D3
Così il risultato lo salvo in (A1) mentre io voglio mantenere i valori del vettore :(
 
Un altro MOVE, da A1 alla posizione adeguata del vettore.
E' possibile che ci siano soluzioni più efficenti, ma non conoscendo quasi nulla dell'asm 68k non ti saprei dire, per iniziare però un programma che funziona è meglio di niente, no? :p
 
Si almeno incomincio a prendere dimestichezza. Ok è andato poi se riesco pure a far funzionare il programma che mi fa vedere i registri e la memoria controllo se è andato tutto come doveva andare ;) grazie dell'aiuto
 
Stato
Discussione chiusa ad ulteriori risposte.