作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想获取变量的地址并按 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 拒绝计算这个?现在奇怪的部分:用“+”替换“&”,代码将编译,甚至在链接后可以正确计算地址。非常欢迎任何有关此行为原因或解决方法的提示。
最佳答案
问题是 GAS 生成将由链接器处理的目标文件。虽然 GAS 确实支持按位 AND 运算,但它不能对绝对地址执行此操作。它们可能会被链接器更改,因此 GAS 必须生成仅支持有限操作(主要是偏移)的重定位条目。如果您可以将绝对地址转换为(本地)相对地址,GAS 可以在组装时计算它。否则,您将必须在运行时从代码中执行此操作。
关于assembly - 无法在 Gnu AS 表达式中使用 '&' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4436801/
我是一名优秀的程序员,十分优秀!