我想重用我的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