教授希望我們使用匯編代碼的程序的一部分程序,然後他希望我們從C程序中調用這個代碼,然後完成時,它跳回到C程序。我似乎無法找到任何文件。如果有問題,我正在使用使用68HC12的Dragon12板。這聽起來不像他希望我們使用內聯asm()函數。如何在CodeWarrior內的C文件中調用匯編代碼?
1
A
回答
1
可以撥打裝配只是定義在C任何正常功能(前提是你使用正確的調用約定)的函數,只要確定返回類型和參數匹配。例如,如果裝配的樣子:
extern int my_func();
// ...
int zero = my_func();
-1
找出調用你的函數的正確方法是最簡單的方法就是寫:
my_func:
; assembly code here
; some more assembly code
; etc.
xor ax, ax
ret
然後你可以在C如下叫它C語言中的函數具有相同的參數和返回值,在內部進行一些最小化的工作(訪問每個參數,填充結果值)並編譯爲彙編程序。確定你感興趣的每個操作是如何完成的,並且你已經設置好了。
0
的CodeWarrior開發套件10.5幫助菜單文檔介紹瞭如何從C調用純彙編語言函數/ C++代碼如下:
在裝配文件中定義的標籤具有局部範圍。要從其他文件(.c文件)訪問它們,它們應該標記爲全局。例如,.global _my_asm_func
。
爲了說明,這裏是一個例子的代碼片斷:
.global _my_asm_func
.text
_my_asm_func:
subq.l #4,a7
move.l d1,(a7)
add.l (a7),d0
addq.l #4,a7
rts
在您的C/C++代碼,首先聲明爲函數的原型。例如,int my_asm_func(int a, int b);
。然後像任何其他C/C++函數一樣調用該函數。例如,my_asm_func(5, 2);
。
注意,在彙編代碼,該函數的前綴以下劃線,但在C/C++事實並非如此。我不確定這是必需的,還是隻是約定。
參數傳遞到連續的數據寄存器。在這種情況下,您會發現5
在D0
和2
在D1
。
0
很久以前的問題,但答案可能仍然有幫助。
對於Kinetis微控制器和gcc, 也許下面的代碼片段可能說明了一個可能性。 (這是我的錯誤處理程序的一部分) 的下面,「PE_ISR」中斷使用內聯彙編程序調用FaultHandlerAsm 功能,這反過來也是內聯彙編。 最後,它分支到一個c函數「faultHandlerC」,這不包括在這裏。
void FaultHandlerAsm(void)
{
__asm volatile (
" movs r0,#4 \n"
" movs r1, lr \n"
" tst r0, r1 \n"
" beq _MSP \n"
" mrs r0, psp \n"
" b _HALT \n"
"_MSP: \n"
" mrs r0, msp \n"
"_HALT: \n"
" ldr r1,[r0,#20] \n"
" b FaultHandlerC \n"
//" bkpt #0 \n"
);
}
PE_ISR(Cpu_INT_Hard_FaultInterrupt)
{
__asm( " b FaultHandlerAsm \n");
}
相關問題
- 1. 如何在C++內聯彙編代碼中使用字符串?
- 2. 如何編寫從彙編代碼調用的C函數
- 3. 用C++替換內聯彙編代碼
- 4. 使用as88彙編器從彙編代碼調用C函數
- 5. C++代碼中的彙編代碼
- 6. C++彙編代碼
- 7. 彙編代碼C
- 8. C代碼如何調用匯編代碼(例如,優化的strlen)?
- 9. GCC C++和內聯彙編代碼?
- 10. substring - c內聯彙編代碼
- 11. 彙編&C - 翻譯C'S代碼彙編
- 12. 如何使用C代碼內聯彙編工作?
- 13. 寫彙編代碼的C++
- 14. 從文檔文件在Turbo C++ 3.0中創建內聯彙編代碼(TASM)
- 15. 在gcc編譯時如何在C++的彙編代碼中使用C變量?
- 16. 內聯彙編代碼無法在Visual C++ 2010 Express中編譯
- 17. C++代碼片段的彙編代碼
- 18. 使用gcc編譯C文件以獲得x86彙編代碼
- 19. 在c中執行彙編代碼
- 20. 如何從內核模塊(* .c)生成彙編代碼(* .s)文件?
- 21. 調試反彙編代碼
- 22. C#在內存彙編到DLL文件
- 23. %c在GCC內聯彙編代碼中的含義是什麼?
- 24. 從keil ide的c源代碼中調用匯編例程
- 25. 從c反彙編代碼#
- 26. C代碼到MIPS彙編
- 27. C代碼MIPS彙編
- 28. 從linux中的C文件生成彙編代碼
- 29. 彙編代碼到C代碼
- 30. 從C#代碼生成彙編代碼?
聽起來好像他希望你編寫彙編代碼來爲你的平臺使用C調用約定,這樣你就可以在C程序中聲明它爲外部函數。 – Neil 2013-03-02 19:59:18
關於這個問題有一個很好的技術說明,你應該在你的Codewarrior安裝的某個地方把它作爲pdf。否則,請在飛思卡爾網站上搜索它。 – Lundin 2013-03-07 13:35:33