String 检查汇编语言中的空字符
我不熟悉汇编语言。说清楚,这是家庭作业。问题是给定了一个char*列表,我如何才能找到哪个字符是字符串的结尾? 所以我有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: 但是,循环到达字符串末尾时不会终止。我不知道我做错了什么。我一直在书上和网上
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”之后终止,但它没有。在每次迭代时将计数器重置为零可能不是您想要的。