在汇编语言中检查空字符

jiz*_*izh 5 string null assembly

我是汇编语言的新手。需要明确的是,这是家庭作业。问题是给出了一个char *list,我怎样才能找到哪个字符是字符串的结尾呢?所以我有

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:
Run Code Online (Sandbox Code Playgroud)

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

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

Fif*_*nik 3

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

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

  mov esi, list
  mov ecx, -1
loop1:
  inc ecx
  cmp byte [esi + ecx], 0x00; //check if the character is null
  jne loop1;
Run Code Online (Sandbox Code Playgroud)