変数のアドレスを取得し、4096(メモリページのアドレスに対応する)のアドレスを取得したいとします。中のx86アセンブラの結果と、このファイルをコンパイルしようとGnu AS式で '&'演算子を使用できません
.data
v: .zero 0x100
vpage: .long v & 0xfffff000
:これは私がこのようなものを(vは変数とv25ページは、そのページのアドレスが含まれている必要があります)やったオフラインで計算することができるものであるので、次のエラー:
test.S: Assembler messages:
test.S:3: Error: invalid sections for operation on `v' and `L0'
なぜGASはこれを計算しないのですか?今度は変わった部分があります: '&'を「+」で置き換えます。コードはコンパイルされ、アドレスはリンクの後で正しく計算されます。この行動の理由や解決方法についてのヒントは大歓迎です。
通常、バックエンドアセンブラとしてガスが使用されます。コンパイラはすでにすべての定数式を評価しています –
@Marcoその場合、私はNASMまたはYASMに切り替えることができると思います。 – Gnurou
重要な金額は:はい。または、コンパイラのインラインアセンブラを使用し、コンパイラに修正させます。 –