来自于《Intel汇编语言程序设计》(第四版)第八章,该过程返回字符串长度到EAX寄存器中,调用该过程时需要传递字符串的偏移,如:
INVOKE Str_length,ADDR myString
Str_length过程代码如下:
Str_length PROC USES edi,
pString : PTR BYTE ; pointer to string
mov edi,pString
mov eax,0 ; character count
L1: cmp byte ptr [edi],0 ; end of string?
je L2 ; yes : quit
inc edi ; no : point to next
inc eax ; add 1 to count
jmp L1
L2: ret
Str_length ENDP
该过程首先接受字符串的偏移值,然后将偏移值保存到edi中,随后判断是否到达了字符串的末尾,如果不是,则edi地址加1,eax的值加1,然后继续循环,最后得到的EAX中的值就是字符串的长度。