1. 程式人生 > >1.22.ARM彙編指令集10之雜項指令

1.22.ARM彙編指令集10之雜項指令

這裡記錄的ARM雜項指令包括: SWI & MRS & MSR


* SWI (這個指令中關於立即數的詳細作用等我以後用到再詳細瞭解一下,這裡先大概知道一下)

軟中斷指令,SWI指令用於產生軟中斷,從而實現在使用者模式下變換到管理模式,CPSR儲存到管理模式的SPSR中,執行轉移到SWI向量,在其它模式下也可以使用SWI指令,處理用於的切換到管理模式。

指令格式:

SWI{cond} immed_24

其中:

immed_24: 24位立即數

eg:

SWI 0

SWI 0x123456

注:等以後用到這個指令之後再詳細回來重寫這個指令

* MRS

讀狀態暫存器指令,在ARM處理器中,只有MRS指令可以將狀態暫存器(CPSR/SPSR)讀出到通用暫存器。

指令格式:

MRS{cond} Rd,psr

其中:

Rd: 目標暫存器,不能為R15(PC)

psr: CPSR/SPSR

eg:

MRS R1,CPSR

* MSR

寫狀態暫存器指令,在ARM處理器中,只有MSR指令可以直接設定狀態暫存器。

指令格式:

MSR{cond} psr_fields,#immed_8r

MSR{cond} psr_fields,Rm

其中:

psr: CPSR/SPSR

fields: 指定傳送的區域。格式為下面的一種或多種,字母都是小寫

            c控制域遮蔽位元組(psr[7~0])

            x拓展域遮蔽位元組(psr[18~8])

            s狀態域遮蔽位元組(psr[23~19])

    f標誌域遮蔽位元組(psr[31~24])

#immed_8: 要傳送到狀態暫存器指定域的8位立即數

Rm: 要傳送到狀態暫存器指定域的資料的源暫存器

eg:

MSR CPSR_c #0x03

MSR CPSR_cxsf,R3

注:只有在特權模式下才能修改狀態暫存器(除了使用者模式外的其它的6種模式)

程式中不能通過MSR指令直接修改CPSR的T控制位來實現ARM狀態和Thumb狀態的切換。