ARM汇编之寄存器

发布者:532829319hmk最新更新时间:2017-11-28 来源: eefocus关键字:ARM  汇编  寄存器 手机看文章 扫描二维码
随时随地手机看文章

在ARM处理器内部共有37个用户可访问的寄存器,分别为

31个通用的32位寄存器和6个状态寄存器。

一.通用寄存器:

1.在汇编语言中,寄存器R0-R13为保存数据或地址值的通用寄存器。

2.其中寄存器R0-R7为未分组的寄存器。

对于任何处理器模式,它们都共享R0~R7的通用寄存器。

3.寄存器R8-R12为两个分组的物理寄存器。

   a.FIQ拥有自己独立的R8~R12的通用寄存器。

   b.其他六种处理器模式共享R8~R12的通用寄存器

注:寄存器R8~R12在ARM体系结构中没有特定的用途。

给FIQ单独的R8~R12可实现快速的中断处理(在发生FIQ中断后,处理器不用为了保护寄存器而浪费时间,从而提高了FIQ的处理速度)

4.寄存器R13和R14

a.     用户模式和系统模式公用R13和R14的寄存器内容。

b.    其它五个模式拥有自己独立的R13和r14寄存器内容。

c.     R13作为堆栈指针(SP),用于保存待使用的寄存器内容。

d.    寄存器R14称为链接寄存器(LR),它的作用有两个:

l  当使用BL指令调用子程序时,系统会自动将 BL指令的下一条指令的地址存入R14中。

Ø  程序A指令过程中调用程序B

Ø  程序跳转至标号Lable处,执行程序B.

Ø  系统将BL Lable指令的下一条指令所在地址存入R14中

Ø  程序B执行最后,执行语句MOV PC,LR将R14寄存器的内容放入PC处,返回至NEXT处继续执行。



 

l  当发生异常时,系统自动将异常的返回地址放入R14中(有些异常有一个小的固定的偏移量)

二.重要的寄存器

1.堆栈指针R13

R13作为堆栈指针SP。在ARM指令集中,由于没有以特殊方式使用R13的指令。(在Thumb)指令集中存在使用R13的指令)

每个异常模式都有其自身的R13分组版本,它通常指向由异常模式所专用的堆栈。在入口处,异常处理程序通常将其他要使用的寄存器值保存到这个堆栈。通过返回时将这些值重装到寄存器中。异常处理程序可确保异常发生时的程序状态不会被破坏。

2.链接寄存器R14

寄存器R14(也称为链接寄存器或LR)在结构上有两个特殊功能:

1>在每种模式下,模式自身的R14用于保存子程序返回地址。

a.     当使用BL或BLX指令调用子程序时,R14设置为子程序返回地址。

b.    子程序返回通过将R14复制到程序计数器来实现。(p41)

2>当发生异常时,将R14对应的异常模式设置为返回地址。异常返回的执行类似于子程序返回,只是使用稍微不同的指令来确保被异常中断的程序状态能够完全恢复。

3.程序计数器R15

1>R15里存放的是正在取值的指令。

而人们一般习惯的约定将“正在执行”的指令作为参考点,则:PC=当前程序执行位置+8

 

2>七种模式共用R15寄存器。

3>由于ARM指令总是以字节为单位,所以R15寄存器的最低两位总是为0。

注:

1.    当指令对R15的读取没有超过任何对R15使用的限制时,对R15读取的值是指令的地址加上8字节。

2.    用命令读取PC的方式主要用于对附近的数据进行快速,与位置无关的寻址,包括程序中与位置无关的移动。

3.    但是在使用STR或STM指令保存时,会出现两种情况:

A.     这些指令可将指令地址加8字节保存(和其它指令读取R15一样)

B.     这些指令或将指令自身地址加12字节。

这与具体的芯片有关。

由于这个原因,使用STR和STM指令是不可移植的。

因此,我们要避免使用STR和STM指令来保存R15.

4.    使用下面的程序可以看到这个具体的偏移量。

5.    写R15的一般限制:写如R15值的bit[1:0] 必须为0b00;如果不是,则结果将不可预测。

6.    大多数指令通过指令所指的偏移量与PC值相加并将结果写入PC来计算目标地址:

(当前指令的地址)+8+偏移量。

7.    正常连续执行的指令实际上是通过计算:

(当前指令的地址)+4

来计算下一条要执行的指令。

注:区别两个概念:

1.    跳转目标的计算方法:

(当前指令的地址)+8+偏移量

2.    下一条指令位置的计算方法:

(当前指令的地址)+4

三.当前程序状态寄存器

在ARM内核中包含1个CPSR和5个供异常处理程序使用的SPSR.

先来看图


1.    CPSR(当前程序状态寄存器)

1>七中模式共享一个程序状态寄存器。

2>在进入异常模式中,另外一个寄存器程序状态保存寄存器SPSR可以被访问(系统和用户模式没有SPSR寄存器,其它五中模式都有其自己独立的SPSR寄存器)。在进入异常时,它保存CPSR的当前值;在异常退出时,可通过它恢复CPSR.

作用:反映当前处理器的状态,其包含:

a.4个条件标志位(负标志位N,零标志Z,近位标志位C和溢出标志位V)

b.2个中断禁止位,分别用于一种类型的中断。

c.5个对当前处理器模式进行编码的位

d.1个用于指示当前处理器状态的标志位(t)

John哥说明:

切记在修改寄存器中的值时,要采用读-修该-写的方式。

(首先读出目标寄存器中的数据,再对关心的比特进行修改,之后将准备好的数据写回到目标寄存器中。)

这样做的好处是:

1.不会改变原来不相关管脚的功能属性。

2.不会影响到寄存器中保留位的数据。

eg:PINSEL0 = (PINSEL0 & (~(3<<10)) |( 2<<10);

这时一种良好的写法,他实现了对P0.5端脚的修改(即对PINSEL0寄存器中的11:10位比特位进行修改,对于他实现的功能请查阅数据手册,这里不做解释)

尽量不要采用直接对寄存器写的操作,因为这样可能把寄存器中的所用值都修改了。那么它的后果,我想哥不说你也明白。

2.    条件代码标志:

N:当该位为1时:表示负数。为0时:表示正数。

Z:当该位为1时:表示两数相等。为0时:表示两数不相等。

C:当该为1时:若为加法运算(含CMN)表示产生进位,否则C=0;

      当该位为1时:若为减法运算(含CMP)表示不借位,否则C=0(即产生借位)

    注:对于移位运算C为最后的移出值,其他指令C通常不变。

V:当该位为1时:使用加法/减法运算时,表示有符号溢出。;否则V=0;

注:

在ARM中,所用指令都可按条件来执行。

在Thumb中,只有分支指令可条件执行。

3.    控制位:

CPSR的最低8位为控制位。分别是中断禁止位,T位,模位。

1>  当发生异常时,控制位改变。当处理器在一个特权模式下操作时,可用软件操作这些位。

a.     中断标志位:

当I位为1时,IRQ中断被禁止

当F位为1时,FIQ中断被禁止.

b.    T位:

该位反映了处理器状态:

当T位为1时,处理器处于Thumb状态下运行。

当T位为0时,处理器处于ARM状态下运行。

John哥说明:

绝对不要强制改变CPRS寄存器中的T位,否则处理器会进入一个无法预测的状态,那么你也就杯具了。

2>  模式为

M4,M3,M2,M1和M0位都是模式位。这些位决定处理器的操作模式(不是所用模式位的组合都定义有有效的处理器模式,因此注意不要使用表中未列出的组合。

看个图:


 

Tiger说明:

1.切记不可把非法的值写入模式位,否则处理器将进入一个无法恢复的模式。如果你这样做了,tiger恭喜你杯具了。那么你现在要做的就是按下开发板的复位键,严重的就只能拔掉电源。重新启动了

2.在对CPRS寄存器进行操作时,不能操作保留位。

3.每个异常模式还带有一个程序状态保存寄存器(SPSR),它用于保存任务在异常发生之前的CPSR.

四.Thumb状态下的寄存器

1.Thumb状态寄存器是ARM状态集的子集,它有

l  8个通用寄存器(R0~R7)

l  程序计算器(PC)

l  堆栈指针(SP)

l  链接寄存器(LR)

l  当前程序状态寄存器(CPSR)

1>  七个模式公用8个通用寄存器(R0~R8)。

2>  SP(堆栈指针寄存器),对应ARM状态下的寄存器R13,每个异常模式都有其自己独立的SP,SP指向各异常模式所专用的堆栈。

<在发生异常时,处理器会自动进入ARM状态。>

3>  链接寄存器(LR)对应ARM状态寄存器R14.

发生异常时,处理器自动进入ARM状态。

4>  当前程序状态寄存器(CPSR)对应ARM状态寄存器R14。.

2.Thumb状态寄存器和ARM状态寄存器之间的映射。

1>  Thumb 状态中的R0~R7与ARM状态R0~R7相  同。

2>  Thumb状态中的SP映射到ARM状态下的R13中

3>  Thumb状态中的LR映射到ARM状态R14中。

4>  Thumb状态中的PC映射到ARM状态R15(PC)寄存器中。

5>  Thumb状态CPSR(在Thumb状态中无SPSR)与ARM状态CPSR相同。

 

注:在Thumb中,高端寄存器的访问是受到限制的,只有MOV,CMP和ADD指令可以对其访问,可以用于数据的快速暂存。


关键字:ARM  汇编  寄存器 引用地址:ARM汇编之寄存器

上一篇:ARM7的体系结构
下一篇:STM32 串口烧写 FLASH 外部字库 UCGUI显示 自我学习总结

推荐阅读最新更新时间:2024-03-16 15:47

单片机汇编实验五-2:单片机与PC机串行通信实验
实验要求:AT89S52串行通信口工作在方式1,8位UART方式,允许接收,9600bps。在PC机上运行串口调试软件。编程实现:AT89S52内部定时器1,按方式1工作,每1秒钟内部RAM30H单元内容加1,并通过串行通信口送PC机显示。 //This is the fifth_2 program of homework //This is made by WQ Data:2013/3/4/ ORG 0000H AJMP MAIN ORG 0023H //0023H 串口中断程序的入口地址 AJMP Transfer ORG 000BH //000BH 计时器程序T0
[单片机]
单片机定时器的应用与误差纠正
1 前言    定时器是MCS-51单片机非常重要的组成部分,由于其应用与单片机的其他硬件相关,存在着一定的复杂性 。而定时器是单片机应用中解决某类复杂问题的最有为效的方法,应用非常广泛。随着定时要求的提高,在定时处理过程中所带来的误差需要校正 ,本文就MCS-51单片机的使用方法与误差校正方法进行了讨论,并给出通用算法与程序。 2 定时器工作方式与方式设置    MCS-51单片机有两路独立的定时器,每路定时器有4种工作方式(0~3),方式0是13位计数结构,计数器由TH全部8位与TL的低5位构成;方式1是16位计数结构,计数器由TH与TL全部8位共16位组成;方式2是8位计数结构方式,计数器由TL8位组成,与其他方式不同
[单片机]
ARM JTAG仿真器电路讨论
简介:以下是我在实践中的一些积累,发现这点是因为我在尝试用对SAMSUNG S3C44B0 JTAG适用的编程板电路给SAMSUNG的另一款ARM9内核MPU S3C2440 JTAG编程时出现问题,查阅了一些资料后最终解决。希望这些对那些在自制ARM JTAG编程器上遇到困难的朋友一点帮助。 一. JTAG仿真器的实质 JTAG (Joint Test Action Group) 编程调试实质上是利用了MCU/MPU片上自带的跟踪调试功能(需MCU/MPU硬件支持)。JTAG编程板一端与PC的并口相连,另一端连接至目标板,由于通常的MCU/MPU的工作电压在1.8V-3.6V之间,而PC机并口输出的电平逻辑为5V,因此需做电
[单片机]
<font color='red'>ARM</font> JTAG仿真器电路讨论
STM8L外部中断为何死循环 寄存器操作
STM8L 系列单片机是 ST公司推出的低功耗单片机,与STM8S系列相比功耗降低了很多,但内部结构也删减了很多,使用时一定要仔细阅读手册。 这是第一次使用STM8,实现功能不是很复杂就没想研究库函数,准备直接控制寄存器操作,没想到本人 因为中断问题纠结了大半天。 在外部中断中这一点很不同, STM8S自动清除外部中断,而STM8L是需要软件清除, 清除标志位的寄存器根据设置而不同,下面有说明。 下面以STM8L外部中断 PB1为例 说明外部中断 寄存器操作 设置外部中断有下面几步: 第一步、设置IO口为中断输入 通过设置 (PB_DDR |= 0X00; PB_CR1 |= 0X02; PB_CR2 |= 0X02;)
[单片机]
STM8L外部中断为何死循环 <font color='red'>寄存器</font>操作
基于ARM7 TDMI-S CPU的LPC2103的多功能电子钟
一、课程设计内容与要求 1)时钟显示功能,采用数码管的动态扫描工作方式,可通过键盘分别选择显示年或者月/日或者时/分或者分/秒, 2)在键盘电路中,第一次中断判断有无键按下,若有按下则实行定时一次,下一次中断开始扫描。 3)具有校准年、月、日、时、分的功能。 4)闹钟功能,可按设定的时间闹时,随时开启或关闭闹钟。 二、元器件的介绍 我在这次的课程设计中使用的主芯片是LPC2103,下面对其进行简要的介绍。 LPC2103是一个基于支持实时仿真的16/32位ARM7 TDMI-S CPU的微控制器,并带有32kB的嵌入高速Flash存储器,128位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速
[单片机]
基于<font color='red'>ARM</font>7 TDMI-S CPU的LPC2103的多功能电子钟
GNU ARM汇编--(三)ARM处理器的基本原则
这一篇的知识来源全部来自《ARM System Developer's Guide》 从编程人员的视角来看,arm核是由数据总线连接的功能单元组成,如下图所示: 数据通过数据总线流向处理器核心,这里的数据可以是将要执行的指令,也可以是数据项.上面的图是Von Neumann体系的arm核,数据项和指令共用同一总线.而h哈佛结构体系的arm核就会用两个不同的总线. 就像所有的RISC处理器,arm采用load-store体系结构.也就是说它含有两条不同的指令类型来出入处理器.loar指令将数据从内存拷贝到寄存器,store指令是将数据从寄存器拷贝到内存.没有直接操作内存中数据的数
[单片机]
GNU <font color='red'>ARM</font><font color='red'>汇编</font>--(三)<font color='red'>ARM</font>处理器的基本原则
基于μC/OS-Ⅱ和ARM的超声波测距系统设计
1 引言   超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而用于距离测量。利用超声波检测往往较迅速、方便、计算简单、易于实时控制,且测量精度能达到工业实用要求,因此在移动机器人的研制中得到广泛应用。移动机器人要在未知和不确定环境下运行,必须具备自动导航和避障功能。超声波传感器以其信息处理简单、速度快和价格低的特点广泛用作移动机器人的测距传感器,实现避障、定位、环境建模和导航等功能。   2 系统总体设计方案   2.1 超声波测距原理   2.1.1 超声波发生器   超声波为直线传播方式,频率高,反射能力强。空气中其传播速度为340 m/s,容易控制,受环境影响小。因此采用超生波传感器作为距离探测的“眼睛”,可用
[单片机]
基于μC/OS-Ⅱ和<font color='red'>ARM</font>的超声波测距系统设计
Nordic Semiconductor 与 Arm 扩展合作关系
签署最新低功耗处理器设计、软件平台和安全 IP 许可协议 Nordic签署 Arm Total Access 授权许可协议,确保其现有和未来的多协议、Wi-Fi、蜂窝物联网和DECT NR+ 产品具备业界领先的处理器和安全技术 挪威奥斯陆 – 2024年2月20日 – Nordic Semiconductor宣布与世界领先的半导体设计和软件平台企业Arm签署一项多年期Arm Total Access (ATA)授权许可协议 。ATA 保证为Nordic当前和未来的产品 (包括多协议、Wi-Fi、蜂窝物联网和 DECT NR+ 解决方案) 提供广泛的Arm® IP、工具、支持和培训。 两家企业的合作始于 2012
[物联网]
Nordic Semiconductor 与 <font color='red'>Arm</font> 扩展合作关系
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved