msg db "a",0x00,
global inst_test_strlen
inst_test_strlen:
push ebp
mov ebp, esp
sub esp, 38h
mov ecx, 0xFFFFFFFF ;计数值赋初值
mov edi, msg ;消息的指针基地址
mov eax, 0 ;匹配串结束字符 al=='\0'
repne scasb ;循环开始,ecx减一,搜索edi开始的字符串,匹配al的值,没有匹配继续循环,匹配到退出循环
mov eax, ecx ;结果存eax
not eax ;取反码
lea eax, [eax-1] ;减去'\0'的那一次计数
leave
retn
eax为字符串的长度,作为函数的返回值输出。
博客展示了一段汇编代码实现字符串长度计算。代码中对计数值赋初值,设置消息指针基地址,通过循环搜索字符串,匹配结束字符后取反码并减去结束字符的计数,最终将结果存于eax作为函数返回值输出。
1万+

被折叠的 条评论
为什么被折叠?



