李現路SP6000中C/C++語言和匯編語言的混合編程的方法 Post By:2009-11-24 0:11:48 李現路SP6000中C/C++語言和匯編語言的混合編程的方法 一、混合編程的方法主要有以下幾種: (1)獨立編寫C語言程序和匯編程序,分別編譯形成各自的目標代碼塊, 然后用連接器將兩種模塊連接起來。 (2)直接在C/C++程序中嵌入匯編語句塊。 (3)對C/C++程序進行編譯生成相應的匯編程序,手工對生成的匯編程序進行修改。 (4)在C/C++程序中使用匯編語言的變量、常數、函數。 完整版本請見http://www.51qianru.cn/bbs/ 二、常用混合編程主要有下面兩種: 1、直接在C/C++程序中嵌入匯編語句塊: 例如在C/C++程序中嵌入以下匯編代碼: asm("STR: .string\"abs\""); 注意:不要把匯編代碼加到C/C++太復雜的結構里 2、在C/C++程序中使用匯編語言的變量、常數、函數 (1)在C/C++的函數中調用匯編函數: 1)在C/C++中所做工作 extern int asmfunc(int a); int gvar=4; void main() { int i; i=asmfunc(gvar); i=i+1; } 2) 匯編里的處理 .global _asmfuc .global _gvar _asmfunc: (2)在c/C++程序中訪問匯編語言中的變量 第一種情況:在C/C++程序中訪問.bss段中定義的變量 1)匯編: .bss _var1,4 .global _var1 2)在C/C++中作的工作: extern int var1; 第二種情況:在C/C++程序里訪問沒有定義在.bss段中定義的變量 1)匯編里要作的工作 .global _sine .sect "sine_tab" _sine: .float 0.0 .float 0.124554 .float 0.99882 .float 0.45231 首先要在匯編程序里定義一個數據表,將該數據表放到一個自己定義的段中,然后 定義一個全局指針變量,并將該指針變量指向數據表的首個地址。 2)在C/C++ 中要做的工作: extern float sine[]; float sine_p=sine; f=sine_p[4]; 需要定義一C/C++的指針變量,該指針變量和匯編中的全局變量可以進行數據讀取。 (3)在C/C++程序中訪問匯編語言中的常量: (1)匯編程序中的做法: _tablesize .set 1000 .global _table_size (2) C/C++程序中要做的工作: extern int table_size; #define TABLE_SIZE ((int)(&table_size)); ........ for(i=0;i 完整版本請見http://www.51qianru.cn/bbs/ 曙海教育 曙海嵌入式學院 (課程SP培訓,FPGA培訓,MTK培訓,Android培訓,iPhone培訓) 電話:021-51875830 網址:http://www.51qianru.cn 講師:李現路 -----版權所有-曙海教育 轉摘請注明作者和出處 課程有: pads培訓 pads培訓 高速板PCB培訓 PADS Power PCB培訓 MTK java MTK6225 手機開發(fā)板 Mtk平臺源代碼 |