检查字母是否匹配

时间:2015-08-06 08:52:48

标签: assembly compare

我有一个由char * list表示的字符串,字符串大小是count,我想通过移动两个位置来更改字母,并检查它是否是字母A.我有这样的代码

mov esi, list;
xor ecx, ecx;

loop:
mov ebx, [esi + ecx];
inc ecx;
add ebx, 2; //character shifts two positions
cmp ebx, 0x41;
je end;
cmp ecx, count;
jl loop;

end:

我也试试

mov al, byte[ebx];
cmp al, 0x41;

但它也不起作用。我想知道如何比较这些字母。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您将EBX更改为BL,您的代码将会正常工作。字符大小为1字节。

就像现在写的那样,无法查看是否找到了字母A.这两种情况都可以使用 end:标签。

LATE CATCH

add ebx, 2; //character shifts two positions

通常对换档的理解不是你对这个加法所做的! 如果你真的意味着添加,那么为什么不比较值(0x41 - 2)?

另一方面,如果移位实际意味着移位(SHL或SHR),那么呈现的代码(并通过使用BL进行纠正)将永远不会产生字母" A"。这是因为" A"的位模式这是0100_0001b根本无法通过转移2个位置来获得它是左侧还是右侧。