kolibrios-fun/drivers/ddk/string/_strnlen.S

31 lines
823 B
ArmAsm
Raw Normal View History

# _strnlen() Author: Kees J. Bot 1 Jan 1994
# size_t _strnlen(const char *s, size_t ecx)
# Return the length of a string.
.intel_syntax
.globl __strnlen
.text
.align 16
__strnlen:
push ebp
mov ebp, esp
push edi
mov edi, [ebp+8] # edi = string
xorb al, al # Look for a zero byte
mov edx, ecx # Save maximum count
cmpb cl, 1 # 'Z' bit must be clear if ecx = 0
cld
repne
scasb # Look for zero
jne no0
inc ecx # Don't count zero byte
no0:
mov eax, edx
sub eax, ecx # Compute bytes scanned
pop edi
pop ebp
ret