1樓:育知同創教育
一、 引數傳遞的基本規則(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
2樓:物理公司的
彙編程式呼叫c程式。
彙編程式的設定要遵循atpcs規則,保證程式呼叫時引數的正確傳遞。彙編程式呼叫c程式的方法如下:
在彙編程式中使用import偽指令宣告將要呼叫的c程式函式;
在呼叫c程式時,要正確設定入口引數,然後使用bl指令呼叫
如何在彙編呼叫c語言函式?
3樓:匿名使用者
用匯編呼叫c函式,比較簡單一點。
把c程式編譯成obj。
在組合語言呼叫c函式之前,這樣宣告一下:
extrn ***x:far(其中***x是c寫的函式,依據實際情況,可能要加一個前導下劃線,寫成_***x:far)
然後call就可以了,很好用
連結時和c的obj一起連結
很簡單的,你不妨試試
4樓:韌勁
一、 引數傳遞的基本規則(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
5樓:海獅
c語言需要執行環境,需要初始化暫存器等。
直接呼叫是不行的
組合語言程式題目請教求高人解答,組合語言程式的一道題。求高手解答!!!
萬世流香 1data segment src db how are you?des db are data ends stack segment stack db 200 dup 0 stack ends code segment assume cs code,ds data,ss stacksta...
什麼是組合語言,什麼是彙編和組合語言?
叢依波弘瀾 組合語言 assembly language 是面向機器的程式設計語言。在彙編語閤中,用助記符 memoni 代替操作碼,用地址符號 symbol 或標號 label 代替地址媽。這樣用符號代替機器語盲的二進位制碼,就把機器語音變成了組合語言。於是組合語言亦稱為符號語言。使用組合語言編寫...
微機原理組合語言的程式
衛生一報 除錯時需要把中文標點符號改為英文標點符號,否則會出現out of memory的提示資訊 data segment 定義資料段 adr db 10,31,45,67,80,46,0,31,0,77 num equ adr num是資料個數da1 db 0 da1用來存放正數的個數,初值為0...