我想得到一个变量的地址,并由 4096 编辑(这将对应于它的内存页的地址)。因为这是可以离线计算的东西,所以我做了一些看起来像这样的事情(v 是变量,vpage 应该包含其页面的地址):
.data
v: .zero 0x100
vpage: .long v & 0xfffff000
尝试使用 x86 汇编器编译此文件会导致以下错误:
test.S: Assembler messages:
test.S:3: Error: invalid sections for operation on `v' and `L0'
为什么 GAS 会拒绝计算这个?现在奇怪的部分:用“+”替换'&',代码将编译,地址在链接后甚至会被正确计算。任何关于这种行为的原因或如何解决它的提示都将非常受欢迎。