Java教程

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

这篇关于ARM体系结构与接口技术——ARM指令3——专用指令的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!