Arm匯編學習筆記(五)——MOVS及^符號等

ARM 284瀏覽

1. MOVS

MOV一般不影響CPSR,?除非執行類似MOV?pc,?lr,效果上等同于BX?lr,可能會影響到T標志位
MOVS總是會影響CPSR,?包括N,Z,C標志位,執行MOVS?pc,?lr時,CPSR會被SPSR覆蓋(內核態,USER和SYSTEM模式下沒有SPSR)

舉例,當USER模式下有一條未定義指令,CPU在譯碼階段會發現指令未定義,這時會跳轉到相應的處理函數,切換到UND模式,并把未定義指令下一條指令的地址保存到lr寄存器。當處理函數執行完成后,怎樣去返回的同時把狀態寄存器等恢復是個問題,因為UND模式下sp和lr寄存器是該模式下特有的,這時候就可以可以直接用MOVS pc, lr來返回并切換回USER模式。

2. ^符號

'^'是一個后綴標志,不能在User模式和Sys系統模式下使用該標志.該標志有兩個存在目的:

? ? ?a.對于LDM操作,同時恢復的寄存器中含有pc(r15)寄存器,那么指令執行的同時cpu自動將spsr拷貝到cpsr中

如:在UND中斷返回代碼中

ldmfd sp!, {r0-r13,pc}^//當指令執行完畢,pc跳轉之前,將spsr的值自動拷貝到cpsr中

? ? ?b.數據的送入、送出發生在User用戶模式下的寄存器,而非當前模式寄存器

如:ldmdb sp,{r0 - lr}^;表示sp棧中的數據回復到User分組寄存器r0-lr中,而不是恢復到當前模式寄存器r0-lr

當然對于User,System,IRQ,SVC,Abort,Undefined這6種模式來說r0-r12是共用的,只是r13和r14為分別獨有,對于FIQ模式,僅僅r0-r7是和前6中模式的r0-r7共用,r8-r14都是FIQ模式下專有.

七星彩走势图2元网官网