问题描述
我是汇编的新手,我通过将 c
代码编译为汇编来学习汇编。
对于这个 c++
代码
int foo() {
bool x = true;
return 1;
}
这是生成的汇编代码(intel语法)
foo():
push rbp
mov rbp,rsp
mov BYTE PTR [rbp-1],1
mov eax,1
pop rbp
ret
您可以查看compiler explorer link here
在本说明中
mov BYTE PTR [rbp-1],1
我们将 1
存储在堆栈中,其地址为 [rbp - 1]
mov eax,1
pop rbp
ret
这里我们将返回值设置为 1
和 popping
堆栈并将其值存储在 rbp
中。
我怀疑我们如何将 1
存储在 [rbp - 1]
的地址中,因为 rsp
应该始终指向堆栈的顶部(在本例中为向下),在此指令之后 {{1} } 顶部应该是 mov BYTE PTR [rbp-1],1
但 [rbp-1]
仍然指向 rsp
。
正确的代码不应该是这样的
rbp
这样 rsp 将始终指向顶部。
我的第二个疑问是 sub rsp,1
mov BYTE PTR [rbp - 1],1
之后存储在 [rbp-1]
中的值会发生什么变化。是否以某种方式自动清理。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)