ARM狀態(tài)寄存器訪(fǎng)問(wèn)指令
狀態(tài)寄存器中有些位是當前沒(méi)有使用的,但在ARM將來(lái)版本中有可能使用這些位,因此用戶(hù)程序不要使用這些位。
程序不能通過(guò)直接修改CPSR中T的控制位直接將程序狀態(tài)切換到Thumb狀態(tài),必須通過(guò)BX等指令完成程序狀態(tài)的切換。
通常修改狀態(tài)寄存器是通過(guò)“讀取-修改-寫(xiě)回”的操作序列來(lái)實(shí)現。
狀態(tài)寄存器訪(fǎng)問(wèn)指令包括以下兩條。
?。?)MRS 狀態(tài)寄存器到通用寄存器的傳送指令
MRS(條件) Rd>' CPSR
MRS指令用于將狀態(tài)寄存器的內容傳送到通用寄存器中。
MRS指令主要用于以下3種場(chǎng)合。
·通常通過(guò)“讀取-修改-寫(xiě)回“操作序列修改狀態(tài)寄存器的內容。MRS指令用于將狀態(tài)寄存器的內容讀到通用寄存器中。
·當異常中斷允許嵌套時(shí),需要在進(jìn)入異常中斷之后、嵌套中斷發(fā)生之前保存當前處理器模式對應的SPSR J8時(shí)需要先通過(guò)MRS指令讀出SPSR的值,再用其他指令將SPSR保存起來(lái)。
·在進(jìn)程切換時(shí)也需要保存當前狀態(tài)寄存器值。
?。?)MSR 通用寄存器到狀態(tài)寄存器的傳送指令
MSR指令用于將通用寄存器的內容或一個(gè)立即數傳送到狀態(tài)寄存器中。
MSR指令通常用于恢復狀態(tài)寄存器的內容或者改變狀態(tài)寄存器的內容。
當退出異常中斷處理程序時(shí),如果事先保存了狀態(tài)寄存器的內容(如在嵌套的異常中斷處理中),則通常通過(guò)MSR指令實(shí)現將保存的狀態(tài)寄存器內容恢復到狀態(tài)寄存器中。
當需要修改狀態(tài)寄存器的內容時(shí),通過(guò)“讀?。薷模瓕?xiě)回”指令序列完成。寫(xiě)回操作也是通過(guò)MSR指令完成的。
考慮到指令執行的效率,通常在MSR指令中指定指令將要修改的位域。
評論