組合語言是怎麼呼叫c語言的程式的

時間 2021-09-13 18:13:54

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...