Ciao, avrei bisogno di scrivere una funzione per comparare SI e DI in assembly, che ritorni Ah=0 se le stringhe sono uguali…
grazie mille
section .text
global memcmp
memcmp:
; Input:
; edi: puntatore al primo blocco di memoria
; esi: puntatore al secondo blocco di memoria
; ecx: numero di byte da confrontare
; Output:
; Flag zero (ZF) impostato se i blocchi di memoria sono uguali, azzerato altrimenti
; Flag di carry (CF) impostato se il primo byte che non corrisponde è maggiore nel primo blocco, azzerato altrimenti
xor eax, eax ; Pulisce il registro del risultato (eax)
cmp ecx, 0 ; Verifica se il numero di byte da confrontare è zero
je .done ; Se è zero, i blocchi di memoria sono considerati uguali
; Confronta i blocchi di memoria byte per byte
.loop:
mov al, [edi] ; Carica un byte dal primo blocco di memoria
mov bl, [esi] ; Carica un byte dal secondo blocco di memoria
cmp al, bl ; Confronta i byte
jne .mismatch ; Salta a mismatch se non sono uguali
inc edi ; Passa al byte successivo nel primo blocco
inc esi ; Passa al byte successivo nel secondo blocco
dec ecx ; Decrementa il conteggio dei byte
jnz .loop ; Continua il loop se ci sono più byte da confrontare
.done:
xor eax, eax ; Pulisce il registro del risultato (eax)
ret
.mismatch:
; Imposta i flag per indicare una non corrispondenza
sbb eax, eax ; Imposta eax a -1 per indicare una non corrispondenza
ret