在混合程式設計中,最常用也是最實用的方法是在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 外部資料儲存區的變數
在混合程式設計中,最常用也是最實用的方法是在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 外部資料儲存區的變數