我阅读了有关 64 位模式下地址计算的英特尔手册。假设我们有 64 位模式,默认地址大小为 64 位。还假设有问题的指令前面有地址大小覆盖前缀,因此地址大小变为 32 位。
现在,假设该指令使用寄存器编号 0 (rax/eax/ax ...) 指定的地址对内存操作数进行编码。
现在我不完全理解的是,CPU 是否只查看 eax 值并在内部对其进行零扩展以形成“本机”64 位地址,或者它查看整个 rax 值并将其截断为有效的 32 位范围(例如, rax 包含类似 5Gb 的内容,CPU 将其削减到最大 32 位地址)。