我想得到一個變量的地址並由4096(它對應於它的內存頁面的地址)來代替。由於這一點是可以離線我做了一件看起來像這樣(v是可變的,v第應當包含其頁面的地址)來計算:不能在Gnu AS表達式中使用'&'運算符
.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爲什麼拒絕計算這個值?現在奇怪的部分:用「+」代替'&',代碼將被編譯,地址甚至可以在鏈接後正確計算。任何暗示這種行爲的原因或如何解決這個問題都是非常受歡迎的。
氣體通常用作後端彙編程序。編譯器已經評估過所有常量表達式 – 2010-12-14 21:14:25
@Marco在這種情況下,我想我能做的最好的辦法是切換到NASM或YASM ... – Gnurou 2010-12-16 03:07:19
對於非平凡的數量:是的。或者使用編譯器內聯彙編器,並讓你的編譯器修復它。 – 2010-12-17 13:07:06