【发布时间】:2017-05-23 12:33:06
【问题描述】:
我有一个用 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 指令在一个 单操作数
编辑:据我了解,此结果应存储在edx(请参阅下一个代码行)。但这对我来说似乎很奇怪。我以为结果会被压入堆栈
【问题讨论】:
-
它存储在
edx。这相当于将edx加载为零,但在英特尔架构上更快。 -
如果你想把东西压入堆栈,你必须使用
push将它们压入堆栈。