PDA

View Full Version : [Assembler] Problema con i puntatori..


cagio
20-09-2006, 16:20
Ciao a tutti. Sto facendo un programmino assembly, e mi manca poco alla conclusione. Tuttavia non capisco bene dove sbaglio con i puntatori. Mi spiego meglio.
Io ho memorizzato una stringa di parole qui:
SUB_STR1 DB MAX_LUNGH_STR DUP(?)
Ho memorizzato la lunghezza di questa stringa qui:
LUNGH_SSTR1 DB ?
E memorizzo una lettera che mi serve per poi fare un controllo dopo qui: LETTERA_PREC DB ?


Quello che mi interessa è prendere da SUB_STR1, che contiene ad esempio la stringa ‘abc’, la lettera ‘b’ e memorizzarla in LETTERA_PREC.

Io ho fatto uno cosa di questo tipo:

SUB [LUNGH_SSTR1],1

PUSH AX

PUSH DX

MOV DX,[LUNGH_SSTR1]

SUB DX,1

MOV SI,DX

MOV AX,SUB_STR1[SI]

MOV [LETTERA_PREC],AX

POP DX

POP AX

Ma non funziona; il compilatore dice ‘Operand types do not match’ alle righe delle istruzioni:
'MOV DX,[LUNGH_SSTR1]'
'MOV AX,SUB_STR1[SI]'
'MOV [LETTERA_PREC],AX'

Grazie a tutti coloro che prenderanno in considerazione il mio problema. :)

andbin
20-09-2006, 16:43
'MOV DX,[LUNGH_SSTR1]'
'MOV AX,SUB_STR1[SI]'
'MOV [LETTERA_PREC],AX'Perché LUNGH_SSTR1, SUB_STR1 e LETTERA_PREC sono dichiarate come DB, cioè come dei byte. Tu invece stai cercando di prendere/scrivere 16 bit. E sicuramente non è la cosa giusta (anche se tecnicamente sarebbe fattibile mettendo un WORD PTR).

Quindi:
MOV DH,0
MOV DL,[LUNGH_SSTR1]

poi:

MOV AL,SUB_STR1[SI]

poi:

MOV [LETTERA_PREC],AL

cagio
20-09-2006, 17:15
Ok ho risolto.. In effetti avevo commesso un errore stupido.. Grazie della collaborazione. Ti auguro buona serata. ;)