PDA

View Full Version : controllo di un programma assembly 68000


domax93
20-07-2014, 14:23
salve qualcuno potrebbe controllare se questi programmi sono svolti correttamente? li ho fatti personalmente ma non saprei se sono corretti oppure ci sono errori, sarei grato a chiunque possa darmi un consiglio o trovare qualche errore.
il programma è molto banale richiedere di trovare il numero 7 tra gli elementi di un vettore. nel primo caso è svolto molto semplicemente
*dopo aver inserito un vettore di numeri interi, cercare il numero 7 e salvare l'indirizzo di dove si trova la variabile del registro in una variabile
*area dati


*area dati
ORG $8000

VECTOR DC.L 1,2,3,4,53,6,7,0 *IL VETTORE DI ELEMENTI
NUMBER EQU 7 *VALORE DA CERCARE
RIS DC.L 0 *RISULTATO NON INIZIALIZZATO
RIEMP EQU 8
*programma

START MOVEA.L #VECTOR,A0
MOVE.L #RIEMP,D1
LOOP MOVE.L (A0)+,D0
CMP.L #NUMBER,D0
BNE LOOP1
LOOP1 ADD.L #-1,D1
TST D1
BNE LOOP
ADDA.L #-1,A0
MOVE.L A0,RIS

FINE JMP FINE

END START





grazie in anticipo!

versione con subroutine e stack ancora non corretta come il programma sopra

**dopo aver inserito un vettore di numeri interi, cercare il numero 7

*DATI
VECTOR DC.W 1,2,3,4,53,6,7,0 *IL VETTORE DI ELEMENTI
NUMBER EQU 7 *VALORE DA CERCARE
RIS DC.L 0 *RISULTATO NON INIZIALIZZATO


ORG $8000
START MOVE.L #VECTOR,A0
MOVE.L (A0)+,D0
ADDA.L #-2,SP
MOVE.W D0,-(SP) *FORSE NON NECESSARIO
MOVE.W #NUMBER,-(SP)
JSR FOUND
MOVE.W 4(SP),D2
ADD.L #6,SP
MOVE.W D2,RIS




*SUBROUTINE
*DATI
OFF1 EQU 8 *NUMBER
OFF2 EQU 10 *D0=#VECTOR *NON NECESSARIO
OFF3 EQU 12 *OUTPUT

FOUND LINK A6,#0
MOVE.L D0,-(SP)
LOOP CMP.B OFF1(A6),D0
BNE LOOP
ADDA.L #-1,A0
MOVE.W D0,OFF3(A6)
MOVE.L (SP)+,D0
UNLK A6
RTS

END START

Daniels118
21-07-2014, 07:53
Non puoi semplicemente provarlo e vedere se funziona?

domax93
21-07-2014, 10:05
Non puoi semplicemente provarlo e vedere se funziona?

il programma asimtool crasha, mentre controlla correttamente gli altri programmi. proverò su un altro computer. comunque controlla solo la sintassi se è corretta, quindi comunque servirebbe un occhiata

Daniels118
21-07-2014, 10:11
No, c'è anche il simulatore con il debugger, vedi questo video: https://www.youtube.com/watch?v=IRJInycYhWw

domax93
21-07-2014, 10:31
No, c'è anche il simulatore con il debugger, vedi questo video: https://www.youtube.com/watch?v=IRJInycYhWw

è esattamente quello che ho io, però a me crasha con asimtool, ovvero per il controllo della sintassi.

Daniels118
21-07-2014, 10:38
Il fatto che un programma che dovrebbe controllare la sintassi crasha la dice già lunga, poi se tale problema si verifica sempre e solo con quel particolare listato allora è la fine! Vorrei poter fare di più, ma il mio 68k è arrugginito... prova come avevi detto su un altro pc.

domax93
21-07-2014, 10:44
Il fatto che un programma che dovrebbe controllare la sintassi crasha la dice già lunga, poi se tale problema si verifica sempre e solo con quel particolare listato allora è la fine! Vorrei poter fare di più, ma il mio 68k è arrugginito... prova come avevi detto su un altro pc.

crasha anche su un altro computer, almeno il primo programma dovrebbe andare, dato che è un programma semplice, e non credo di aver pasticciato
grazie per la disponibilità :D

domax93
21-07-2014, 21:07
trovato il motivo del crash!
(A0+), anzichè (A0)+

cdimauro
22-07-2014, 06:47
Ci sono altri errori. Ad esempio, hai definito il vettore come elementi di word, ma poi nel codice leggi e confronti byte.

Inoltre presupponi che il numero venga sempre trovato. Se il numero non c'è, la ricerca potrebbe continuare indefinitamente, andando a leggere anche in zone di memoria inesistenti, e quindi sollevando un'eccezione.

Nel secondo listato, invece, leggi il primo byte dal vettore e lo inserisci nello stack (come word). E' un'operazione inutile. Devi, invece, inserire nello stack l'indirizzo del vettore.
Valgono, comunque, le stesse considerazioni di prima.

domax93
22-07-2014, 11:11
grazie mille per la risposta!!!!!!!!!! intanto non generano errori in asimtool, vedrò come va con il debugging
ho caricato una revisione della primo programma, potrebbe andare?

cdimauro
22-07-2014, 17:10
Purtroppo le modifiche che hai fatto non funzionano.

Prova a seguire mentalmente il flusso delle istruzioni, e vedrai che il programma si comporterà allo stesso modo, sia che trovi il numero sia se non riesce a trovarlo.