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