Allora, ho provato a rifare il codice in modo più chiaro e commentato, spero tu mi possa dire il perché di questo errore.
;Verificare se una parola è palindroma o no (non ottimizzato)
SECTION .text
global _start
_start: ; tell linker entry point.
mov ecx, string ;assegna il puntatore a string a exc
add ecx, len ;somma string+len e assegnalo a ecx
sub ecx, 3 ;dato che bisogna eliminare il ,10,13,0 (non bisogna contarli come caratteri)
mov eax, string ;assegna il puntatore a string a eax
mov ebx, len ;registro che terrà il conto di quante volte il ciclo è stato fatto
_ciclo:
push eax ;si salva il valore di edx nello stack
push ecx ;si salva il valore di ecx nello stack
mov eax, [eax] ;si assegna ad edx il valore da lui puntato
mov ecx, [ecx] ;si assegna ad ecx il valore da lui puntato
cmp eax, ecx ;si verifica se sono uguali
jnz _stampaNonPalindroma
pop ecx ;si riprende il valore inizialmente salvato nello stack
pop eax ;si riprende il valore inizialmente salvato nello stack
inc eax ;si decrementa il valore di eax (del puntatore) per potere controllare la cella puntata da string+len-3-n (n varierà ogni volta)
dec ecx ;si decrementa il valore di ecx (del puntatore) per potere controllare la cella puntata da string+len-3-n (n varierà ogni volta)
dec ebx ;si decrementa il valore di ebx in modo tale da ripetere il ciclo len volte
cmp ebx,0h ;si verifica se il ciclo è stato ripetuto len volte
jnz _ciclo
jmp _stampaPalindroma ;se uscirà "indenne" dal ciclo vuol dire che la parola è palindroma
_stampaPalindroma:
mov ecx, string2
mov edx, len2
mov ebx, 1 ; file descriptor (stdout)
mov eax, 4 ; system call number (sys_write)
jmp _esci
_stampaNonPalindroma:
mov ecx, string3
mov edx, len3
mov ebx, 1
mov eax, 4
jmp _esci
_esci:
mov eax, 1
int 0x80
section .data
string: db "anna",10,13 ;10 line feed, 13 carriage return, 0 null.
len: equ $-string
string2: db "Palindroma",10,13
len2: equ $-string2
string3: db "Non Palindroma",10,13
len3: equ $-string3