上周在实验室中,我们必须在 x86_64 程序集中实现一个 strlen 函数。我完成了实验并获得了满分,但后来发现我的代码中有一个错误。对于长字符串,它可以正常工作,但对于长度为 1、2、3 或 4 的字符串,我的函数返回 6。我不明白为什么。下面是代码。
。文本 .globl mystrlen .type mystrlen, @function 神秘人: movq $0, %rax #将 0 放入返回寄存器 movq $0, %r15 开始循环: cmpq $0, (%rdi) #while n!=0 结束 公司 %rax 公司 %rdi movq $0, %r14 cmpq $0, %r14 #回到开始 我开始循环 结尾: # ret # 返回结果;
现在我知道这不是实现 strlen 的好方法,而且我可以利用一些东西来提高效率,但我并不在乎。我只是想弄清楚为什么此代码对于长度为 1、2、3 或 4 的字符串返回 6。对于长度为 0 或大于 5 的字符串,它确实返回正确。请帮助我理解