我有用C#编写的简单程序:
static void Main(string[] args)
{
int a = 0;
for (int i = 0; i < 100; ++i)
a = a + 1;
Console.WriteLine(a);
}
我是编程领域的新手,我的目的只是了解JIT创建的汇编代码。这是一段asm代码:
7: int a = 0;
0000003c xor edx,edx
0000003e mov dword ptr [ebp-40h],edx
8: for (int i = 0; i < 100; ++i)
00000041 xor edx,edx
00000043 mov dword ptr [ebp-44h],edx
我无法理解代码:0000003c xor edx,edx
。存储的操作结果在哪里?我只从“英特尔®64和IA-32架构软件开发人员手册”中找到了这样的引用:
逻辑指令AND,OR,XOR(异或)和NOT执行标准的布尔运算 他们被命名。 AND,OR和XOR指令需要两个操作数; NOT指令在a上运行 单操作数
编辑:据我所知,这个结果应该存储在edx
(参见下一个代码行)。但对我来说这似乎很奇怪。我以为结果会被推到堆栈上
答案 0 :(得分:7)
逻辑操作说明将结果存储在第一个参数中 - 在您的情况下,它是XOR a, a
。
请注意,对自身进行异或运算会产生0.因此,From: "+16501112222" <sip:+16501112222@sip.twilio.com>
是清除寄存器的常用汇编习惯用法。
答案 1 :(得分:5)
xor edx,edx
是清除edx
注册表的惯用方法。
(请注意,对于a XOR a
的任何值,a
为零。)