ARM指令中的內(nèi)存訪問指令的總結(jié)
LDR,STR,LDM,STM
本文引用地址:http://m.butianyuan.cn/article/201611/318731.htmLDR:表示從內(nèi)存中讀取數(shù)據(jù)到寄存器當(dāng)中,如ldr r0,[r2];表示從r2指向的內(nèi)存單元讀取數(shù)據(jù)保存到r0當(dāng)中
STR:表示把寄存器當(dāng)中的數(shù)據(jù)保存到內(nèi)存單元當(dāng)中,如str r1,[r2];表示把r1中的值保存到地址為r2指向的內(nèi)存單元當(dāng)中
LDM/STM是指內(nèi)存訪問指令,用一條指令就可以讀取多個數(shù)據(jù),格式如下
LDM{cond}
STM{cond}
其中cond代表條件碼
1.ia (incrementafter):事后遞增方式
2.ib (incrementbefore):事先遞增方式
3.da(decrementafter):事后遞減方式
4.db(decrementbefore):事先遞減方式
rn保存內(nèi)存單元的地址,如果加上!,表示,使用后更新,等于下一個內(nèi)存單元的地址
irq_handler:sublr, lr, #4 ;計算返回地址stmdbsp!, {r0-r12, lr} ;事前遞減,!使得sp = sp -14*4,lr保存在高地址當(dāng)中sp, r0保存在低地址當(dāng)中 sp - 14*4ldrr2, = int_handler ;中斷處理函數(shù)blr2 ;真實中斷處理ldrlr, = int_return; ;從中斷中返回irq_retrun:ldmiasp!, {r0-r12, lr}^ ;^將spsr拷貝到cpsr,!使得sp = sp + 14*4,r0中的值是低地下中的sp,lr中的得到是高地址sp +14*4指向的值
評論