ARM学习-ARM寻址方式与异常中断

目录

1. ARM指令的寻址方式

1.1 立即数寻址

1.2 寄存器寻址

1.3 寄存器移位寻址

1.4 寄存器间接寻址

1.5 基址变址寻址

1.6 多寄存器寻址/块拷贝寻址

1.7 相对寻址

2. 异常中断

2.1 硬件中断&软件中断

2.2 ARM处理器有七种类型的异常

2.3 异常处理流程


1. ARM指令的寻址方式

1.1 立即数寻址

        立即数前面有“#”号,并且如果是十六进制数则在“#”后添加“0x”或“&”,二进制数“#”后面加“%”。

  MOV  R0,#0          //送0到R0中

  ADD  R3,R3,#1      //R3的值加1

  CMP  R7,#1000       //R7的值和1000比较

  BIC   R9,R8,#0xff00  //将R8中8~15位清0,结果保存在R9中

1.2 寄存器寻址

     寄存器的值可以被直接用于数据操作指令

   MOV  R2,R0      //R0的值送R2

   ADD  R4,R3,R2  //R4 = R2 + R3

   CMP  R7,R8      //比较R7和R8的值

1.3 寄存器移位寻址

  预处理和移位发生在同一周期内,有效使用移位寄存器,可以提供代码执行效率;

   ADD  R2,R0,R1,LSR  #5

   MOV  R1,R0,LSL  #2

   RSB  R9,R5,R5,LSL  #1

   SUB  R1,R2,R0,LSR  #4

1.4 寄存器间接寻址

        以寄存器中的值作为操作数的地址,而操作数本身放在存储器中。

  LDR  R1,[R2]  //将R2的数值作为地址,取出地址中的数据保存到R1中

  STR  R1,[R2]  //将R2数值作为地址,取出R1中的值存入R2所指向的地址

1.5 基址变址寻址

  基址变址是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址;

  基址变址寻址常用于查表、数组操作、访问基址附近的存储单元等。

   LDR  R1,[ R0,#0xf ]  //将R0的数值加0x0f作为地址,取出此地址的数值保存到R1

   STR  R1,[R0,#-2]   //将R0的数值减2作为地址,将R1中的内容保存到此地址中

   STR  R1,[R0,+R2]   //将R0的值加上R2的值作为地址,把R1的内容保存到该地址

1.6 多寄存器寻址/块拷贝寻址

一条指令可以完成多个寄存器值得传递,一条指令传送最多16个通用寄存器的值。

LDMIA  R0,{R1,R2,R3,R4}

1.7 相对寻址

以程序计数器PC的值作为基地址,指令中的地址标号作为偏移量,将两者相加后得到的操作数的有效地址。

  BL  FUN1     //调用到FUN1的子程序

  B   LOOP     //条件跳转到LOOP标号处

  STMDA

  STMDB

2. 异常中断

2.1 硬件中断&软件中断

  硬件中断是随机的,不可预测的

  软件中断是事先安排的(如workQueue、task)

2.2 ARM处理器有七种类型的异常

     (1)复位异常(Reset):处理器在工作时, 突然按下重启键, 就会触发该异常;

  (2)数据异常(Data Abort):读取数据失败;

  (3)快速中断异常(FIQ):快速中断要比普通中断响应速度要快一些;

  (4)外部中断异常(IRQ):普通中断;

  (5)预取异常(Prefetch Abort):预取指令失败, ARM 在执行指令的过程中, 要先去预取指令准备执行,如果预取指令失败, 就会产生该异常;

  (6)软中断异常(SWI):软件中需要去打断处理器工作, 可以使用软中断来执行 ;

  (7)未定义指令异常(Undefined Instruction):处理器无法识别指令的异常, 处理器执行的指令是有规范的,

  如果尝试执行不符合要求的指令, 就会进入到该异常指令对应的地址中;

  当异常发生时,分组寄存器R14和SPSR用于保存处理器状态,

  异常返回时,SPSR内容恢复到SPSR,链接寄存器R14的内容恢复到程序计数器PC。

  下图中每种异常对应一种内核的工作模式,当然每种异常产生,内核都会进入特定的工作模式;

2.3 异常处理流程

(1)中断响应所做的工作

  A、保存短点:保存下一将要执行的指令的地址,也就是把这个地址送入堆栈;

  B、寻找中断入口:根据不同的中断源产生的中断,查找不同的入口地址;

  C、执行中断处理程序;

  D、中断返回:执行完中断指令后,就从中断返回到主程序继续执行;

(2)异常向量表

  每一个异常发生时,总是从异常向量表开始跳转,所谓的异常向量表,是指由7个异常向量及其处理函数跳转

关系组成的表:

   0x00000000: b reset

   0x00000004: ldr  pc, _undefined_instruction

   0x00000008: ldr pc, _software_interrupt

   0x00000008: ldr pc, _software_interrupt

   0x0000000c: ldr pc, _prefetch_abort

   0x00000010: ldr pc, _data_abort

   0x00000014: ldr pc, _not_used   //保留

   0x00000018: ldr pc, _irq

   0x0000001c: ldr pc, _fiq

(3)当一个ARM异常返回时,需要完成如下任务

    通用寄存器的恢复;

    状态寄存器的恢复;

    PC指针的恢复;
 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ARM Cortex-M3和M4是英国ARM公司开发的一系列32位内核微控制器架构。这些微控制器广泛应用于嵌入式系统中,具有高效低功耗和高性能的特点。 《ARM Cortex-M3和M4权威指南》是一本专门介绍这个微控制器架构的权威指南书籍。该指南由ARM公司编写,详细描述了Cortex-M3和M4的设计原理、体系结构、指令集和编程模型。 首先,该指南介绍了ARM Cortex-M系列内核的特点和技术特色。它详细说明了Cortex-M3和M4内核的架构和功能,如处理器状态、处理器模式、中断和异常处理机制等。读者可以通过阅读该指南全面了解这些微控制器的特性和工作原理。 其次,该指南详细介绍了Cortex-M系列微控制器的指令集和编程模型。它描述了指令的格式、寻址方式、操作数的类型和使用方法。同时,它还对Cortex-M微控制器的编程环境、调试工具和优化技术进行了讲解,帮助读者更加高效地开发应用程序。 此外,该指南还提供了大量实际的应用案例和开发实践经验。它介绍了如何使用Cortex-M微控制器开发各种类型的嵌入式系统,包括智能传感器、无线通信设备和工控系统等。通过这些案例,读者可以了解在实际开发中如何应用Cortex-M微控制器来实现特定的功能和需求。 总而言之,《ARM Cortex-M3和M4权威指南》是一本全面介绍和指导读者使用Cortex-M微控制器的权威指南。它适合硬件工程师、嵌入式系统开发人员和学习ARM架构的人士阅读,能够帮助他们更好地理解和应用Cortex-M系列微控制器。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪耀大叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值