【发布时间】:2011-09-22 01:07:36
【问题描述】:
我正在尝试使用 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 对于我正在尝试做的事情不正确。我将如何正确地检查字符是否为空?另外,还有其他我可以做得更好的事情吗?
【问题讨论】:
-
cmp ebx,0是错误的,最后的push ebx应该是pop ebx(否则你会得到一个 stack overflow !)。 -
糟糕。我错误地将
pop ebx手动复制为push ebx。 -
尝试养成复制和粘贴实际代码的习惯,而不是重新输入代码。另外请编辑您的问题,使其与实际代码匹配。
-
@paul-r 这就是我通常做的事情。我在 VirtualBox 中工作,剪贴板共享设置不正确。
标签: linux string assembly x86 nasm