ARM-专用指令(lv9-day9)

ARM-专用指令(lv9-day9)

1 状态寄存器与传送指令 MRS读 MSR写),

在这部分我们关注的是CPSR的控制位(条件代码标志位的作用在这篇文章里有数据处理在这里插入图片描述
读MRS:

MRS R1,CPSR
@R1=CPSR

写MSR

MSR CSPR #0X10

ARM 上电CPSR默认为0x000000D3(11010011)
在这里插入图片描述
由上图可知此时ARM为SVC模式,为ARM状态 ,FIQ和IRQ禁止(禁止中断,优先初始系统)。

1.1小插曲

执行以下代码

  MRS R1,CPSR
  @将模式改为user模式
  MSR CPSR,0x10 
  MSR CPSR,0xD3 //由于上面将模式更改为user模式(非特权模式)没有权限将模式更改为SCV模式

编译调试过程
在这里插入图片描述
在这里插入图片描述

2 软中断模式

首先来了解一下异常的相关概念。

2.1 异常的概念

在这里插入图片描述

2.2 ARM异常相应

在这里插入图片描述

2.2.1异常向量表

在这里插入图片描述

2.3 异常返回

在这里插入图片描述

SWI程序演示

@ 汇编
.text                  @表示为代码段
.global   _start       @将_strat定义为全局符号
_start:                @ 汇编入口

@异常向量表(从0地址开始,这里不能写自己的程序)
B MAIN
B .@跳转自身
B  SWI_HANDLER @0x08//软中断向量表位置
B .
B .
B .
B .
B .
MAIN:
  @初始栈指针
   MOV SP,#0X40000020@这句话不能写在下一句话的后面(因为SP寄存器每个模式下都由独立的一个)
   MSR CPSR,#0x10
   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}^(^表示在出栈的同时把SPSR给CPSR)	
		@异常返回
        MOV PC,LR		
stop:
    B stop
	 .end                 @汇编结束

程序调试过程
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3协处理器指令

不同SOC的种类和数量是不同的,在嵌入式领域一般常用的是IPU,CP15
IPU:用于计算浮点数
CP15:用于管理寄存器(比如异常向量表,控制MMU等等)

协处理器数据数据运算指令(不同SOC由不同的指令,所以这里是以后我们可能遇到的)
比如 CDP
协处理器存储器运算指令
STC:将协处理器中的数据储存到储存器
LDC:将存储器中的数据读取到协处理器中
协处理器寄存器传回指令
MRC 将协处理器中寄存器的数据传送到ARM处理器中的寄存器
MCR 与上面相反

4伪指令

伪指令:本身不是指令,编译器可以将其替换成诺干条指令。
NOP:空指令(占用cpu资源)
LDR
这种格式是伪指令:LDR R1,=0x123456789
(可以将任意一个32位的数据放到寄存器中)
LDR R1,=STOP
(把STOP的地址给R1)
LDR R1, STOP
(将地址中的内容写入R1寄存器)

   
  @ LDR R1,=STOP
   LDR  R1, STOP
   STOP:
        B STOP
   

这种是指令:LDR R1,[R2]

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值