我需要设置一些标签地址/偏移的最高位。
我试过了:
test.nasm:
BITS 32
dw mylabel | 0x8000
mylabel:
dd 0
但是当我试图组装时,我得到了:
nasm -f bin test.nasm
test.nasm:3: error: `|' operator may only be applied to scalar values
为什么它不将 mylabel 视为标量值?我认为标签只是由汇编程序替换为它们的地址(标量值)。
如果重要的话,我正在使用nasm v 2.09.04。
提前感谢您的帮助。
修改 我已经能够使用 + 而不是 | 。看起来像按位运算符不适用于标签。您如何看待,这是故意还是错误?
答案 0 :(得分:1)
标签是可重定位的值 - 其值由链接器/加载器修改。两个标签(在同一部分中)之间的差异是标量值,Nasm将使用它。
dd(mylabel - $$)| 0x80000000的
我修正了一个误解,即32位代码中的标签也是16位。
这是打算完成的是什么?
最佳, 弗兰克
答案 1 :(得分:0)
我的猜测是它是汇编程序的限制,因为nasm是一个双通道汇编程序,它有困难的是“代码的大小取决于在有问题的代码之后声明的符号的值。”
http://www.posix.nl/linuxassembly/nasmdochtml/nasmdoc3.html
第3.7节