1. gzyueqian
      13352868059

      嵌入式ARM匯編語言子程序調(diào)用及返回 看粵嵌培訓如何操作

      更新時間: 2019-04-04 14:32:13來源: 嵌入式培訓瀏覽量:6583

        嵌入式培訓剛開始學的話,arm的基礎知識,是要必須先掌握的。ARM匯編語言的子程序是如何進行調(diào)用與返回的呢?不懂的人勢必會很困擾,不過不用擔心,下面就是粵嵌嵌入式培訓在今天所要講的主題。



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


        BL          subname

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


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


        SUB2      …

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


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


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

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


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


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


        AREA     EXAMPLE,CODE,READONLY
        ENTRY
        Start              MOV             R0,#10               ;設置輸入?yún)?shù)R0
        MOV             R1,#3                 ;設置輸入?yún)?shù)R1
        BL                 Doadd                   ;調(diào)用子程序Doadd
        …
        Doadd     ADD              R0,R0,R1         ;子程序
        MOV             PC,LR                ;從子程序中返回

        END                                                        ;結(jié)束匯編


        arm學習中需要學的知識點,要一個個進行突破,看書不要希望一次就會還有重要的一點就是多看代碼,多寫代碼,見多識廣,熟能生巧。多看代碼,要從代碼中讀出代碼的意思來。掌握好ARM,進行嵌入式培訓的課程學習就不成問題了。


      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲国产精品精品在线第1页 | 亚洲嫩模久久精品 | 日韩欧美另类久久久精品 | 亚洲中文字幕国产精品 | 亚洲日韩性爱在线精品视频 | 久热国产精品视频二区 |