一、簡介
二、基礎知識
對於c和組合語言的介面主要有兩個問題需要解決
1、呼叫者與被呼叫者的引數傳遞
正常的,定義乙個函式總是希望它完成某些功能,乙個毫無用處的函式將毫無意義。這些功能有常常是更大的功能的一部分,而函式完成這些功能或多或少都要與外界聯絡(乙個完全不與外界聯絡的函式也是乙個毫無意義的函式)(延時函式也要消耗時間,時間也屬於外界的一種資源),比如要傳遞一些資料給其處理,處理過後返回處理的結果。這種資料的傳遞可以形象的通過兩種方式來實現,第一種是外界直接把資料給函式,第二種是函式自己去外界取資料。
對於第一種:
這種資料傳遞通過堆疊完成,是一種隱性方式,隱含操作是:在執行呼叫時從呼叫程式參數列中的最後乙個引數開始 ,自動依次壓入堆疊;將所有引數壓入堆疊後,再自動將被呼叫程式執行結束後的返回位址 (斷點)壓入堆疊,以使被調程式結束後能返回主調程式的正確位置而繼續執行。
對於第二種:
對於第二種模型,必須開闢乙個公共的區域,呼叫者及被呼叫者都必須能訪問此區域。
2、說明和建立呼叫者與被呼叫者間的聯絡
為了建立呼叫與被呼叫模組間的連線關係,被呼叫的匯程式設計序應用global,說明其可被外部模組呼叫;而呼叫程式則應預先說明要引用的外部模組名。
參考:
http://三、例項
1、32位:linux彙編與c互相呼叫
2、內嵌彙編
內嵌彙編格式
四、常見問題
1、如下
linux at&t彙編錯誤:error: invalid instruction suffix for `push'解決方法:
go與c互相呼叫
此例子來自於go原始碼中,藉此來和大家分享一下兩者如何呼叫,網上很多文章語言不詳,也沒有乙個完整的測試例子 首先src 目錄下有 testcgowin目錄下 這裡的 obj目錄是cgo生成的 這裡需要展示的是go中如何呼叫c語言匯出函式,以及在c語言中如何呼叫go的匯出函式.關鍵是cthread.g...
go與c互相呼叫
此例子來自於go原始碼中,藉此來和大家分享一下兩者如何呼叫,網上很多文章語言不詳,也沒有乙個完整的測試例子 首先src 目錄下有 testcgowin目錄下 這裡的 obj目錄是cgo生成的 這裡需要展示的是go中如何呼叫c語言匯出函式,以及在c語言中如何呼叫go的匯出函式.關鍵是cthread.g...
python與C 的互相呼叫
python與c 的互相呼叫 一 c 呼叫python 新建乙個專案,新增引用 ironpython.dll,microsoft.scripting.dll 在ironpython的安裝目錄中 建立乙個文字檔案命名為hello.py,把該檔案新增的當前的專案中,並設定為總是輸出。hello.py d...