新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM指令中的內存訪問指令的總結

        ARM指令中的內存訪問指令的總結

        作者: 時間:2016-11-20 來源:網絡 收藏
        內存訪問指令

        LDR,STR,LDM,STM

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

        LDR:表示從內存中讀取數據到寄存器當中,如ldr r0,[r2];表示從r2指向的內存單元讀取數據保存到r0當中

        STR:表示把寄存器當中的數據保存到內存單元當中,如str r1,[r2];表示把r1中的值保存到地址為r2指向的內存單元當中

        LDM/STM是指內存訪問指令,用一條指令就可以讀取多個數據,格式如下

        LDM{cond} {!} {^}

        STM{cond} {!} {^}

        其中cond代表條件碼

        1.ia (incrementafter):事后遞增方式

        2.ib (incrementbefore):事先遞增方式

        3.da(decrementafter):事后遞減方式

        4.db(decrementbefore):事先遞減方式

        rn保存內存單元的地址,如果加上!,表示,使用后更新,等于下一個內存單元的地址

        表示寄存器列表,最后的^表示如果register_list當中有pc寄存器,它表示指令執行后,將spsr的值自動到cpsr當中,常用于中斷函數的返回;如果register_list當中沒有pc,^表示操作的是用戶模式下的寄存器,而不是當前特權模式下的寄存器.指令中的對應關系,編號低的寄存對應內存中低地址的單元,高編號的寄存器對應高內存地址.

        irq_handler:sublr, lr, #4               ;計算返回地址stmdbsp!, {r0-r12, lr}      ;事前遞減,!使得sp = sp -14*4,lr保存在高地址當中sp, r0保存在低地址當中 sp - 14*4ldrr2, = int_handler        ;中斷處理函數blr2                        ;真實中斷處理ldrlr, = int_return;        ;從中斷中返回irq_retrun:ldmiasp!, {r0-r12, lr}^     ;^將spsr拷貝到cpsr,!使得sp = sp + 14*4,r0中的值是低地下中的sp,lr中的得到是高地址sp +14*4指向的值


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 循化| 涞源县| 东兴市| 白朗县| 阳江市| 丽水市| 安乡县| 子长县| 博乐市| 茂名市| 大足县| 酉阳| 永宁县| 报价| 东兴市| 潍坊市| 新乐市| 大港区| 克拉玛依市| 上饶县| 建湖县| 广河县| 钟祥市| 闻喜县| 剑河县| 衢州市| 南投县| 绥宁县| 嘉义市| 长寿区| 涟水县| 乐昌市| 襄垣县| 云霄县| 潮安县| 富平县| 澄城县| 专栏| 巴林左旗| 溆浦县| 巴塘县|