我正在尝试使用 NASM 制作一个从命令行参数获取输入的程序。由于未提供字符串长度,我正在尝试制作一个函数来计算我自己的。这是我的尝试,它采用指向 ebx 寄存器中字符串的指针,并返回 ecx 中字符串的长度:

len:
    push ebx
    mov ecx,0
    dec ebx
    count:
        inc ecx
        inc ebx
        cmp ebx,0
        jnz count
    dec ecx
    pop ebx
    ret

我的方法是逐个字符地遍历字符串,并检查它是否为空。如果不是,我增加 ecx 并转到下一个字符。我相信问题在于 cmp ebx,0 对于我正在尝试做的事情是不正确的。我将如何正确地检查字符是否为空?另外,还有其他事情我可以做得更好吗?

最佳答案

您正在将 ebx 中的值与 0 进行比较,这不是您想要的。 ebx 中的值是内存中字符的地址,因此应该像这样取消引用:

cmp byte[ebx], 0

此外,最后一个 push ebx 应该是 pop ebx

关于linux - 如何使用 NASM 找到字符串的长度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6468480/

10-11 16:34