segment .data
a:      db      "This is fun"
b:      db      "This is not"
        segment .text
        global  main
        global  memcmp
memcmp:
        push    rdi
        push    rsi
        mov     rdi, rcx
        mov     rsi, rdx
        mov     rcx, r8
        repe    cmpsb
        cmp     rcx, 0
        jz      equal
        movzx   eax, byte [rdi-1]
        movzx   ecx, byte [rsi-1]
        sub     rax, rcx
        pop     rsi
        pop     rdi
        ret
equal:  xor     eax, eax
        pop     rsi
        pop     rdi
        ret

main:
        push    rbp
        mov     rbp, rsp
        sub     rsp, 32
        lea     rcx, [a]   ; first parameter to memcmp     
        lea     rdx, [b]   ; second parameter
        mov     r8, 11     ; third parameter, count
        call    memcmp
        xor     eax, eax
        leave
        ret