我正在尝试使用 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/