ARM汇编指令集-专用指令

目录

一、状态寄存器传送指令

二、软中断指令SWI

三、协处理器指令

四、伪指令


一、状态寄存器传送指令

读CPSR:

@读CPRS 
	MRS R1 , CPSR @ R1 =CPRS 

写CPSR:

@写CPRS 
	MRS CPSR,#0x10

将CPSR改成usr模式,ARM状态、开启IRQ、FIQ
[7:0] 分别为00010000转换成16进制为0x10

 CPSR 更改为USR模式后,无法将CPSR写成0xD3 SVC模式(0x000000D3转换成二进制的值为11010011),因为USR非特权模式,权限低不能随意修改核心的东西

	MRS CPSR,#0x10
	
	MRS CPSR,#0xD3

 

二、软中断指令SWI

ARM异常相应的动作:ARM异常处理_lumijgfei2_0的博客-优快云博客

 

 

 

CPU遇到软中断SWI(linux内核调用中用的较多),由USR模式切换到SVC 模式


	
		@ 异常向量表:腾出异常向量表的32位(8个)空间(0-31地址都是异常向量表(32个字节)使用的)
		 B MAIN
		 B .
		 B SWI_HANDLER	软中断的异常向量地址是0x00000008,是此处
		 B .
		 B .
		 B .
		 B .
	     B .
		
		@ 应用程序:不能占用异常向量表的空间,异常向量表的空间是32位
@ MAIN:
		 MOV SP, #0x40000020
		@ 初始化SVC模式下的栈指针,要写在切换成USER模式前,因为此时的SP还是SVC模式下的SP
		 MSR CPSR, #0x10
		@ 切换成USER模式,开启FIQ、IRQ
		 MOV R1, #1
		 MOV R2, #2
		 SWI #1 @#后面的参数区分不同的系统调用

		@ 触发软中断异常
		 ADD R3, R2, R1
		 B STOP
		
		@ 异常处理程序
@ SWI_HANDLER:
		 STMFD SP!,{R1,R2,LR}
		@ 压栈保护现场
		 MOV R1, #10
		 MOV R2, #20
		 SUB R3, R2, R1
		 LDMFD SP!,{R1,R2,PC}^
		@ 出栈恢复现场
		@ 将压入到栈中的LR(返回地址)出栈给PC,实现程序的返回,这种写法注意一下
		@ ‘^’表示出栈的同时将SPSR的值传递给CPSR,实现CPU状态的恢复(模式的恢复)

STOP
    B STOP

三、协处理器指令

协处理器:ARM能处理的指令比如加减乘,交给ARM处理器处理,ARM不能处理的指令如图像运算,交给协处理器。ARM最多加16个协处理器。

FPU:帮助ARM运算浮点型数据的协处理器。
CP15:帮助ARM管理存储器的协处理器,高速缓存,异常向量表,MMU负责物理地址虚拟地址的映射。

协处理器指令:用于控制和操作协处理器的指令。
        1.协处理器数据运算指令:CDP
        2.协处理器存储器访问指令
                STC    将协处理器中的数据写入到存储器
                LDC    将存储器中的数据读取到协处理器
        3.协处理器寄存器传送指令
                MRC    将协处理器中寄存器中的数据传送到ARM处理器中的寄存器
                MCR    将ARM处理器中寄存器中的数据传送到协处理器中的寄存器

四、伪指令

伪指令伪指令不是CPU可以直接执行的指令,编译器可以将其替换成若干个能执行的指令。比如,除法在ARM中不是指令,但能被替换成若干个指令



		@ 空指令:本质是消耗CPU一定的时间,CPU是不可能会停下的,相当于执行了类似MOV R0, R0,把自己搬移给自己(等于没有执行,但消耗了CPU一定时间)
		 NOP @MOV R0,R0
		
		@ 指令
		 LDR R1, [R2]
		@ 将R2指向的内存空间中的数据读取到R1寄存器
		

        @ 伪指令
		 LDR R1, =0x12345678
		@ R1 = 0x12345678	
		@ LDR伪指令可以将任意一个32位的数据放到一个寄存器,与MOV不同MOV只能搬移立即数
		
		 LDR R1, =STOP
		@ 将STOP表示的地址写入R1寄存器
		
		 LDR R1, STOP
		@ 将STOP地址中的内容写入R1寄存器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值