Assembly MC68000 esercizio sulle stringhe
* Data una stringa di caratteri A,
* terminata dal carattere di codice ASCII 0 (carattere tappo),
* scrivere un programma che ponga
* in una nuova stringa chiamata B i caratteri di A
* con esclusione degli spazi (carattere di codice ASCII 32).
*
* Esempio:
* A= 'un due tre ',0
* B= 'unduetre',0
non riesco a capire il motivo per cui in queste 2 righe di codice
CMP (A1)+,D0 *confronta A1 con A2
BNE PASSA
non si azzera mai D0 e quindi passa sempre
* terminata dal carattere di codice ASCII 0 (carattere tappo),
* scrivere un programma che ponga
* in una nuova stringa chiamata B i caratteri di A
* con esclusione degli spazi (carattere di codice ASCII 32).
*
* Esempio:
* A= 'un due tre ',0
* B= 'unduetre',0
non riesco a capire il motivo per cui in queste 2 righe di codice
CMP (A1)+,D0 *confronta A1 con A2
BNE PASSA
non si azzera mai D0 e quindi passa sempre
- ORG $8000
MAIN MOVEA.L #A,A1 *porto la stringa in A
MOVE.B #SPAZIO,D0 *porto lo 0 in A2
TESTA TST (A1) *testa l'operando finchè non sia uguale a 0
BEQ FINITO
CMP (A1)+,D0 *confronta A1 con A2
BNE PASSA
JMP TESTA
PASSA MOVE A1,(B)
JMP TESTA
FINITO JMP FINITO
SPAZIO EQU 32
A DC.B 'un due tre ',0
B DS.W 10
END MAIN[/list:u:3shvv45s]
Risposte
dunque effettivamente il tuo codice non può funzionare perché c'è qualcosa che non va con gli incrementi e gli indirizzamenti. Questo codice qui invece sembra funzionare. Se non va bene oppure non riesci a capirlo provo a spiegartelo.
00008000 1 ORG $8000
00008000 2
00008000 227C 00008030 3 MAIN MOVEA.L #A,A1 *porto la stringa in A
00008006 103C 0020 4 MOVE.B #SPAZIO,D0 *porto lo 0 in A2
0000800A 1419 5 LOOP MOVE.B (A1)+,D2
0000800C 4A42 6 TESTA TST D2 *testa l'operando finchè non sia uguale a 0
0000800E 6700 001A 7 BEQ FINITO
00008012 B042 8 CMP D2,D0 *confronta A1 con A2
00008014 6600 0008 9 BNE PASSA
00008018 4EF9 0000800A 10 JMP LOOP
0000801E 33C2 0000803C 11 PASSA MOVE D2,(B)
00008024 4EF9 0000800A 12 JMP LOOP
0000802A 4EF9 0000802A 13 FINITO JMP FINITO
00008030 14
00008030 =00000020 15 SPAZIO EQU 32
00008030 75 6E 20 64 75 65 20 74 72 ... 16 A DC.B 'un due tre ',0
0000803C 17 B DS.W 10
00008050 18
00008050 19 END MAIN
No errors detected
No warnings generated
00008000 1 ORG $8000
00008000 2
00008000 227C 00008030 3 MAIN MOVEA.L #A,A1 *porto la stringa in A
00008006 103C 0020 4 MOVE.B #SPAZIO,D0 *porto lo 0 in A2
0000800A 1419 5 LOOP MOVE.B (A1)+,D2
0000800C 4A42 6 TESTA TST D2 *testa l'operando finchè non sia uguale a 0
0000800E 6700 001A 7 BEQ FINITO
00008012 B042 8 CMP D2,D0 *confronta A1 con A2
00008014 6600 0008 9 BNE PASSA
00008018 4EF9 0000800A 10 JMP LOOP
0000801E 33C2 0000803C 11 PASSA MOVE D2,(B)
00008024 4EF9 0000800A 12 JMP LOOP
0000802A 4EF9 0000802A 13 FINITO JMP FINITO
00008030 14
00008030 =00000020 15 SPAZIO EQU 32
00008030 75 6E 20 64 75 65 20 74 72 ... 16 A DC.B 'un due tre ',0
0000803C 17 B DS.W 10
00008050 18
00008050 19 END MAIN
No errors detected
No warnings generated