我正在尝试使用从命令行参数获取输入的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
另外,最后一次推送ebx应该是pop ebx.