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