3.匯編程序、c/c++程序間的相互調用
匯編程序、C程序及c++程序在相互調用時,特別應注意遵守相應的ATPCS規(guī)則。下面舉一些例子具體說明在這些混合調用中應注意遵守的ATPCS規(guī)則。
(1)C程序調用匯編程序
匯編程序的設計要遵守ATPCS規(guī)則,保證程序調用時參數的正確傳遞。在匯編程序中使用EXPORT偽指令聲明本程序,使得本程序可以被別的程序調用;在C語言中使用extern關鍵詞聲明該匯編程序。下面是一個C程序調用匯編程序的例子。其中,匯編程序strcopy實現字符串復制功能,C程序調用strcopy完成字符串的復制工作。
(2)匯編程序調用C程序
匯編程序的設計要遵守ATPCS規(guī)則,保證程序調用時參數的正確傳遞。在匯編程序中使用IMPORT偽指令聲明將要調用的C程序。下面是一個匯編程序調用C程序的例子。其中,在匯編程序中設置好參數的值,本例子中有5個參數,分別使用寄存器R0存放第1個參數,RI存放第2個參數,R2存放第3個參數,R3存放第4個參數,第5個參數利用數據棧傳送。由于利用數據棧傳遞參數,因此在程序調用結束后要調整數據棧指針。
(3)c++程序調用C程序
c++程序調用C程序時,在C程序中使用關鍵詞extern"C"聲明被調用的C程序。對于c++中的類或者結構,如果它沒有基類和虛函數,則相應對象的存儲結構和ARM C相同。下面的例子說明了這一點。
(4)匯編程序調用c++程序
在匯編程序中使用偽指令IMPORT聲明被調用的C++程序。在匯編程序中將參數存放在數據棧中,而存放參數的數據棧的單元地址放在R0寄存器中,這樣被調用的C++程序就能訪問相應的參數。下面的例子說明了這一點。
來源:ks990次





