检查汇编语言中的空字符

时间:2015-08-05 08:26:29

标签: string assembly null

我是汇编语言的新手。要清楚,这是作业。给出一个char *列表问题,如何找到字符串末尾的哪个字符? 所以我有

xor ecx, ecx; //counter
loop1:
mov esi, list;
mov eax, [esi + ecx];
cmp eax, 0x00; //check if the character is null
je end;
inc ecx;
jmp loop1;

end:

但是,当循环到达字符串的末尾时,循环不会终止。我想知道我做错了什么。我一直在寻找书籍和网上的解决方案,但它们看起来都像我做的那样。任何帮助将不胜感激!

编辑:是的,计数器应该在循环之外。

2 个答案:

答案 0 :(得分:1)

  • 您不应将计数器重置为循环的一部分。
  • 您不应该将地址初始化为循环的一部分。
  • 零终止只是一个字节,但你测试一个完整的双字。
  • 越少,您编写的代码就越少

把所有这些放在一起我们得到了

  mov esi, list
  mov ecx, -1
loop1:
  inc ecx
  cmp byte [esi + ecx], 0x00; //check if the character is null
  jne loop1;

答案 1 :(得分:0)

您正在一次读取几个字节,并测试它们是否都为零。

尝试只读取一个字节:

mov al, [esi + ecx];
cmp al, 0x00; //check if the character is null