我对组装有点了解.让我先介绍一下代码,然后解释一下我的思维方式.
#This is the Assembly version.
pushq %rbp
movq %rsp, %rbp
movl $2, -4(%rbp)
movl $3, -8(%rbp)
movl $5, %eax
popq %rbp
ret
#This is the C version.
int twothree() {
int a = 2;
int b = 3;
return 2 + 3;
}
好的,首先让我吃惊的是,我们不使用变量a和b作为a+b.所以它们是不必要的,我们直接求和整数.然而,如果计算机能够理解这一点,我想这将是非常可怕的.所以,我的问题是:在没有addl或类似命令的情况下,这个汇编代码是如何工作的?我们直接将立即数(或常量)整数5移动到eax寄存器.
还有,快速提问.那么,在最后两行之后,a和b变量会发生什么变化呢?当我们使用malloc+free时,它们在堆栈中的位置(或者我们可以称之为它们用作存储位置的"注册器")现在是空闲的.这是真的还是至少合乎逻辑?popq%rbp是关闭堆栈的命令.
我不是我说过的组装专家.所以这些 idea 大多只是在思考.谢谢