发 帖  
原厂入驻New

[经验] ARM体系结构之寄存器详解

2020-8-25 15:23:15  384 ARM体系结构 寄存器
分享
4
ARM寄存器
图1.png
ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个状态寄存器都是可访问的。
ARM状态下的通用寄存器与程序计数
图2.png
ARM状态下的程序寄存器
图3.png
通用寄存器
  1. R0~R15
  2. R13_svc、R14_svc
  3. R13_abt、R14_abt
  4. R13_und、R14_und
  5. R13_irq、R14_irq
  6. R8_fiq~R14_fiq
复制代码
通用寄存器
1、不分组寄存器(R0-R7)
2、分组寄存器(R8-R14)
程序计数器R15(PC)
不分组通用寄存器
R0-R7是不分组寄存器。这意味着在所有处理器模式下,访问的都是同一个物理寄存器。不分组寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。
分组寄存器R8-R12
1、FIQ模式分组寄存器R8-R12
2、FIQ以外的分组寄存器R8-R12
分组寄存器R13、R14
1、寄存器R13通常做堆栈指针SP
2、寄存器R14用作子程序链接寄存器(Link Register-LR),也称为LR,指向函数的返回地址。
程序计数器
寄存器R15被用作程序计数器,也称为PC。其值等于当前正在执行的指令的地址+8(因为在取地址和执行之间多了一个译码的阶段)。
状态寄存器
CPSR
SPSR_svc
SPSR_abt
SPSR_und
SPSR_irq
SPSR_fiq
ARM所有工作模式下都可以访问程序状态寄存器CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。
CPSR在每个异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存CPSR的值,以便异常返回后恢复异常发生时的工作状态。
图4.png
图5.png
寻址方式:所谓寻址方式就是处理器根据指令中给出的信息来找到指令所需操作数的方式。
1、立即数寻址
立即数寻址,是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即数寻址。例如以下指令:
  1. ADD R0,R0,#0x3f;
复制代码
在以上两条指令中,第二个源操作数即为立即数,要求以“#”为前缀。
寄存器寻址就是利用寄存器中的数值作为操作数,这种寻址方式是一种执行效率较高的寻址方式。

  1. ADD R0,R1,R2;
复制代码
该指令的执行效果是将寄存器R1和R2的内容相加,其结果存放在寄存器R0中。
寄存器间接寻址
寄存器间接寻址就是寄存器中的存放的是操作数在内存中的地址。例如以下指令:
  1. LDR R0,[R2];
复制代码
在第一条指令中,以寄存器R2的值作为操作数的地址,在存储器中取得一个操作数后与R1相加,结果存入寄存器R0中。第二条指令将以R1的值为地址的存储器中的数据传送到R0中。
基址变址寻址
基址变址寻址就是将寄存器里的内容(基地址)与指令中给出的地址偏移量相加,从而得到操作数在内存中的地址:

  1. LDR R0,[R1,#4];
复制代码
5、相对寻址
与基址变址寻址方式相类似,相对寻址Pc指针的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。以下程序段完成子程序的调用和返回,跳转指令BL采用了相对寻址方式:
BL NEXT ;跳转到子程序NEXT处执行
………
NEXT
……….
MOV PC ,LR ; 从子程序返回
cd340823 2020-8-30 08:05:46
希望楼主可以多讲讲微机原理方面的知识,谢谢
回复

举报

Prometheus001 2020-9-10 11:55:01
厉害。。。。。。。。。。?。。。。?
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表