変数のアドレスを取得し、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はこれを計算することを拒否するのでしょうか? 奇妙な部分:「&」を「+」に置き換えると、コードがコンパイルされ、リンク後にアドレスが正しく計算されます。この動作の理由や修正方法についてのヒントは大歓迎です。