【发布时间】:2012-11-08 20:51:23
【问题描述】:
上周在实验室中,我们不得不在 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 的字符串,它确实返回正确。请帮助我理解
【问题讨论】:
-
当你使用
cmpq $0, (%rdi)时,你比较的是多少字节?