GCC内联程序集错误:无法识别块程序集操作数

GCC inline assembly error: block assembly operand not recognized

本文关键字:程序集 识别 操作数 错误 GCC      更新时间:2023-10-16

我在尝试使用Apple GCC 4.2.1编译时遇到另一个错误使用-fasm块参数(启用Intel风格汇编语法)在MSVC中工作的内联汇编代码:无法识别块汇编操作数,已使用但未定义标签"LASM$TYPE":

typedef struct _MyStruct
{
    int data;
    //...
}MyStruct;
void testAsm()
{
    MyStruct *pMyStruct = new MyStruct(); // Please not that I create an instance of MyStruct here only for the sake of simplicity
    _asm
    {
        mov edi, pMyStruct
        add edi, TYPE MyStruct // error: block assembly operand not recognized. label 'LASM$TYPE' used but not defined
        //...
    };
    delete pMyStruct;
}


如何解决此问题?

TYPE是MSVC特定的asm关键字。这里它只是指sizeof。我试图在网上找到一些gcc-asm块文档,但十分钟后就放弃了。尝试

add edi,sizeof(MyStruct)

以及变体。我没有苹果,所以我不能给你试用。

更新以回答评论中的问题:试试这个:

add edi,__offsetof(MyStruct,MyMember)

如果它不起作用,请参阅"使用GNU编译器集合"以获取文档。