新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM數據加載與存儲指令(一)

        ARM數據加載與存儲指令(一)

        作者: 時間:2016-11-21 來源:網絡 收藏
        數據加載存儲指令ARM在寄存器與存儲器之間實現數據傳送的一類指令。

        實驗目的:
        l 單寄存器數據傳送指令的運用和各種變址尋址模式的掌握
        l 多寄存器數據傳送指令的運用和各種變址尋址模式的掌握
        l 單個數據復制和數據塊復制的方法。
        l 利用調試器中各種窗口觀察完成各指令操作后寄存器、存儲器、標簽地址、機器指令等的變化情況。
        一、 單寄存器的加載和存儲指令LDR|STR
        AREA Lab1,CODE
        ENTRY
        START
        ADR R1,SRC
        ADR R2,DST
        COPY
        LDR R0,[R1]
        STR R0,[R2]
        ADD R1,R1,#0x4
        ADD R2,R2,#0x4
        LDR R0,[R1]
        STR R0,[R2]
        ADD R1,R1,#0x4
        ADD R2,R2,#0x4
        LDR R0,[R1]
        STR R0,[R2]

        STOP
        B STOP


        SRC DCB "one small!"
        ALIGN
        DST DCB "three big!"
        END
        程序說明:
        1. 偽指令ADR是將一個寄存器相關變大時或程序相關表達式的地址存入寄存器中,在例子中相當于使R1指向SRC,R2指向DST地址,即初始化地址指針。
        2. DCB的作用是分配一組字節內存并定義其內容為指定字符串,也可以用“=”代替:
        SRC = “one small!”
        DST =“three big!”

        完成下列任務
        1.閱讀程序exp6_1.s,寫出程序的功能。設置代碼段的基地址為0x8000。用AXD單步調試程序,觀察每執行一步以后,相應的寄存器和存儲器的變化情況,完成表格。
        打開的process view窗口如下:register,disassembly,low lever symbols,memory
        序號執行指令指令執行后變化情況
        寄存器存儲器
        R0R1R2PC0x80400x80410x80420x80430x80440x80450x80460x80470x80480x8049
        00x00x00x00x80000x74
        t
        0x68
        H
        0x72
        r
        0x65
        e
        0x65
        e
        0x20
        _
        0x62
        b
        0x69
        i
        0x67
        g
        0x21
        !
        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        2.程序中使用的尋址方式是間接尋址中的零變址方式,請將程序改為前變址形式和后變址形式。(繪圖分析各種變址尋址形式,并設計程序驗證。)
        3.用多寄存器傳送指令修改程序。

        答案:
        1. 程序的功能是將存儲器中SRC處的源數據通過數據傳送指令傳送到DST處。
        2. 前變址和后變址
        方法一
        COPY LDR R0,[R1],#4
        STR R0,[R2],#4
        LDR R0,[R1],#4
        STR R0,[R2],#4
        LDR R0,[R1],#4
        STR R0,[R2],#4
        方法二
        SUB R1,R1,#4
        SUB R2,R2,#4
        MOV R3,#1
        CPY
        LDR R0,[R1,#4]!
        STR R0,[R2,#4]!
        CMP R3,#3
        ADD R3,R3,#1
        BNE CPY
        方法三
        LDR R0,[R1]
        STR R0,[R2]
        LDR R0,[R1,#4]
        STR R0,[R2,#4]
        LDR R0,[R1,#8]
        STR R0,[R2,#8]
        3. 多寄存器傳送指令
        LDMIA R1!,{R3-R5}
        STMIA R2!,{R3-R5}


        一、 多寄存器的加載和存儲指令
        AREA Lab2,CODE
        ENTRY
        START
        LDR sp,=NUM
        LDMFD SP!,{R0-R4}
        ADD R4,R0,R1
        ADD R4,R4,R2
        ADD R4,R4,R3
        MOV R4,R4,LSR #2
        STR R4,[SP]
        STOP
        B STOP

        AREA Dblock,DATA
        NUM DCD 0x12,0x34,0x56,0x78
        END
        程序說明:
        1. 定義一個名為Dblock的數據區域
        2. 偽指令DCD的作用是分配一組字內存并定義其內容,分配的內存一定是4的倍數。也可以用&替代。
        NUM & 0x12, 0x34,0x56,0x78


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 定结县| 彝良县| 通榆县| 辰溪县| 大新县| 界首市| 旺苍县| 温泉县| 天水市| 南康市| 鹤壁市| 天峨县| 涪陵区| 大洼县| 西平县| 江门市| 长沙县| 扶沟县| 勃利县| 山西省| 若尔盖县| 西吉县| 罗山县| 青冈县| 武川县| 习水县| 平潭县| 易门县| 长治县| 水城县| 互助| 铜山县| 巴南区| 乌鲁木齐市| 湘西| 偏关县| 沛县| 四子王旗| 金川县| 泾源县| 长白|