# Count the characters in a string (until a null byte is reached) # It's supposed to behave similarly with strlen() # # Returns the count in %rax # # - %rcx: Char count # - %rdx: current Char address # - %al: current char # .type count_chars, @function .globl count_chars # We receive the string addr in the stack. # Remember %rsp + 8 contains the return value .equ ST_STRING_ADDRESS, 16 count_chars: pushq %rbp movq %rsp, %rbp #initialize counter movq $0, %rcx # Start address of string: movq ST_STRING_ADDRESS(%rbp), %rdx count_loop_begin: # Grab char movb (%rdx), %al cmpb $0, %al je count_loop_end # We are not done yet... incq %rcx incq %rdx jmp count_loop_begin count_loop_end: movq %rcx, %rax movq %rbp, %rsp popq %rbp ret