Assembly strlen程序集为短字符串返回6

Assembly strlen程序集为短字符串返回6,assembly,x86-64,Assembly,X86 64,上周在实验室,我们不得不在x86_64汇编中实现strlen函数。我完成了实验并获得了满分,但后来发现我的代码中有一个错误。对于长字符串,它可以正常工作,但对于长度为1、2、3或4的字符串,我的函数返回6。我不明白为什么。下面是代码 .text .globl mystrlen .type mystrlen, @function mystrlen: movq $0, %rax #put 0 in return regi

上周在实验室,我们不得不在x86_64汇编中实现strlen函数。我完成了实验并获得了满分,但后来发现我的代码中有一个错误。对于长字符串,它可以正常工作,但对于长度为1、2、3或4的字符串,我的函数返回6。我不明白为什么。下面是代码

.text .globl mystrlen .type mystrlen, @function mystrlen: movq $0, %rax #put 0 in return register movq $0, %r15 beginloop: cmpq $0, (%rdi) #while n!=0 je end incq %rax incq %rdi movq $0, %r14 cmpq $0, %r14 #go back to bginning je beginloop end: # ret # return result; .文本 格洛贝尔·迈斯特伦先生 .type mystrlen,@function 迈斯特伦: movq$0,%rax#将0放入返回寄存器 movq$0,%r15 beginloop: cmpq$0,(%rdi)#而n=0 je端 增量%rax 增量%rdi movq$0,%r14 cmpq$0,%r14#返回B游戏 杰贝金卢普 完:# 返回结果;
现在我知道这不是实现strlen的好方法,我可以利用一些东西来提高效率,但我并不在乎。我只是想弄明白为什么这段代码对于长度为1、2、3或4的字符串返回6。对于长度为0或大于5的字符串,它确实会正确返回。请帮助我理解博佩尔森已经指出了问题所在。 不要使用cmpq,而是应该使用cmpb(与字节比较)

当您使用
cmpq$0,(%rdi)
时,您要比较多少字节?