1、1,無論是Keil工具還是ADS工具,都有一段入口匯編代碼,一般叫start.s。這取決于你這個(gè)程序的Project設(shè)置,自己去找找。2,你一定要找到這個(gè)入口匯編代碼的文件,然后把你的匯編函數(shù)添加到末尾。
創(chuàng)新互聯(lián)建站-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比赤城網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式赤城網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋赤城地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
2、用C語言寫的ARM程序調(diào)用C函數(shù)和普通的C語言格式一樣,沒有特殊的地方;如果用C語言調(diào)用ARM的匯編,則有規(guī)則。在C程序和ARM匯編程序之間相互調(diào)用時(shí)必須遵守ATPCS(ARM-THUMB procedure call standard )規(guī)則。
3、STR lr, [sp, #-4]! 是將lr寄存器也稱鏈接寄存器r14(用于保存子程序的返回地址)的值(32位)存入sp指向堆棧的地址,從sp到sp-3地址單元。
4、段定義前加 PRESERVE8 偽指令試一下。前兩天剛好看到 ARM UCOS 匯編代碼中用到PRESERVE8這個(gè)關(guān)鍵字(加在段定義之前),以前沒見過的,于是百度。匯編代碼沒有保持8字節(jié)棧對齊而調(diào)用C或C++代碼。
5、匯編跳至C語言代碼執(zhí)行,自動(dòng)調(diào)用R0,R1等來傳遞參數(shù),比如R0傳遞給a,R1傳遞給b,以此類推。返回時(shí)自動(dòng)用R0傳遞返回值。
論C和匯編的混合編程,包括相互之間的函數(shù)調(diào)用。下面分四種 情況來進(jìn)行討論,暫不涉及C++。
一般用的少,在ARM上編程經(jīng)常會(huì)用到 把求和1+2+3+、、、+100寫成一個(gè)C語言函數(shù),然后保存到頭文件里 在匯編包含C的頭文件文件,然后在匯編中需要的地方就可以調(diào)用函數(shù)了,調(diào)用方法跟調(diào)用 匯編函數(shù)一樣。
實(shí)在不會(huì)的話,先用C寫出來,然后再匯編調(diào)試界面看看匯編代碼,不是很難。
經(jīng)過這兩天靠自己不斷的摸索,終于掌握了如何在編譯環(huán)境中進(jìn)行ARM編程,另外,還學(xué)會(huì)了在c中調(diào)用匯編程序的方法,以及如何通過linux自帶的gcc編譯嵌有匯編的c程序,總之,收獲還是蠻多的哦,下面就總結(jié)一下吧。
C程序調(diào)用匯編程序 匯編程序的設(shè)計(jì)要遵守ATPCS(ARM—Thumb Procedure Call Standard),保證程序調(diào)用時(shí)參數(shù)的正確傳遞。在匯編程序中使用EXPORT 偽操作聲明本程序,使得本程序可以被別的程序調(diào)用。
為了建立調(diào)用與被調(diào)用模塊間的連接關(guān)系,被調(diào)用的匯編程序應(yīng)用global,說明其可被外部模塊調(diào)用;而調(diào)用程序則應(yīng)預(yù)先說明要引用的外部模塊名。下面通過我的例子進(jìn)行說明,該例是C調(diào)用add0的匯編子程序。
在C程序和ARM匯編程序之間相互調(diào)用時(shí)必須遵守ATPCS(ARM-THUMB procedure call standard )規(guī)則。
傳遞參數(shù)很簡單,如果ax里放的就是參數(shù),那么push ax,然后再調(diào)用就可以。返回值如果我沒有記錯(cuò)的話應(yīng)該在AX里。如果返回值太長,就會(huì)放到堆棧里。你想搞清楚如果跨語言編程,最好徹底明白C語言的機(jī)制。
為什么不使用BL來調(diào)用C函數(shù)?因?yàn)閎l 指令跳轉(zhuǎn)范圍有限(好像4M左右吧),但bl指令可以將返回地址保存在lr中,當(dāng)然,如果你的跳轉(zhuǎn)范圍不大,也可使用BL,則不需要ldr lr, =int_return 。
然后把你的匯編函數(shù)添加到末尾。3,入口匯編代碼中要找到跳轉(zhuǎn)到C程序入口的那條跳轉(zhuǎn)語句。C程序的入口調(diào)用一般在ADS里是: B __main 這樣的一句匯編。把這句改成B callsum5。
分享文章:arm匯編c語言函數(shù) arm匯編函數(shù)調(diào)用過程
標(biāo)題路徑:http://m.kartarina.com/article26/decpscg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、電子商務(wù)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站制作、
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)