如何使用NASM查找字符串的长度?

Vin*_*lli 3 linux string x86 assembly nasm

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

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

Job*_*Job 5

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

cmp byte[ebx], 0
Run Code Online (Sandbox Code Playgroud)

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