匯編C語言混合編程經驗總結

電腦雜談  發布時間:2020-01-29 04:05:31  來源:網絡整理

c語言程序設計試題匯編_c語言程序設計試題匯編答案_c語言對應匯編語句

ARM匯編語言和C語言混合編程

ATPCS規災了一種模塊化設計的觀念,其基本內容是C模塊(函數)和匯編模塊(函數)相互的一套規?中還有類似的一套規暈腋芯諳呋惚喙δ芮看用有很多忌諱),廳知道(很寄幾它/p>

ATPCS規暫:

1)寄存乒用規譽

1、子程袖通過寄存苧3來釋放參數,當參數膏于4脯使用堆棧來釋放參數。此時r0~r3可記譇4。

2、在子程鞋使用寄存苧11保存局部變量。冶進行子程忻時應留意對這種寄存疲存和恢復。此時r4~r11可記譜8。

3、寄存樸糜詒4娑顏恢剛隨P,當子程胸時使用該寄存蘋,記祝

4、寄存樸米恢剛耄親<拇嫫稱為鏈接寄存魄祝該寄存期保存子程械回地址。

5、寄存瞥莆絳親Ⅻ/p>

2)堆棧的使用規譽

ATPCS規定堆棧采用滿遞紀(FD,Full Descending),即堆棧通過兼儲品而犀堆棧指針指犀有效數據項的最低地址。

3)參數的傳遞規譽

1、整數參數的前4該r0~r3傳遞,其他參數使用堆棧傳遞;浮點參數使用編號最小且無法滿足需要的一組連續的寄存戚參數。

2、子程械回結果為一富整數時,通過r0返回;返回結果為一富整數時,通過r0和r1返回;依此類推。結果為浮點數時,通過異或運算組件的寄存脾D0?返回。

比較有態最明白,我舉兩贛:

1.匯編置C子程衪rong>

匯編程虛寫要譚PCS規栽保證程忻時參數正確釋放。在匯編程諧絳椒ㄎ裹/p>

1)在匯編程泄用IMPORT偽指令粁tern事先聲錨的C語言函數;

2)通過BL指令來島Ⅻ/p>

c語言程序設計試題匯編答案_c語言程序設計試題匯編_c語言對應匯編語句

例如在一肝募卸ㄒ辶巳縵慮裹/p>

int add(int x,int y)

{

return(x+y);

}

礵d()函數的匯編程泄如下:

area main,code,readonly ;代碼段

entry ;聲泌

code32 ;32位ARM指令

IMPORT add 粁tern add;聲媚C函數

start

……

MOV r0,1

MOV r1,2

BL add ;島齛dd

……

end

當進行變量當,使用r0和r1實現參數傳遞,返回結果由r0帶回。函數滇束?的值成為3。

2.C置匯編子程衪rong>

c語言程序設計試題匯編答案_c語言程序設計試題匯編_c語言對應匯編語句

C程忻匯編程鞋匯編程虛寫也要譚PCS規栽保證程忻時參數正確釋放。在C程秀編子程薪法為:

1)在匯編程泄用EXPORT偽指令聲媚子程許示該子程洶其他文件中被袋/p>

2)在C程泄用extern關鍵字聲媚匯編子程銹部函數。

例如在一膏源文件中定義了如下鉗數:

EXPORT add ;聲米映絳煌獠亢/p>

……

add ;怯程宵/p>

.global add ;聲漫

ADD r0,r0,r1

MOV pc,lr

……

在一感ain()函數中對add匯編子程行了島

extern int add (int x,int y); //聲夢獠亢?/p>

void main(){

int a=1,b=2,c;

c=add(a,b); //礵d子程孝且隱式地對r0和r1賦值

……

}

當main()函數礵d匯編子程鞋變量a、b的值會給了r0和r1,返回結果由r0帶回,并賦值給函數c。函數滇束轟量c的值成為3。

c語言程序設計試題匯編_c語言程序設計試題匯編答案_c語言對應匯編語句

3、C程洶嵌匯編語句

在C語言中嵌入匯編語句可以實現一些高級語言不能實現換容易實現的功能。對于時間僥功能也可以借助在C語言中嵌入匯編語句來推動。內嵌的匯編浦粗ARM指令跟Thumb指令,但是不支持例如直接設置PC實現跳轉的底層功能c語言對應匯編語句,也不能直接引用C語言中的變量。

內嵌匯編:在C和C++語言中嵌入匯編語言可以推動一些高級語言中沒有的功能。

語法

__asm__( ;注意:前面是兩竡uo;_”

“instruction

...

instruction”

);//Linux gcc中支持

__asm{

instruction

...

instruction

}; //ADS中支持

asm(“instruction[; instruction]”); //ARM C++中使用

ARM內嵌匯編語法

asm(

匯編語句模板:

輸持:

c語言對應匯編語句_c語言程序設計試題匯編_c語言程序設計試題匯編答案

輸入部分:

修改部分

);

比如: asm("mov %0, %1, ror #1" :"=r" (result) : "r" (value));

共四鋼:匯編語句模板,輸持,輸入部分c語言對應匯編語句,破壞描手,鋼使用“:”脯匯編語句模板必不可少,其他三個別可選,如果使用了耗部分,而后面部分為空,也必須用“:”脯相應部分內容為空。例如:

__asm__ __volatile__(

"CLI":

:"memory"

);

示例:/* main.c */

void __main(void)

{

int var=0xAA;

__asm //內嵌匯編標識

{

MOV R1,var

CMP R1,#0xAA

}

while(1);

}


本文來自電腦雜談,轉載請注明本文網址:
http://www.gefhbj.live/a/jisuanjixue/article-138768-1.html

    相關閱讀
    發表評論  請自覺遵守互聯網相關的政策法規,嚴禁發布、暴力、反動的言論

    熱點圖片
    拼命載入中...
    少林宝藏100在线客服 宁夏十一选五走势图带连线 免费麻将下载安装 连码是什么意思 棋牌国际 天天麻将 幸运快三是不是国家的 湖北11选5结果l 辽宁三十五选七中奖规则 广东快乐十分 足彩比分推荐最准的 怎么选股票看些什么 买刮刮乐有中大奖的吗 北京麻将开挂 大庆五二麻将下载 山西快乐10分在哪里买 乐彩网3d字谜图谜