【问题标题】:strlen assembly returns 6 for short stringsstrlen 程序集为短字符串返回 6
【发布时间】: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)时,你比较的是多少字节?

标签: assembly x86-64


【解决方案1】:

Bo Persson 已经指出了问题所在。 而不是使用 cmpq,您应该使用 cmpb(与字节比较)

【讨论】:

    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 2013-04-25
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多