1樓:匿名使用者
用彙編呼叫c函式,比較簡單一點。
把c程式編譯成obj。
在組合語言呼叫c函式之前,這樣宣告一下:
extrn ***x:far(其中***x是c寫的函式,依據實際情況,可能要加乙個前導下劃線,寫成_***x:far)
然後call就可以了,很好用
鏈結時和c的obj一起鏈結
很簡單的,你不妨試試
2樓:韌勁
一、 引數傳遞的基本規則(atpcs(arm—thumb procedure call standard))
1、 引數傳遞
二、匯程式設計序、c程式相互呼叫舉例
1、 c程式呼叫匯程式設計序
匯程式設計序的設計要遵守atpcs(arm—thumb procedure call standard),保證程式呼叫時引數的正確傳遞。在匯程式設計序中使用export 偽操作宣告本程式,使得本程式可以被別的程式呼叫。在c程式使用extern宣告該匯程式設計序。
下面是乙個c程式呼叫匯程式設計序的例子。其中匯程式設計序strcopy實現字串複製功能,c程式呼叫strcopy完成字串複製的工作。
//c程式
#include
extern void strcopy(char *d, const char *s);
int main( )
;匯程式設計序
area scopy, code, readonly
export strcopy
strcopy
ldrb r2, [r1], #1
strb r2, [r0], #1
cmpr2,#0
bne strcopy
mov pc, lr
end2、 匯程式設計序呼叫c程式
匯程式設計序的設計要遵守atpcs,保證程式呼叫時引數的正確傳遞。在匯程式設計序中使用import偽操作宣告將要呼叫的c程式。下面是乙個匯程式設計序呼叫c程式的例子。
其中在匯程式設計序中設定好各引數的值。本例中有6個引數,分別使用暫存器r0存放第1個引數,
r1存放第2個引數, r2存放第3個引數, r3存放第4個引數, 第5個、第6個引數利用資料棧傳送。由於利用資料棧傳遞引數,在程式呼叫結束後要調整資料棧指標。
//c程式g( )返回6個引數的和
int g( int a, int b, int c, int d, int e, int f )
; 匯程式設計序呼叫c程式 g( ) 計算6個整數 i, 2*i, 3*i, 4*i, 5*i, 6*i的和
export f
area f ,code, readonly
import g
mov r0, #1
add r1, r0, r0
add r2, r1, r0
add r3, r2, r0
add r4, r3, r0
add r5, r4, r0
str r4, [sp, #-4]!
str r5, [sp, #-4]!
bl g
add sp, sp, #4
add sp, sp, #4
stop b stopend
3樓:海獅
c語言需要執行環境,需要初始化暫存器等。
直接呼叫是不行的
C語言指標建立函式問題,C語言指標呼叫函式問題,急求解釋(本題是《c和指標》上的題目)
第乙個表示傳遞graphadjlist型別的引用g,第二個表示傳遞graphadjlist型別的指標g 另外這是c 不是c。c語言指標呼叫函式問題,急求解釋 本題是 c和指標 上的題目 c語言指標作函式引數時的返回問題 首先,弄懂函式引數都是靠值傳遞。指標也是。進入函式後,函式建立幾個空間給形參,再...
c語言函式呼叫引數傳遞的是什麼,C語言函式呼叫引數傳遞的是什麼
c語言傳遞的是值而不是位址,這一點從vb轉過來的程式設計師一定要注意。否則不經意間就會犯錯誤。另外下層函式修改上層函式變數不是一種好習慣,容易引發錯誤。c語言中函式可以返回乙個函式值,如果你需要返回多個函式值可以用下面的形式 fun int a,int b main 如果按vb的習慣,fun int...
C語言函式呼叫的問題
主函式的a作為輸入引數輸入給函式aaa進行計算,計算後a的值不發生變化。這是c語言的基本規則。從編譯原理角度講,輸入aaa的只是a的值,並不是a所在的暫存器或位址,a的值輸入aaa後,該值被存放在另乙個臨時暫存器或位址,發生改變的是這個臨時暫存器或位址的值,而非a所在的暫存器或位址的值,所以,a的值...