【发布时间】:2012-11-02 07:37:41
【问题描述】:
我的问题是:当我有这样的事情时:
lea rax, rbp - 8
// 也许这是我堆栈上的一个 int,因为我的代码中有一个本地“int”变量。 当我这样做时,CPU 是如何知道数据在哪里的:
mov qword [rax], 14
我的意思是,它只是一个地址...如果我在2^64 - x 保留了内存怎么办?
你分配的内存不能有这种地址吗?
或者如果堆栈增长到与您分配的内存具有相同的地址怎么办?
会这样吗?
汇编器不知道 rax 中的数字是多少,因此它不能是 MOVstack 和 MOVheap,就像近 JMP 和远 JMP 一样。
【问题讨论】:
-
栈和堆是指令集之上的概念。指令集在给定的寄存器中读取和写入内存地址,地址对程序有意义,但对硬件没有任何意义。您可以使用堆栈指针来读取堆,并使用 gpr 来读取堆栈,硬件并不关心。
-
谢谢你,正是这些愚蠢的事情让你熬了一夜......
标签: assembly heap-memory stack-memory addressing