程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Linux匯編與C互相調用,Linux匯編調用

Linux匯編與C互相調用,Linux匯編調用

編輯:關於C語言

Linux匯編與C互相調用,Linux匯編調用


一、簡介

C語言調用匯編有兩種方式:1、通過內嵌匯編  2、通過編譯鏈接。

 

二、基礎知識

對於C和匯編語言的接口主要有兩個問題需要解決

1、調用者與被調用者的參數傳遞

正常的,定義一個函數總是希望它完成某些功能,一個毫無用處的函數將毫無意義。這些功能有常常是更大的功能的一部分,而函數完成這些功能或多或少都要與外界聯系(一個完全不與外界聯系的函數也是一個毫無意義的函數)(延時函數也要消耗時間,時間也屬於外界的一種資源),比如要傳遞一些數據給其處理,處理過後返回處理的結果。這種數據的傳遞可以形象的通過兩種方式來實現,第一種是外界直接把數據給函數,第二種是函數自己去外界取數據。

對於第一種:

這種數據傳遞通過堆棧完成,是一種隱性方式,隱含操作是:在執行調用時從調用程序參數表中的最後一個參數開始 ,自動依次壓入堆棧;將所有參數壓入堆棧後,再自動將被調用程序執行結束後的返回地址 (斷點)壓入堆棧,以使被調程序結束後能返回主調程序的正確位置而繼續執行。

對於第二種:

對於第二種模型,必須開辟一個公共的區域,調用者及被調用者都必須能訪問此區域。

 

2、說明和建立調用者與被調用者間的聯系

為了建立調用與被調用模塊間的連接關系,被調用的匯編程序應用global,說明其可被外部模塊調用;而調用程序則應預先說明要引用的外部模塊名。

 

參考:

http://blog.chinaunix.net/uid-20797642-id-2495231.html
http://www.cnblogs.com/shenlian/archive/2011/05/17/2049441.html

 

三、實例

1、32位:Linux匯編與C互相調用

http://www.linuxidc.com/Linux/2012-07/65757.htm

 

四、常見問題

1、如下

Linux AT&T匯編錯誤:Error: invalid instruction suffix for `push'

解決方法:

http://www.2cto.com/os/201310/253276.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved