1. 程式人生 > 其它 >ARM體系結構與介面技術——ARM指令3——專用指令

ARM體系結構與介面技術——ARM指令3——專用指令

狀態暫存器(CPSR)傳送指令

@ 狀態暫存器傳送指令

.text
.global _start
_start:

    @ 狀態暫存器指令
    @ 讀CPSR到R1
    MSR R1,CPSR
    
    @寫到CPSR
    MSR CPSR, #0x10

STOP:
    B STOP
.end

 

軟中斷指令

ARM的異常向量表預設在以0x00為起始地址的32位元組記憶體空間。

每個偏移地址儲存的是一箇中斷產生後執行的指令,如軟中斷產生執行的指令位於0x00+0x08。

@ 軟中斷指令

.text
.global _start
_start:

    @ 4x8=32位元組的異常向量表
    B MAIN
    B .
    B SWI_HANDLER    @ SWI中斷指令寫為跳轉到SWI_HANDLER
    B .
    B .
    B .
    B .
    B .

MAIN: @ 復位和軟中斷都是SVC模式 @ 所以用的是同一個棧頂指標暫存器SP_<SVC mode> MOV SP,#0x40000020 @ 初始化SVC模式的棧頂指標 MSR CPSR, #0x10 @ 切換為User模式 @ 在這裡操作的是User的棧頂指標SP_<User mode> @ 在這裡初始化棧頂指標在軟中斷中沒用 @ MOV SP,#0x40000020 MOV R1,#1 MOV R2,#2 @ 軟中斷指令 SWI #
1 ADD R3,R1,R2 B STOP SWI_HANDLER: STMFD SP!,{R1,R2,LR} @ 壓棧,保護現場 MOV R1,#5 MOV R2,#6 LDMFD SP!,{R1,R2,PC}^ @出棧(出棧寫入的第三個暫存器為PC,可以直接跳轉) @^執行切換user模式 STOP: B STOP .end

擴充套件1——ARM協處理器指令

協處理器指令是指ARM本身不處理的指令,但是會交給ARM支援的協處理器執行的指令。

如MMU, CP15是兩種協處理器。

...

擴充套件2——ARM偽指令

ARM偽指令本質上不是指令,不會對應一條能被CPU直接執行的機器碼,但是能被編譯器轉換成若干條指令。

@ 偽指令

.text
.global _start
_start:

    NOP             @ 空指令,它是一條偽指令,實際上被編譯成 MOV R0,R0
    
    @LDR            @ 它根據格式不同,可以是指令,也可以是偽指令
    LDR R1,[R2]     @ 這是一條指令
    
    @ LDR偽指令格式
    LDR R1, =0x12345678
                    @ 這一條偽指令,可以將任意一個32位的資料放到暫存器中
                    @ 實際上被編譯成LDR R1,[PC] 和 0x12345678
    
    LDR R1,=STOP    @ 將STOP的地址寫入R1暫存器
                    
    LDR R1,STOP     @ 將STOP地址中的內容寫入R1暫存器
    
STOP:
    B STOP
.end

 

 


 

END