2011-06-01 64 views
0

下面的代碼編譯在MSVC罰款,但GCC給出了一個警告,這真讓我心煩:非PIC處理形式不是suitible的PIC代碼GCC警告:非PIC處理形式不是suitible的PIC代碼

你能告訴我這個警告的原因,以及如果它確實是一個潛在的問題如何解決它?我正在使用-fasm-blocks編譯選項啓用intel風格程序集,加入-fpic參數沒有區別。

unsigned short dataMask[] = {0x0ffff, 0x07bef, 0x039e7, 0x018e3, 0x0861, 0x020, 0,0}; 

void test 
{ 
    _asm 
    { 
     xor  ecx, ecx // ecx == 0 
     //... 
     // value in ecx may change 
     //... 
     mov  bx, [dataMask + ecx * 2] 
     //... 
    }; 
} 
+0

「PIC代碼」?這就像「ATM機」或「PIN碼」?我期望從gcc bods中獲得更好的結果:-) – paxdiablo 2011-06-01 12:46:46

+1

PIC代碼意味着與位置無關的代碼,它需要在任何地址空間中正確執行指令。代碼在圖書館,所以我很擔心這個警告... – Ryan 2011-06-01 12:53:55

+2

@Ryan,我想你誤解了我的評論 - 'PIC'是'位置獨立代碼','PIC代碼',即'位置獨立代碼代碼「只是錯誤的,就像自動取款機或個人識別碼號碼一樣 - 爲我提供了一種奇怪的幽默感。 – paxdiablo 2011-06-01 13:10:59

回答

0

GCC試圖告訴你[dataMask + ecx * 2]不是有效的尋址模式。這是由於PIC的本質:它是一個RISC,並且您正在使用CISC語法編寫RISC代碼,這不是一個好主意IMO。基本上,x86有一種更完整(和複雜)的指令集方式,而PIC的方式則沒有那麼廣泛。我現在很累,但我希望我很清楚;)