我正在研究CIL优化技术。我已经创建了这个简单的代码:
int Function() { return 10; }
// (...)
int Number = Function();
Console.WriteLine(Number);
当我在反汇编窗口观察这段代码时,我看到了如下内容:
00252DB0 mov ecx,0Ah
00252DB5 call 63A96648
00252DBA ret
我知道它将10放入
ecx
,然后使用63A96648
作为指向WriteLine()
函数的指针,但我不确定为什么要使用ecx
寄存器。我一直认为
ecx
主要用于循环计数器(嗯,它被称为“计数器寄存器”是有原因的...),我不确定为什么要在WriteLine()
函数中使用它,即使eax
和ebx
都是空闲的。即使我编写更复杂的函数,最终也总是在WriteLine()
函数之前使用ecx
。我尝试在互联网上查找关于它的任何信息,甚至在我大学图书馆里找了几本书,但我什么也没有找到。是
ecx
更快还是有任何理由使用它?我完全意识到我不应该太在意它(因为只要它工作正常,我就没问题),但这个问题已经困扰我几天了,我希望有人能告诉我为什么要使用这个寄存器。
Console.WriteLine
如何使用参数,因此它必须符合该方法所期望的(ecx
中的参数)。 - 500 - Internal Server Error