【发布时间】:2015-10-04 22:00:12
【问题描述】:
我没有特定的机器设置,但一般来说,我用 C++ 编写了以下内容:
int* x;
x = 0xFFFFFFFF;
int* y;
y = 0x00000000;
*y = *x
我可以想办法在汇编中做到这一点:
// find &x (on the stack frame) using the frame register + an offset
// load value of x into register 0
load *(register 0) -> register 1 // load value of *x
load y -> register 2
store register 1 register 2
然而,上述指令都没有编码内存地址(对于 4GB 内存是 32 位),只有寄存器的地址被编码(如果我们有 32 个寄存器,则指令中需要 5 位)
TL;DR 我的问题是像“分支”(函数调用)这样的指令,它需要一个函数地址(或链接器给出的符号),它实际上是一个 32 位内存地址......它怎么可能(假设每个汇编指令也是4 个字节大)?如果“分支”也使用临时寄存器来存储地址(如我给出的示例),这是否意味着“分支”不是原子操作?
【问题讨论】: