GCC内联程序集错误:无法识别块程序集操作数
GCC inline assembly error: block assembly operand not recognized
我在尝试使用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编译器集合"以获取文档。
相关文章:
- 内联程序集printf将整数解释为地址
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 具有外部"c"和程序集的未定义函数
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- CoreCLR 中的检测探查器 - 将帮助程序程序集加载到 dotnet 进程的方法
- 不同于按值传递和常量引用传递的程序集
- 为什么在堆栈和堆上创建变量会产生相同的程序集代码?
- C++变量在调用 x64 程序集函数后重置为 0
- 如何将C++子例程链接到 x86 程序集程序?
- Qt 网页程序集缓存
- 测试操作系统时执行程序集"sti"时虚拟框崩溃
- 为什么从 constexpr 引用生成的程序集代码与从 constexpr 指针生成的程序集代码不同?
- 将内联程序集尾调用函数尾声替换为用于x86/x64 msvc的Intrinsics
- 解析 C# 中的C++程序集
- 64 位进程中的 AnyCPU C# DLL 无法引用 64 位C++ DLL(给出错误:无法加载文件或程序集)
- 使用CLANG内联程序集创建C++预增量操作
- 是否可以在C++中基于程序集输出(.dll或.exe)定义变量
- 用于比较基元类型的std::可选的有趣程序集
- GCC内联程序集错误:无法识别块程序集操作数