我正在观察为下面的函数here创建的程序集.
int square(int num) {
return num;
}
这是为上面的函数生成的程序集:
square:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], edi
mov eax, DWORD PTR [rbp-4]
pop rbp
ret
我的问题是,我可以把它重写到这里,然后假定它运行良好吗?
square:
push rbp
mov rbp, rsp
mov eax, edi
pop rbp
ret
有什么必要先把edi
移到[rbp-4]
,然后再把[rbp-4]
移到eax
?由于源和目标都是寄存器,我认为我们可以在单个移动指令中移动数据.
编辑
我的问题是关于未优化的代码版本,我知道如果我用-O1
编译它,它会发出更短、更简洁的代码.但我的问题是关于额外mov
条指令的语义.