【发布时间】:2017-08-20 13:28:33
【问题描述】:
如何在 asm() 中编写多个汇编语句而不使用 GCC 分隔每一行?
我见过一些教科书在asm() 中写了多个汇编语句:
asm("
movl $4, %eax
movl $2, %ebx
addl %eax, %ebx
...
");
但是,我的编译器 (GCC) 无法识别此语法。相反,我必须依靠"\t\n" 分隔每一行或使用多个asm():
asm(
"movl $4, %eax\t\n"
"movl $2, %ebx\t\n"
"addl %eax, %ebx\t\n"
...);
或
asm("movl $4, %eax");
asm("movl $2, %ebx");
asm("addl %eax, %ebx");
...
如何启用没有"\t\n" 或重复asm() 的“干净”语法?
【问题讨论】:
-
你的问题是什么?带有换行符的语法是“干净的”。不知道你为什么使用标签。无论如何如果不可避免,应谨慎使用内联汇编,并且仅用于短 sn-ps。
-
我认为正确的解决方案是不一开始就使用内联汇编。 :)
-
解决方法很简单:使用单独的程序集文件。
-
您为什么不直接编写清晰、可维护的 C++ 并让编译器担心 asm?除非你正在做一些真的低级别的事情或优化一个真的关键功能(并且真的知道你在做什么),否则编译器可能会反正写得比你好。
-
什么样的建议是'你不应该写汇编程序'?天哪,这里没有人做过实验吗?
标签: c gcc assembly x86 inline-assembly