PDA

Visualizza la versione completa : [assemblyx86] Sostituzione caratteri nella stringa


loritonno
08-06-2012, 13:04
Salve a tutti :ciauz: non riesco a trovare l'errore in questo programma :dh: che dovrebbe prendere in input una stringa e sostituire il carattere da me scelto con degli 1


.MODEL TINY ; direttiva di segmento per il modello di memoria desiderato
.CODE
NULL EQU 0

ORG 100h
MAIN:
jmp INIZIO ;salto area dati


ACAPO PROC
mov ah,2
mov dl,0ah
int 21h
mov dl,0dh
int 21h
ret
ENDP

STAMPA PROC
STAMPA:
mov ah,2
mov dl,[bx]
cmp dl,NULL
je FINESTAMPA
int 21h
inc bx
jmp STAMPA
FINESTAMPA:
ret
endp
; AREA DATI
;///////////////////////////////////////
TITOLO DB "STRSUB DI XXX",0ah,0dh,0ah,0dh
STAMPASTRINGA1: DB "Immettere una stringa (max 20 caratteri): ",NULL
CARDAS: DB 0,NULL
STRINGA1: DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,NULL
INIZIO:
lea bx,TITOLO
call STAMPA
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>INPUT STRINGA DA MODIFICARE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

INPUT:
mov ah,1
int 21h
cmp al,0dh
je FINEINPUT
mov [bx],al
inc bx
jmp INPUT
FINEINPUT:
call ACAPO



lea bx,CARDAS
mov ah,1
int 21h
mov [bx],al

lea bx,STRINGA1
lea si,CARDAS
S_SUB:
mov ax,[bx]
cmp ax,NULL
je END_S_SUB
cmp ax,[si]
jne INCBX
mov [bx],31h
inc bx
jmp S_SUB
INCBX:
inc bx
jmp S_SUB
END_S_SUB:

call ACAPO
lea bx,STRINGA1
call STAMPA
int 20h
end MAIN


non so se inserisco mississipi e poi la s mi da in output mi1 invece di mi11i11ipi
grazie in anticipo

oregon
08-06-2012, 13:49
Nel ciclo di controllo dei caratteri usi sempre una word

mov ax,[bx]
cmp ax,NULL

...

cmp ax,[si]

...

mov [bx],31h

ma i caratteri sono byte non word ...

loritonno
08-06-2012, 14:04
quindi invece di ax dovrei utilizzare un semiregistro?

oregon
08-06-2012, 14:06
Perdonami ma se non hai capito, come hai fatto a scrivere quel codice?

Conosci la differenza tra

mov ax,[bx]

e

mov al,[bx]

?

loritonno
08-06-2012, 14:09
be in mov ax,[bx] metto quello che si trova nelli'indirizzo di bx in ax mentre nell'altro in al, credo :spy:

oregon
08-06-2012, 14:11
E quindi ?

loritonno
08-06-2012, 14:13
quindi al met del registro ax

oregon
08-06-2012, 14:15
Ed a 8 bit, come i caratteri inseriti da tastiera. Non a 16 bit come ax ...

Capito questo, apporta le correzioni al codice ...

loritonno
08-06-2012, 14:18
quindi diventa cos il controllo?


lea bx,STRINGA1
lea si,CARDAS
S_SUB:
mov al,[bx]
cmp al,NULL
je END_S_SUB
cmp al,[si]
jne INCBX
mov [bx],31h
inc bx
jmp S_SUB
INCBX:
inc bx
jmp S_SUB
END_S_SUB:

perdona la mia indecisione ma da poco che uso questo linguaggio

oregon
08-06-2012, 14:21
Questo

mov [bx],31h

serve a scrivere un '1' al posto del carattere trovato, ma bene indicare che si tratta di un byte .... quindi

mov byte ptr [bx],31h

Loading