我想重用我的C项目中一些汇编代码的函数体。假设我有一个指令序列,我想组织他们作为一个函数:GCC汇编内联:与只有内联汇编代码
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_文件。有人说这是可能做你在问什么。有一个[几个答案](https://stackoverflow.com/q/43310704/3857942)涉及到用这种方式写入中断处理程序的相关问题。您可以对任何您打算完全用汇编写入的_C_函数执行此操作。我强烈**推荐单独的程序集文件。 –
@old_timer:有时用汇编代码(或至少是函数的一部分)编写裸C函数是有用的。我同意,但是,这是什么初学者(或某人不RTM)应该使用和明确什么对所有的代码要写入的方式.. – Olaf