ラベルアドレス/オフセットの最上位ビットを設定する必要があります。NASM - ビットフラグでラベルを拡張する
は、私が試した:
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を使用しています。
ご協力いただきありがとうございます。
EDIT: は、私が使用することができました+の代わり|。あたかもビット演算子がラベル上で動作しないかのように見えます。あなたは何を考えているのですか?これは目的かバグでしょうか?
dwは、ファイルの先頭からmylabel-labelのオフセット(16ビット値として)を格納することになっていますが、いくつかのフラグを付けて拡張する必要があります。私はwine(PE)ファイル/イメージの.relocセクションを手作業で書いています。 – masterxilo