Aur*_*rus 2 c++ compiler-construction assembly visual-studio-2010
我刚开始从编译器输出中学习一点汇编程序.
test(1);
Run Code Online (Sandbox Code Playgroud)
这个简单的函数调用创建以下asm输出(用x64编译)
000000013FFF2E76 mov ecx,1
000000013FFF2E7B call test (13FFF33C0h)
Run Code Online (Sandbox Code Playgroud)
但为什么不呢:
000000013FFF2E76 push 1
000000013FFF2E7B call test (13FFF33C0h)
Run Code Online (Sandbox Code Playgroud)
我认为函数参数将是pushed
堆栈然后poped
在函数中.有人可以解释为什么VS更喜欢顶级的吗?
小智 6
这是因为这是x64 Windows上的ABI.
在Windows x64上,传入第一个整数参数RCX
,第二个输入RDX
,第三个输入R8
和第四个输入R9
.在第五和以下是通过堆栈传递.
因为您的函数只有一个参数,所以只RCX
使用它.
编译器发出写入,ECX
因为对32位寄存器的所有写入都会导致64位寄存器的较高部分归零,而32位立即明显短于64位寄存器(任何指令缓存?).
归档时间: |
|
查看次数: |
154 次 |
最近记录: |