新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM的入棧出棧具體的操作詳解

        ARM的入棧出棧具體的操作詳解

        作者: 時間:2016-11-11 來源:網絡 收藏
        ARM用ADS編譯的話,用的是FD 滿減 棧方式。順便說下滿減 FD方式,入棧是先移動SP,再存數據;出棧是先存數據,再移SP。

        我看的資料具體也就說到這里了。

        本文引用地址:http://www.104case.com/article/201611/316907.htm

        看下面的例子:

        STMFD SP!, {R0-R3, R12, LR}

        。。。。。。


        LDMFD SP!, {R0-R3, R12, PC}^

        STMFD之后,SP就指向LR了,LDMFD 就把LR 出棧給了R0了,若這么理解的話肯定不對了。肯定進棧和出棧的順序是不一樣的,雖然表達方式上可能為了直觀都是從 低到高的寄存器。

        以前困惑的就是STMFD 命令 對于操作數 是按照什么順序壓棧的

        比如:STMFD sp!{R0-R5,LR} 進棧順序是:

        高地址(1方式)

        LR

        R5

        R4

        ```````

        R0 <-sp

        低地址

        還是:

        高地址(2方式)

        R0

        R1

        ```

        R5

        LR <-sp

        低地址

        現在通過下表,可以輕松的解決這個問題:

        尋址方式
        說明
        pop
        =LDM
        push
        =STM
        FA
        遞增滿
        LDMFA
        LDMDA
        STMFA
        STMIB
        FD
        遞減滿
        LDMFD
        LDMIA
        STMFD
        STMDB
        EA
        遞增空
        LDMEA
        LDMDB
        STMEA
        STMIA
        ED
        遞減空
        LDMED
        LDMIB
        STMED
        STMDA

        按照圖表,可知 STMFD對應的是STMDB,根據arm指令手冊,可知STMDB入棧順序是(1方式)

        而LDMFD對應的是LDMIA,這樣這兩個操作就可以成功配對



        關鍵詞: ARM入棧出

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 蕲春县| 乃东县| 瑞安市| 晴隆县| 贵州省| 栾城县| 屯昌县| 昭通市| 图木舒克市| 长垣县| 武宣县| 宁乡县| 彭州市| 韶山市| 清丰县| 敦化市| 百色市| 宣威市| 遂川县| 木里| 师宗县| 淮安市| 阿克苏市| 越西县| 北票市| 玉溪市| 晋江市| 延长县| 都昌县| 武隆县| 梅河口市| 普定县| 略阳县| 浦东新区| 信阳市| 同德县| 临江市| 阿尔山市| 新巴尔虎左旗| 璧山县| 蕉岭县|