            segment .data
    data    db      "hello world", 0
    n       dq      0
    needle  db      'w'

            segment .text
            global  main
    main:
            push    rbp
            mov     rbp, rsp

    ;       Register usage
    ;
    ;       rax: c, byte of data array
    ;       r8b:  x, byte to search for
    ;       rcx: i, loop counter, 0-63
    ;       rdx: data, address of data
    ;
            mov     r8b, [needle]
            lea     rdx, [data]
    ;       i = 0;
            xor     ecx, ecx
    ;       c = data[i];
            mov     al, [rdx+rcx]
    ;       if ( c != 0 ) {
            cmp     al, 0
            jz      end_if
    ;           do {
    do_while:
    ;               if ( c == x ) break;
                    cmp     al, r8b
                    je      found
    ;               i++;
                    inc     rcx
    ;               c = data[i];
                    mov     al, [rdx+rcx];
    ;           } while ( c != 0 );
                cmp     al, 0
                jnz     do_while
    ;       }
    end_if:
    ;       n = c == 0 ? -1 : i;
            mov     rcx, -1
    found:  mov     [n], rcx
    ;       return 0;
            xor     eax, eax
            leave
            ret