Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 检查汇编语言中的空字符_String_Assembly_Null - Fatal编程技术网

String 检查汇编语言中的空字符

String 检查汇编语言中的空字符,string,assembly,null,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: 但是,循环到达字符串末尾时不会终止。我不知道我做错了什么。我一直在书上和网上

我不熟悉汇编语言。说清楚,这是家庭作业。问题是给定了一个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:
但是,循环到达字符串末尾时不会终止。我不知道我做错了什么。我一直在书上和网上寻找解决方案,但它们看起来都和我一样。任何帮助都将不胜感激


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

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

请尝试只读取一个字节:

mov al, [esi + ecx];
cmp al, 0x00; //check if the character is null
  • 不应将计数器重置为循环的一部分
  • 不应将地址初始化为循环的一部分
  • 零终止仅仅是一个字节,但测试的是一个完整的dword
  • 跳转越少,编写的代码就越好
把所有这些放在一起,我们得到

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

它是在一个特定的测试用例中失败还是全部失败?你试过空字符串了吗?你能给出完整的源代码吗?列表是如何定义的?它是从用户输入读取的吗?它是在数据部分静态定义的吗?输入是例如“Hello World”,循环应该在“d”之后终止,但它没有。在每次迭代时将计数器重置为零可能不是您想要的。