PDA

Visualizza la versione completa : [ASSEMBLY] Verificare se una stringa non nulla


egla
08-05-2012, 23:26
ciao!!
devo scrivere un programma che legga una stringa data e controllarla se nulla o no.
La lettura e il controllo della stringa deve avvenire nel sottoprogramma chiamato dal programma principale.. riporto qui sotto il codice del sottoprogramma



COPYSTR:
LD DE,STR ;carica la stringa sul registro
<loop>
INT DE ;legge il registro
LD HL,DE ;carica il contenuto di DE in HL
INC HL ;incrementa i due registri
INC DE
LD DE,NULL ;controlla se nulla la stringa
CP DE
JP Z,LOOP
RET

mi potete dire perch mi da errore su DE??

oregon
08-05-2012, 23:28
Che Assembly ? (forse Z80 ?)

Quale errore hai ? In quale linea ?

egla
08-05-2012, 23:32
riferito al DMC8,
l'errore mi compare sulla quarta riga, quando deve leggere il registro.

oregon
08-05-2012, 23:43
Non lo conosco ma non importa ...

Cosa dovrebbe fare l'istruzione

INT DE

?

E non mi hai detto quale errore ...

ESSE-EFFE
09-05-2012, 13:45
Originariamente inviato da egla
COPYSTR:
LD DE,STR ;carica la stringa sul registro
<loop>
INT DE ;legge il registro
LD HL,DE ;carica il contenuto di DE in HL
INC HL ;incrementa i due registri
INC DE
LD DE,NULL ;controlla se nulla la stringa
CP DE
JP Z,LOOP
RET
[/code]
mi potete dire perch mi da errore su DE??

<loop> per indicare una label sbagliato.
INT come mnemonico non esiste.
CP DE non si pu fare.
E comunque con quel codice non stai controllando se nulla la stringa, dovresti leggere i vari byte della stringa e confrontarli con NULL (immagino), non DE quindi, ma il contenuto di HL. Precisa meglio cosa si intende per stringa "nulla".

egla
09-05-2012, 22:17
grazie delle risposte...
il loop e il comando di lettura(IN) ho sbagliato a scriverlo svista mia..
io dovrei leggere la stringa e memorizzare il contenuto su un registro, dopo di che effettuare il controllo bit per bit??
per fare il controllo mi utile usare la maschera??

egla
09-05-2012, 22:45
Oregon il DMC8 un microprocessore,che non corrisponde ad un vero dispositivo fisico in grado di funzionare grazie ad un emulatore.
Nasce dal Z80 escludendo i registri finalizzati alla gestione di memorie dinamiche, registri alternativi..




loop:
IN A,(STR) ;legge la stringa
INC HL ;incrementa i due registri
INC DE
LD A,NULL

controllo della stringa lo posso fare come ho scritto,cio con LD A,NULL??

oregon
09-05-2012, 22:51
Originariamente inviato da egla
Oregon il DMC8 un microprocessore ...

S ... l'avevo capito ...

Ma l'istruzione

IN

non serve all'I/O da dispositivi ?

egla
09-05-2012, 22:54
IN se non sbaglio legge la stringa

oregon
09-05-2012, 23:14
La IN serve a leggere un byte da una periferica. Se poi questa la tastiera allora ottieni il tasto pressato ma non ho idea della situazione in cui ti trovi (dal punto di vista delle premesse imposte per il tuo esercizio).

Loading