《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 解決方案 > ARM匯編語言子程序調用及返回

ARM匯編語言子程序調用及返回

2017-06-22
關鍵詞: 匯編語言

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

BL          subname

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

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

SUB2      …

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

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

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

                            BL                 SUB2

                                   …

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

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

下面是一個子程序調用的簡單例子。子程序DOADD完成加法運算,操作數放在R0和R1寄存器中,結果放在R0中。

AREA     EXAMPLE,CODE,READONLY

              ENTRY

Start              MOV             R0,#10               ;設置輸入參數R0

              MOV             R1,#3                 ;設置輸入參數R1

              BL                 Doadd                   ;調用子程序Doadd

                     …

Doadd     ADD              R0,R0,R1         ;子程序

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

END                                                        ;結束匯編


本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 无码人妻一区二区三区免费视频 | 99精品国产在热久久| 欧美性受xxxx喷水性欧洲| 啊用力太猛了啊好深视频免费| 天堂俺去俺来也www久久婷婷 | 人与禽交zozo| 一级毛片人与动免费观看| 欧美三日本三级少妇三级久久| 公车校花小柔h| 99久久久精品免费观看国产| 欧美乱妇高清无乱码在线观看 | 国产91热爆ts人妖在线| poren日本| 夜夜爽一区二区三区精品| 亚洲va欧美va国产va天堂影| 皇上往下边塞玉器见客| 国产精品无码一区二区在线观一| 中文字幕一级片| 波多野结衣伦理电影| 国产99在线a视频| 韩国理论福利片午夜| 国语对白一区二区三区| 久久精品国产四虎| 欧美黄成人免费网站大全| 动漫美女www网站免费看动漫| 韩国精品欧美一区二区三区| 国产精品国产三级国产a| av色综合网站| 日韩视频免费在线| 亚洲精品在线电影| 韩国三级hd中文字幕| 国产精品白浆在线观看无码专区| а√最新版地址在线天堂| 日本中文字幕第一页| 亚洲AV无码专区在线亚| 欧美激情一区二区三区四区| 免费A级毛片无码A∨男男| 翁熄止痒婉艳隔壁老李头| 国产视频网站在线观看| 久久人人爽人人爽av片| 欧美乱xxxxx|