c與彙編的混合程式設計

2021-09-29 21:36:10 字數 916 閱讀 3789

場景1、c內嵌彙編

$vim main.c

#include

int main(int argc, char** ar**)

/*形式2*/

asm volatile ("mrc p14, 0, %0, c0, c1, 0" : "=r" (status));

c = a+b;

return 0;

}注:內嵌彙編的限制

1.匯程式設計序跳轉只能用b或bl指令,不能直接給pc暫存器賦值

2.在使用物理暫存器時不要使用複雜的c表示式,避免暫存器衝突

3.避免直接使用暫存器r0~r3,r12~r14;

因為在計算表示式時,r0~r3,r12,r14可能用於子程式呼叫;

而r12,r13可能被編譯器用來存放中間編譯結果。

場景2、c呼叫彙編

$vim func.s

export my_func

my_func

[彙編**塊]

$vim main.c

extern cahr my_func(char par1, char par2);

int main(int argc, char** ar**)

場景3、彙編呼叫c

$vim func.c

cahr my_func(char a, char b)

$vim init.s

import my_func

mov r0,#1   //傳參

mov r1,#2   //傳參

bl my_func  //跳轉

注:無論是c呼叫彙編還是彙編呼叫c,

函式傳參預設使用暫存器r0~r3,多於4個的引數使用棧,函式返回值放在暫存器r0

C語言與彙編混合程式設計

c語言是乙個系統級的語言,是乙個可以直接深入到硬體最底層操作的語言。在前邊的部分部落格中,我們提到過,對硬體的操作實際上是對硬體控制器中的暫存器或儲存單元進行操作,而在arm架構中,這些暫存器或儲存單元一般是以記憶體對映的方式進行訪問的。在c語言中,指標剛好提供了訪問任意的記憶體位址的方式,因此從語...

ARM彙編與C混合程式設計

內聯彙編即在c中直接使用彙編語句進行程式設計,使程式可以在c程式中實現c語言不能完成的一些工作,例如,在下面幾種情況中必須使用內聯彙編或嵌入型彙編 程式中使用飽和算術運算 saturating arithmetic 程式需要對協處理器進行操作 在c程式中完成對程式狀態暫存器的操作 asm volat...

C 彙編的混合程式設計

aptcs arm thumb 程式呼叫規範 pcs規定了應用程式的函式可以如何分開地寫,分開地編譯,最後將它們連線在一起,所以它實際上定義了一套有關過程 函式 呼叫者與被呼叫者之間的協議。協議規定 呼叫函式如何傳遞引數 即壓棧方法,以何種方式存放引數 被呼叫函式 如何獲取引數,以何種方式傳遞函式返...