【发布时间】:2017-07-25 01:55:38
【问题描述】:
我正在尝试在我的 C 项目中重用一些汇编代码。假设我有一系列指令,我想将它们组织成一个函数:
void foo() {
__asm__ (
"mov %eax, %ebx"
"push %eax"
...
);
}
然而,一个障碍是在函数foo的编译后的汇编代码中,除了内联汇编代码之外,编译器还会为这个函数生成一些序言指令,整个汇编程序会变成这样:
foo:
push %ebp <---- routine code generated by compilers
mov %ebp, %esp <---- routine code generated by compilers
mov %eax, %ebx
push %eax
鉴于我的使用场景,这样的例程代码实际上破坏了内联程序集的原始语义。
所以这是我的问题,有什么方法可以阻止编译器生成那些函数序言和结尾指令,并且只包含内联的汇编代码?
【问题讨论】:
-
不,你不能那样使用内联汇编。只需在您的 C 项目中使用普通汇编,这样就不会生成额外的指令。
-
最好在汇编文件中创建函数,单独汇编,然后将汇编对象链接到您的C文件。话虽如此,您可以按照您的要求进行操作。关于以这种方式编写中断处理程序的相关问题有一个couple of answers。您可以对您打算完全用汇编编写的任何 C 函数执行此操作。我强烈推荐单独的程序集文件。
-
@old_timer:用汇编代码(或至少部分函数)编写裸 C 函数有时很有用。但是,我同意,这不是初学者(或不是 RTM 的人)应该使用的任何东西,而且对于所有以这种方式编写的代码来说绝对没有任何意义..
-
如果您打算在汇编中编写多个函数,这看起来像一个 XY 问题。
标签: c gcc x86 inline-assembly