Root io sono riuscito a risolverlo in un modo più semplice (credo).
CODICE
.model small
.stack 100h
.data
messInizio db 'Scrivi una frase senza spazi',10,13,'$'
mess1 db 'La parola inserita e palindroma',10,13,'$'
mess2 db 'La parola inserita NON e palindroma',10,13,'$'
capo db 10,13,'$'
vettore1 dw 50 dup (0) ;vettore parola
vettore2 dw 50 dup (0) ;vettore contraio
Lettere dw ? ;DW=16bit piu lunga di db
.code
inizio:
mov ax,@data
mov ds,ax
call lettura ;chiamo la procedura per leggere
call palindromo
mov ah,4ch
int 21h
proc lettura
lea bx,messInizio
mov ah,09
int 21h
mov di,0
ciclo_leggere:
mov ah,01
int 21h
cmp al,13
je fine_leggere
lea bx,vettore1
mov byte ptr[bx+di],al
mov numLettere,di
inc di
jmp ciclo_leggere
fine_leggere:
ret
endp lettura
proc plindromo
mov di,0
mov si,Lettere
ciclo_inverso:
lea bx,vettore1 ;normale
mov al,byte ptr[bx+si]
dec si
lea bx,vettore2 ;contrario
mov byte ptr[bx+di],al
inc di
cmp di,Lettere
ja fine_inverso
jmp ciclo_inverso
fine_inverso:
mov di,0
ciclo_controllo:
lea bx,vettore1 ;parole
mov al,byte ptr[bx+di]
lea bx,vettore2 ;contrario
mov ah,byte ptr[bx+di]
cmp al,ah
jne nonpalindromo
cmp di,Lettere
ja palindromo
inc di
jmp ciclo_controllo
palindromo: ;parte stampa MSG palindromo
lea dx,mess1
mov ah,09
int 21h
jmp finetot
nonpalindromo: ;parte stampa MSG non palindromo
lea dx,mess2
mov ah,09
int 21h
finetot:
ret
endp palindromo
end