《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技术 > 解决方案 > ARM汇编语言子程序调用及返回

ARM汇编语言子程序调用及返回

2017-06-22
關(guān)鍵詞: 汇编语言

在ARM匯編語言中,子程序調(diào)用是通過BL指令來完成的。BL指令的語法格式如下:

BL          subname

其中:subname是被調(diào)用的子程序的名稱。BL指令完成2個(gè)操作,即將子程序的返回地址放在LR寄存器中,同時(shí)將PC寄存器值設(shè)置成目標(biāo)子程序的第一條指令地址。

在返回調(diào)用子程序時(shí),轉(zhuǎn)移鏈接指令保存到LR寄存器中的值需要拷貝回程序寄存器PC。對于最簡單的子程序,一條MOV指令就可完成子程序的返回,例如:

SUB2      …

              MOV             PC,R14               ;把R14拷貝到R15來返回

其實(shí),任何數(shù)據(jù)處理指令都可用來計(jì)算返回地址,但是MOV指令時(shí)至今最常見的形式。碎玉在子程序中出現(xiàn)嵌套調(diào)用時(shí),鏈接寄存器LR中的返回地址可能會在第二次調(diào)用時(shí)被覆蓋,所以需要將返回地址壓入堆棧來進(jìn)行保存。在子程序返回時(shí),返回地址和保存的工作寄存器都可用多寄存器存取指令恢復(fù)。例如:

       SUB1             STMFD          R13!,{R0-R2,R14}            ;保存工作寄存器和鏈接

                            BL                 SUB2

                                   …

                            LDMFD         R13!,{R0-R2,PC}              ;恢復(fù)工作寄存器并返回

需要注意的是,返回地址是直接恢復(fù)到程序計(jì)數(shù)器PC,而不是鏈接寄存器LR。這種單元恢復(fù)和返回指令是非常有用的。

下面是一個(gè)子程序調(diào)用的簡單例子。子程序DOADD完成加法運(yùn)算,操作數(shù)放在R0和R1寄存器中,結(jié)果放在R0中。

AREA     EXAMPLE,CODE,READONLY

              ENTRY

Start              MOV             R0,#10               ;設(shè)置輸入?yún)?shù)R0

              MOV             R1,#3                 ;設(shè)置輸入?yún)?shù)R1

              BL                 Doadd                   ;調(diào)用子程序Doadd

                     …

Doadd     ADD              R0,R0,R1         ;子程序

              MOV             PC,LR                ;從子程序中返回

END                                                        ;結(jié)束匯編


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 91av在线国产| 亚洲制服欧美久久| 91免费欧美精品| 国产精品永久在线| 亚洲最新免费视频| 免费看又黄又无码的网站| 亚洲v国产v| 韩国一区二区av| 国产精品热视频| 日韩中文字幕视频| 9a蜜桃久久久久久免费| 天天人人精品| 精品人妻一区二区三区四区在线| 日韩aⅴ视频一区二区三区 | 中文字幕精品一区日韩| 国产精品天天狠天天看| 国产一区二区在线免费视频v| 欧美一区二区视频97| 亚洲国产日韩美| av中文字幕av| 91国产在线免费观看| 91禁国产网站| 性欧美精品一区二区三区在线播放V| 91精品视频在线免费观看| 亚洲综合国产精品| 亚洲精品欧美精品| 色av中文字幕一区| 热久久这里只有| 日本一区二区三区视频在线观看 | 欧美综合激情| 日韩在线观看你懂的| 视频一区亚洲| 日本一区免费看| 久久久久久综合网天天| 久久久久久欧美| 黄色国产精品一区二区三区| 国产一区精品在线| 国产精品美腿一区在线看| 99久久99| 日韩精品 欧美| 九九久久九九久久|