keil匯編程序
A. 用keil軟體如何將匯編與C語言結合起來一起編寫單片機的程序
在混合編程中,最常用也是最實用的方法是在C語言中加入部分匯編語言的代碼,分為兩種方法。
方法1)在Keil C51的函數中直接插入匯編語句
方法2)按照Keil C51介面規則,編寫匯編模塊
方法1是利用編譯控制命令#pragma asm(用來標識所插入的匯編語句的起始位置) 和 #pragma endasm (用來標識所插入的匯編語句的結束位置) ,這兩條命令必須成對出現,並可以多次出現。在Keil C51中不對插入的匯編代碼做任何的處理。
方法2編寫匯編模塊,需對KEIL編譯器的編譯過程做些了解。Keil編譯器的編譯過程是首先將項目中的一個個源文件編譯為目標代碼(obj文件),然在再通過連接器產生為最終可執行的hex文件。
目標代碼將其中的代碼、數據、常量放在不同的「段」中,保存程序的段稱為「代碼段」,保存數據的段稱為「數據段」,最終目標代碼經過Keil的連接器按照「段」的要求轉換為程序和數據地址固定的可執行文件。
在Keil軟體中,「段」按定位屬性分為:「可重定位段」和「絕對段」。
「可重定位段」:程序和數據在其分別所對應的存儲單元(FLASH和RAM)中的存儲地址是浮動的、可重定義的、相對可變的。
「絕對段」:其地址在連接前就已確定不變,連接器據此為它分配地址。
經Keil編譯器生成的「段」具有如下屬性:
1)段的存儲屬性(program code data pdata xdata bdata bit等);
2)段的起始地址;3)段的長度;
4)段的定位要求:絕對段地址固定,可重定位段定位的要求如要求代碼段在2K范圍內,數據段定位在可位定址區等;
5)段名:包括程序和數據(變數和常量)的段的存儲屬性及段所屬的程序模塊(文件)。代碼段: ?PR? funcname?Filename
數據段如:?DT? funcname?Filename; ?BI? funcname?Filename
標准段名前綴列表
段前綴 存儲類型 含義
?PR? Program 程序存儲區的代碼
?CO? code 程序存儲區的常量
?BI? Bit 內部數據存儲區的可位定址的位變數
?BA? Bdata 內部數據存儲區的可位定址的位元組變數
?DT? Data 內部數據存儲區的變數
?ID? Idata 內部數據存儲區可間接定址的變數
?PD? Pdata 外部數據存儲區的頁變數
?XD? Xdata 外部數據存儲區的變數
B. keil查看匯編代碼
一種方法是在成功編譯程序後,點擊工具欄上一個紅色的"D",進入調試狀態,再把滑鼠點到c代碼處,右鍵查看匯編代碼,就可以看到所以c編譯後的匯編代碼了。
第二種方法可以產生匯編代碼文件,操作如圖,右鍵點開,選中"generateassemblerSRCfile"
C. 如何使用Keil編譯匯編程序或C語言程序
打開Keil後選擇【File】下的【new】新建一個空白文檔。將編輯好的程序源碼復制到該文件中。
如何使用Keil編譯匯編程序或C語言程序
選擇左上角的保存按鈕進行保存,將彈出保存對話框。
如何使用Keil編譯匯編程序或C語言程序
選擇保存路徑和編輯文件名。記住,這里的文件名很重要,如果你是C語言程序的話,加上.c後綴,如果你是用匯編語言,加上.ASM後綴。這樣,Keil就能自動識別你的文件類型了。
如何使用Keil編譯匯編程序或C語言程序
現在你就可以將保存的文件添加到項目中了,項目文件要提前在[Project]中新建。右擊選擇【Source Group1】點擊【Add Files to Group..】
如何使用Keil編譯匯編程序或C語言程序
在彈出的對話框中選擇[文件類型]為All files,這個很關鍵。然後選擇你要添加的文件。點擊Add添加。
如何使用Keil編譯匯編程序或C語言程序
在[Source Group]中就會顯示新添加的.ASM文件,按圖中選擇彈出【Option for Target】對話框。
如何使用Keil編譯匯編程序或C語言程序
7
切換到[output]選項卡選中【Create HEX FILE】,就可以在編譯成功後自動生成.hex文件。編譯按鈕在左上角3個按鈕,從左到右依次點擊,如果源碼沒錯,都可以編譯通過了。
如何使用Keil編譯匯編程序或C語言程序