|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Sep 2015
Messaggi: 8
|
[Assembly MC68000] Problema con i vettori - Urgentissimo(Esame a breve)
Ciao a tutti ragazzi, mi sto cimentando nella programmazione in assembly(Ho già studiato C++ e qualcosa in java), tuttavia ho un problema nel prendere un vettore e copiarlo in un altro. In pratica supponiamo che i voglia copiare vett1 in vett2:
Codice:
$ORG 8000
VETT1 DC.B 1,2,3
VETT2 DC.B 0,0,0
N DC.W 3
$ORG 8100
MOVE.W N,D0
LOOP CMP.W #0,D0
BEQ FINE
MOVE.B (VETT1)+,(VETT2)+
ADD.W #-1,D0
JMP LOOP
FINE JMP FINE
Codice:
MOVE.B (VETT1)+,(VETT2)+ Oppure devo semplicemente fare Codice:
MOVE.B (VETT1)+,(VETT2) ADDA #1,VETT2 Grazie mille per l'aiuto! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Tranquillo: è lecito, e il programma funziona.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Buonanotte (in tutti i sensi): il programma non può funzionare perché non puoi postincrementare VETT1 e VETT2. Infatti DEVONO essere registri indirizzo per poterlo fare. Dunque aggiungi un paio di istruzioni allo scopo, e modifica la MOVE in questione.
Scusami, ma ieri sera ero cotto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Sep 2015
Messaggi: 8
|
Ok dunque dopo aver effettuato la dichiarazione dei vettori devo copiarli in un address register entrambi in questo modo:
Codice:
LEA VETT1,A0
LEA VETT2,A1
Codice:
MOVEA.L VETT1,A0 |
|
|
|
|
|
#5 | |||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quote:
Dovresti modificare l'istruzione utilizzando la modalità d'indirizzamento immediato, per calcolare l'indirizzo e memorizzarlo così com'è in A0, anziché andare a leggere dove punta: Codice:
MOVEA.L #VETT1,A0 Quote:
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Sep 2015
Messaggi: 8
|
Ok ora mi è chiaro!
E se volessi passare dal primo al secondo elemento di VETT1 mi basterebbe fare una semplice Codice:
ADD.B #1,VETT1 Grazie sempre per la tua disponibilità! |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
No, in questo modo incrementeresti di uno il primo elemento di VETT1.
Supponendo che A0 contenga l'indirizzo di VETT1, dovresti fare così: Codice:
ADD.L #1,A0 Codice:
ADDQ.L #1,A0
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#8 |
|
Junior Member
Iscritto dal: Sep 2015
Messaggi: 8
|
Come sempre ti ringrazio per la disponibilità! Mi sono imbattuto in un esercizio che chiede di modificare un array utilizzando un sottoprogramma; il vettore deve essere passato tramite stack. Utilizzo l'istruzione PEA per mettere il vettore nello stack e nella subroutine copio l'indirizzo del vettore nel registro address A0(tramite lo stack). Quando vado ad esempio a fare una ADD
Codice:
ADD.B #1,(A0) Ultima modifica di Eman993 : 19-09-2015 alle 13:56. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Esattamente.
Eventualmente in futuro riporta il codice (usando il tag CODE), così sarà possibile vedere se è tutto corretto.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#10 |
|
Junior Member
Iscritto dal: Sep 2015
Messaggi: 8
|
Perfetto! Credo di iniziare a capirci qualcosa
Codice:
ORG $8020
IF_CTRL DC.B 1 Questo è il bit di controllo
ORG $8022
IF_DATA DC.B 1 Questo è il bit data
ORG $8000
START MOVE.B #1,IF_CTRL Asserisco il bit controllo
LOOP BTST.B #7,IF_DATA Aspetto finché la tastiera non termina
BEQ LOOP
MOVE.B IF_DATA,D0 Memorizzo il dato
MOVE.B #0,IF_CTRL deasserisco il control bit
END START
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Se usi il bit 7 per controllare se c'è un dato da tastiera, sì, va bene.
P.S. Potresti anche usare CLR.B IF_CTRL per azzerare il valore di quella locazione.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#12 |
|
Junior Member
Iscritto dal: Sep 2015
Messaggi: 8
|
Grazie mille per tutto! Domani ho l'esame e speriamo vada tutto bene!!!
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Ti auguro di fare un buon esame.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#14 |
|
Junior Member
Iscritto dal: Sep 2015
Messaggi: 8
|
Mauro l'esame non è andato proprio benissimo però me la sono cavata. Ho un dubbio enorme che sarà sicuramente la domanda del prof. all'orale:
Supponiamo di voler scrivere un programma per sostituire in una stringa la lettera a con il simbolo ? e la lettera b con il simbolo !. Ti posto il codice: Codice:
ORG $8000
A DC.B 'CASE'
N DC.B 4
B DS.B 1
C1 DC.B 'A'
C2 DC.B 'B'
S1 DC.B '?'
S2 DC.B '!'
ORG $8100
MAIN MOVE.L #B,-(SP)
MOVE.L #A,-(SP)
MOVE.B N,-(SP)
MOVE.B C1,-(SP)
MOVE.B C2,-(SP)
MOVE.B S1,-(SP)
MOVE.B S2,-(SP)
JSR SUB
ADDA #16,SP
END MAIN
Codice:
MOVE.B 5(SP),D0
MOVE.L 16(SP),A0
MOVE.B D0,(A0)+
Perché in C++ quando voglio dichiarare una variabile faccio int i. Quando voglio dichiarare un array faccio int i[n]. In assembler c'è questa differenza? P.S. il prof. ci tiene alla riusabilità del codice, quindi se ho fatto qualcosa di troppo particolare e poco generico me lo indichi? Grazie mille! Ultima modifica di Eman993 : 21-09-2015 alle 16:47. |
|
|
|
|
|
#15 | |||||
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Cesare.
Quote:
Quote:
Adesso non ricordo se la sintassi dell'assembler lo preveda, ma può darsi che tu possa dichiarare N e B in questo modo: Codice:
N DC.B N-A B DS.B N-A In realtà non avresti bisogno di dichiarare N, C1, C2, S1, ed S2 come variabili, ma semplicemente come costanti. Lo si fa usando EQU al posto di DC: Codice:
A DC.B 'CASE'
B DS.B B-A
N EQU B-A
C1 EQU 'A'
C2 EQU 'B'
S1 EQU '?'
S2 EQU '!'
Codice:
MOVE.B N,-(SP) Codice:
MOVE.B #N,-(SP) Quote:
Quote:
Codice:
i DS.B n Quote:
In ogni caso devi tenere presente che il tuo obiettivo è risolvere l'esercizio. Quindi non ti complicare la vita: implementa la soluzione più semplice che ti viene in mente e che lo risolve pienamente. Poi se c'è qualcosa da migliorare, ci penserai dopo, SE avrai tempo e avrà senso la modifica.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|||||
|
|
|
|
|
#16 |
|
Junior Member
Iscritto dal: Sep 2015
Messaggi: 8
|
Perfetto! Direi che a meno di grosse sviste domani dovrebbe andare tutto bene, grazie mille ancora e scusa se ti ho chiamato Mauro (cdiMAURO)
Ultima modifica di Eman993 : 23-09-2015 alle 17:21. |
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non ti preoccupare: mi capita spesso, e non potevi sapere.
Allora fai un buon orale e prenditi questa materia.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:59.




















