GCC警告:非pic寻址形式不适用于pin码

时间:2011-06-01 12:44:24

标签: visual-c++ gcc assembly inline-assembly

以下代码在 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 :(得分:0)

GCC试图告诉您[dataMask + ecx * 2]不是有效的寻址模式。这是由于PIC的本质:它是一个RISC,并且您正在使用CISC语法编写RISC代码,而不是IMO的好主意。基本上,x86有一种更完整(和复杂)的指令集,而PIC的指令集并没有那么扩展。我现在很累,但我希望我很清楚;)