2010-12-05 4 views
1

ラベルアドレス/オフセットの最上位ビットを設定する必要があります。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: は、私が使用することができました+の代わり|。あたかもビット演算子がラベル上で動作しないかのように見えます。あなたは何を考えているのですか?これは目的かバグでしょうか?

答えて

1

ラベル再配置可能な値である - その値はリンカー/ローダによって修正されます。 2つのラベルの違い(同じセクション内)はスカラー値であり、Nasmはそれに対応します。

dd(mylabel - $$)| 0x80000000

私は、32ビットコードのラベルもyaの16ビットという誤解を修正しました。

これは何を達成するためのものですか? 、

ベスト フランク

+0

dwは、ファイルの先頭からmylabel-labelのオフセット(16ビット値として)を格納することになっていますが、いくつかのフラグを付けて拡張する必要があります。私はwine(PE)ファイル/イメージの.relocセクションを手作業で書いています。 – masterxilo

関連する問題