2011-04-17 15 views
1

我想使用GCC内联汇编,Intel语法。如何在GCC内联汇编中使用未初始化的数据

是否有我在NASM做一个等价的:

myvar resb 1024 

其在位置myvar保留1024个字节的内存? GCC似乎不喜欢它:

Error: no such instruction: `myvar resb 1024' 

int main() { 
    asm("myvar resb 1024"); 
    return 0; 
} 

回答

2

如果你混合C和内联汇编你应该让C编译器处理内存分配。声明你的内存为char myvar[1024],并根据需要从内联汇编中引用它。您可以直接访问它,但最好将它作为参数传递给asm(),并让编译器为您选择寻址格式。

+0

那么这是否意味着即使我将自己的.s文件写入合适的区域,GCC也会忽略'resb's? – nh2 2011-04-17 22:11:15

+1

当你使用GCC时,你正在装配与NASM语法不同的GAS(你必须习惯使用'resb')。如果你把正确的命令(例如'.lcomm')放在正确的部分,GAS会为你预留空间。查看:http://www.ibm.com/developerworks/linux/library/l-gas-nasm/index.html。不过,我认为你最好在C中为混合代码做分配。 – 2011-04-17 23:22:10