新聞中心

        ARM 匯編&ARM 指令集

        作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
        ARM 處理器尋址方式

        1、寄存器尋址

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

        操作數(shù)的值在寄存器中,指令中的地址碼字段指出的是寄存器編號,指令執(zhí)行時直接取出寄存器值操作

        MOV R1,R2 ;R2 -> R1
        SUB R0,R1,R2 ;R1 - R2 -> R0

        2、立即尋址

        地址碼部分就是操作數(shù),(操作數(shù))立即數(shù)就在指令中

        SUBS R0,R0,#1 ;R0 – 1 -> R0
        MOV R0,#0xff00 ;0xff00 -> R0

        3、寄存器偏移尋址

        MOV R0,R2,LSL #3 ;R2 的值左移3 位,結(jié)果放入R0,即R0 = R2 * 8
        ANDS R1,R1,R2,LSL R3 ;R2 的值左移R3 位,然后和R1 相與操作,結(jié)果放入R1

        4、寄存器間接尋址

        寄存器為操作數(shù)的地址指針

        LDR R1,[R2] ;將R2 中的數(shù)值作為地址,取出此地址中的數(shù)據(jù)保存在R1 中
        SWP R1,R1,[R2];將如中的數(shù)值作為地址,取出此地址中的數(shù)值與R1 中的值交換

        5、基址尋址

        將基址寄存器的內(nèi)容與偏移量相加,形成操作數(shù)的有效地址,用于訪問寄存器附近存儲單元

        LDR R2,[R3,#0x0F] ;將R3 中的數(shù)值加0x0F 作為地址,取出此地址的數(shù)值保存在R2 中
        STR R1,[R0,#-2] ;將R0 中的數(shù)值減2 作為地址,把R1 中的內(nèi)容保存到此地址位置

        6、多寄存器尋址

        多寄存器尋址就是一次可以傳送幾個寄存器值,允許一條指令傳送 16 個寄存器的任何子集或所有寄存器。

        LDMIA R1!,{R2-R7,R12} ;將R1 單元中的數(shù)據(jù)讀出到R2-R7,R12,R1 自動加1
        STMIA R0!,{R3-R6,R10};將R3-R6,R10 中的數(shù)據(jù)保存到R0 指向的地址,R0 自動加1

        7、堆棧尋址

        堆棧是特定順序進(jìn)行存取的存儲區(qū),操作順序分為“后進(jìn)先出”和“先進(jìn)后出”,
        堆棧尋址時隱含的,它使用一個專門的寄存器(堆棧指針)指向一塊存儲區(qū)域(堆棧),
        指針?biāo)赶虻拇鎯卧褪嵌褩5臈m敗4鎯ζ鞫褩?煞譃閮煞N:
        向上生長:向高地址方向生長,稱為遞增堆棧
        向下生長:向低地址方向生長,稱為遞減堆棧
        堆棧指針指向最后壓入的堆棧的有效數(shù)據(jù)項,稱為滿堆棧;堆棧指針指向下一個要
        放入的空位置,稱為空堆棧。這樣就有4 中類型的堆棧表示遞增和遞減的滿堆棧和空堆
        棧的各種組合。
        滿遞增:堆棧通過增大存儲器的地址向上增長,堆棧指針指向內(nèi)含有效數(shù)據(jù)項的
        最高地址。指令如LDMFA,STMFA 等。
        空遞增:堆棧通過增大存儲器的地址向上增長,堆棧指針指向堆棧上的第一個空
        位置。指令如LDMEA,STMEA 等。



        關(guān)鍵詞: ARM匯編指令

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 东安县| 松阳县| 大渡口区| 石台县| 岳普湖县| 平凉市| 大兴区| 宁陵县| 察隅县| 腾冲县| 铜川市| 双流县| 额敏县| 镇雄县| 开封县| 金湖县| 鸡西市| 花莲县| 石泉县| 虞城县| 灯塔市| 洪雅县| 庐江县| 礼泉县| 磐安县| 垫江县| 苏尼特右旗| 政和县| 合水县| 凤台县| 安丘市| 临泽县| 迁安市| 洞口县| 比如县| 泽普县| 札达县| 江川县| 雅江县| 茂名市| 政和县|