NASM - 使用位标志扩展标签

时间:2010-12-05 18:16:02

标签: label nasm flags bit scalar

我需要设置一些标签地址/偏移的最高位。

我试过了:

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。

提前感谢您的帮助。

修改 我已经能够使用 + 而不是 | 。看起来像按位运算符不适用于标签。您如何看待,这是故意还是错误?

2 个答案:

答案 0 :(得分:1)

标签是可重定位的值 - 其值由链接器/加载器修改。两个标签(在同一部分中)之间的差异是标量值,Nasm将使用它。

dd(mylabel - $$)| 0x80000000的

我修正了一个误解,即32位代码中的标签也是16位。

这是打算完成的是什么?

最佳, 弗兰克

答案 1 :(得分:0)

我的猜测是它是汇编程序的限制,因为nasm是一个双通道汇编程序,它有困难的是“代码的大小取决于在有问题的代码之后声明的符号的值。”

http://www.posix.nl/linuxassembly/nasmdochtml/nasmdoc3.html

第3.7节