關於C51與彙編的實用混合編程

最近研究了下51的混合編程,總結一下吧!

1.生成C51的彙編源碼

右鍵單擊項目文件,在彈出的opinion for file ....選擇上生成SRC文件,這個可以產生彙編源文件,也能允許在C51中嵌入A51,即彙編代碼,另外不知爲何在項目中若嵌入彙編需添加keil的C51S.LIB,否則下載到單片機後無法正常運行,至於具體原因,現在還不是很明白。

wKiom1Nh6CSjdCsFAAF8iEzgMk8575.jpg

2.查看SRC彙編文件

在項目文件中可以找到SRC文件,可查看所寫的C51代碼翻譯成彙編後的代碼,截取部分如圖所示,由於編譯器在編譯C文件時會加入較多的給彙編器的信息,比如會把函數名稱加以修改,如圖中的"?PR?_myfun?TEST"等,所以會比較信息雜亂,個人認爲,只要能夠找主要的信息即可,不必太過究其細節,如每個符號的具體含義等,因爲我們一般是在C中嵌入彙編。

wKioL1Nh6o3TPcuiAAIIGF20m0A822.jpg

3.C51中嵌入彙編

如圖所示,在C51中調用匯編子程序,可建立一個空函數,在內部用#pragma asm及#pragma endasm嵌入彙編程序,爲更好的掌握在程序編譯後的具體情況,我們可以查看SRC文件,整體觀察C文件在編譯成彙編後是否有問題。

wKioL1Nh6-KgCGy4AABLQH9tqlI897.jpg

4.51的鏈接清單

在項目文件生成M51文件是由鏈接器BL51.exe所生成清單文件,裏面有鏈接的信息,截取個人認爲比較重要的信息,即各模塊分佈情況,如圖中的"?PR?_myfun?TEST"的偏移地址爲002cH,當用燒錄器打開hex文件,便會發現在002cH的中16進制代碼,與彙編中的"?PR?_myfun?TEST"的代碼16進制相同。

wKiom1Nh7gPQYXMlAAG8ZHdbgDY352.jpg

6.擴展運用

通過以上方法,我們便可以獲得C文件在編譯後的信息,像其他文章中所講的混合編程,諸如參數傳遞約定等,其實我們完全可以去觀察C文件編譯後的彙編文件來獲得,對於其他需要共同使用的區域,諸如全局變量等,其實我們也可以去彙編文件觀察,這樣一來,我們便不用去記憶那些所謂的特殊約定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章