ARM7的相关寄存器

本文转自百度文档

 ARM7的相关寄存器

            
    在汇编语言中寄存器 R0~R13 为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。

    其中 R0~R7 为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的 32 位物理寄存器。寄存器 R8~R14 为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。寄存器 R8~R12 有两个分组的物理寄存器。一个用于除 FIQ 模式之外的所有寄存器模式,另一个用于 FIQ 模式。这样在发生 FIQ 中断后,可以加速 FIQ 的处理速度。寄存器 R13、 R14 分别有 6 个分组的物理寄存器。一个用于用户和系统模式,其余 5 个分别用于 5 种异常模式寄存器 R13 常作为堆栈指针( SP)。在 ARM 指令集当中,没有以特殊方式使用 R13 的指令或其它功能,只是习惯上都这样使用。但是在 Thumb 指令集中存在使用 R13 的指令。R14 为链接寄存器( LR),在结构上有两个特殊功能:
1,在每种模式下,模式自身的 R14 版本用于保存子程序返回地址;

2,当发生异常时,将 R14 对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。

    R14 寄存器注意要点:当发生异常嵌套时,这些异常之间可能会发生冲突。例如:如果用户在用户模式下执行程序时发生了 IRQ 中断,用户模式寄存器不会被破坏。但是如果允许在 IRQ 模式下的中断处理程序重新使能 IRQ 中断,并且发生了嵌套的 IRQ中断时,外部中断处理程序保存在 R14_irq 中的任何值都将被嵌套中断的返回地址所覆盖。解决办法是确保 R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将 R14 入栈),或者切换到其它处理器模式下。寄存器 R15 为程序计数器( PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果 R15 使用的方式超出了这些限制,那么结果将是不可预测的。

    寄存器 CPSR 为程序状态寄存器,在异常模式中,另外一个寄存器程序状态保存寄存器( SPSR)可以被访问。每种异常都有自己的 SPSR,在因为异常事件而进入异常时它保存 CPSR 的当前值,异常退出时可通过它恢复 CPSR。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值