【发布时间】:2015-02-21 16:40:27
【问题描述】:
我有一个 C++ 项目,我想在汇编中插入代码块。 我可以使用哪些解决方案? 我使用g ++和我的cpu的编译器是i5。
到目前为止我尝试过:
void f1(int a){
asm(
"mov edx,4"
);
}
............
编译时出现此错误:
error: unknown use of instruction mnemonic without a size suffix
我尝试了更多在 google 上找到的示例,但每个示例都给出了不同的错误。
EDIT2:
void f1(int a) {
int r = 0;
cout << "start";
__asm__(
"movl %edx,4;"
);
cout << r;
cout << a;
cout << "end";
}
int main(){
f1(2);
return 1;
}
构建成功但输出为空...不打印任何内容...但是如果删除 __asm_(..),则输出如下:“start02end”...为什么使用 asm 块不什么都不打印??
【问题讨论】:
-
这个问题似乎是题外话,因为 OP 肯定甚至没有尝试阅读任何文档。
-
试试 AT&T 语法,但你可能不会喜欢它。您也可以使用 YASM 或其他任何东西并单独组装一些代码,然后将其链接。
-
gcc内联汇编是一件复杂的事情。去阅读documentation,如果你有更具体的问题再回来。除了使用单独的 asm 模块之外,您还可以考虑内置矢量支持和内在函数(您没有说您想用 asm 代码做什么)。 PS:你可以使用-masm=intel切换到intel语法。
标签: assembly x86 g++ inline-assembly