逻辑运算结果的地址是什么?

时间:2017-01-09 09:30:48

标签: c# assembly jit

我有用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(参见下一个代码行)。但对我来说这似乎很奇怪。我以为结果会被推到堆栈上

2 个答案:

答案 0 :(得分:7)

逻辑操作说明将结果存储在第一个参数中 - 在您的情况下,它是XOR a, a

请注意,对自身进行异或运算会产生0.因此,From: "+16501112222" <sip:+16501112222@sip.twilio.com> 是清除寄存器的常用汇编习惯用法。

答案 1 :(得分:5)

xor edx,edx是清除edx注册表的惯用方法。

(请注意,对于a XOR a的任何值,a为零。)