.file "mystrlen.c" .text .globl mystrlen .type mystrlen, @function mystrlen: movq $0 , %rax # set return value to 0 push %rbx mainwhile: movq (%rdi), %rbx # read bytes from memory movq $0 , %rcx # set counter to zero for inner loop checkfornulls: incq %rcx # increment inner counter cmp %bh , 0 # compares value pointed to by first arg to zero je end # return if value is zero incq %rax # value isn't zero so add 1 to the main counter cmp %rcx, 8 # counter is 8 jge endwhile # so return to outer loop rol %rbx # rotate current value right jmp checkfornulls # counter isn't 8 so loop again endwhile: movq $0 , %rcx # reset inner counter to zero for reuse incq %rdi # increment string pointer by 1 jmp mainwhile # return to beginning of loop end: pop %rbx ret