Memcmp in assembly

di il
2 risposte

Memcmp in assembly

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

2 Risposte

  • Re: Memcmp in assembly

    26/12/2023 - Aless ha scritto:


    avrei bisogno

    Manca la domanda…

    Comunque il codice che hai mostrato non è a 16 bit… se usi ecx esi edi …  usando i registri cx si di il codice è lo stesso. Addirittura basterebbe

    CLD
    REPE  CMPSB
    JNE Diverso
    
    Prova a studiare il microcodice operativo REPE CMPSB dalla documentazione o dal tuo libro
  • Re: Memcmp in assembly

    Grazie mille

Devi accedere o registrarti per scrivere nel forum
2 risposte