Предупреждение GCC: адресная форма, отличная от картинки, не подходит для кода с картинкой - PullRequest
0 голосов
/ 01 июня 2011

Следующий код прекрасно компилируется в MSVC , но GCC выдает предупреждение, которое действительно меня выводит из строя: Форма адресации не-pic не подходит для кода 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]
        //...
    };
}

1 Ответ

0 голосов
/ 02 июня 2011

GCC пытается сообщить вам, что [dataMask + ecx * 2] не является допустимым режимом адресации.Это связано с природой PIC: это RISC, и вы пишете код RISC с синтаксисом CISC, а это не очень хорошая идея IMO.По сути, x86 имеет более полный (и сложный) набор инструкций, в то время как PIC не так уж и расширен.Я сейчас очень устал, но надеюсь, я был чист;)

...