历史上的今天
今天是:2024年11月26日(星期二)
2021年11月26日 | ARM基础学习-寄存器
2021-11-26 来源:eefocus
大学的时候学习过一段时间汇编,现在出来工作发现还需要捡起这些东西重新去学习,接下这一段时间先集中整理ARM的基础知识,然后扩展到ARMv8学习64位框架,然后学习MMU,学习它的中断处理方式;这篇文章以基础为主学习ARM寄存器;
寄存器分类
ARM也可以理解成一个芯片,它也有自己的寄存器,实现与memory之间的数据传递; ARM处理器共有37个寄存器,其中包括:
i. 31个通用寄存器,包括程序计数器(PC)在内。都是32位寄存器
ii. 6个状态寄存器,都是32位寄存器;
下面位arm 的6中模式所对应的寄存器:

ARM处理器有7种不同的处理器模式,在每一种处理器模式中有一组相应的寄存器组。在所有的寄存器中,有些是各模式共用的同一个物理寄存器,有些是各模式自己拥有的独立的物理寄存器。
简单介绍下ARM处理器模式:
用户模式(User): ARM处理器正常的程序执行状态;
快速中断模式(FIQ): 用于高速数据传输或通道处理;
外部中断模式(IRQ): 用于通用的中断处理;
管理模式(Supervisor): 操作系统使用的保护模式;
数据访问终止模式(Abort): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护;
系统模式(System): 运行具有特权的操作系统任务;
未定义指令中止模式(Undifined):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真;
通用寄存器可以分为3类:未备份寄存器(R0~R7)、备份寄存器(R8~R14)和程序计数器PC(R15)。对于每一个未备份寄存器来说,在所有的处理器模式下指的都是同一个物理寄存器。应备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器(中断模式和非中断模式);
特殊寄存器
下面依次介绍几个特殊寄存器:
PC(程序计数器) R15 = windows 中 EIP
处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条取指指令的地址.程序计数器(PC)正是起到这种作用,所以通常又称之为‘指令计数器’;
因为ARM采用流水线机制,当正确读取PC值得时候,该值为当前指令地址加八个字节,也就是指向当前指令下两个条指令的地址;PC的第0位和第1为始终为0;
backtrace:
#00 pc 00000988 /system/vendor/lib/libcancer.so (_ZN7android6Cancer15destroyInstanceEv+39)
//#00 pc表示异常发生时的PC值在库函数里的偏移;
#01 pc 0001db9d /system/vendor/lib/libcam.client.so (_ZN7android15NSDisplayClient13DisplayClient4initEv+60)
//#01 pc表示在DisplayClient4initEv函数调用下一个函数接口在库函数里里的偏移;
#02 pc 0000d145 /system/vendor/lib/libcam.device1.so (_ZN7android14Cam1DeviceBase17initDisplayClientEP18preview_stream_ops+684)
2.栈指针寄存器 SP (寄存器 R13)
ARM处理器中通常将寄存器R13作为栈指针(SP)。ARM处理器针对不同的模式,共有 6 个栈指针(SP),其中用户模式和系统模式共用一个SP,每种异常模式都有各自专用的R13寄存器(SP)。它们通常指向各模式所对应的专用栈,也就是ARM处理器允许用户程序有六个不同的栈空间,ARM处理器中的R13被用作SP。当不使用堆栈时,R13 也可以用做通用数据寄存器.

3.R14称为子程序链接寄存器LR(Link Register)
当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份.在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。以上的描述可用指令完成。
i. 每一种处理器模式自己的物理R14中存放当前子程序的返回地址。当通过BL或BLX指令调用子程序时,R14被设置成该子程序的返回地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即返回。
ii. 当异常中断发生时,该异常模式特定的物理R14被设置成该异常模式将要返回的地址,对于有些异常模式,R14的值可能与将返回的地址有一个常数的偏移量。具体的返回方式与子程序返回方式基本相同。
00000764 764: b082 sub sp, #8 766: 2002 movs r0, #2 768: 9001 str r0, [sp, #4] 76a: b002 add sp, #8 76c: 4770 bx lr //返回地址 4.PSR 寄存器(状态寄存器) CPSR(当前程序状态寄存器)它包含了条件标志位,中断禁止位,当前处理器模式标志以及一些控制和状态位,SPSR 备份程序状态寄存器,当特定的异常中断模式发生时。这个寄存器存放当前程序状态寄存器的内容,异常中断程序退出时候,可以用SPSR来恢复CPSR,由于用户模式和系统模式不是异常中断模式,所以没有SPSR; 高4位(28-31):条件标志位(Condition code flags): N,Z,C,V. 这些位可以通过逻辑或者算术操作, 或者 MSR 和 LDM 指令来操作. 处理器会测试这些标志位,以确定是否操作一些指令. - N: 负数 ? 1 : 0 - Z: 运算结果为0 ? 1 : 0 - C: 进位标志.(4中情况) 1. 加法指令(包括CMN): 当结果产生了进位,则为1,表示无符号数运算发生溢出; 2. 减法指令(包括CMP): 当运算中发生了错位,为1, 表示运算发生下溢出; 3. 对已在操作数中包含移位操作的运算指令,C被置为被移位寄存器最后移出去的位; 4. 对于其他非加/减的运算指令,c一般不收影响; - V: 溢出标志位: 对于加减法,当操作数和运算结果都是以二进制的补码表示的带符号的数,切运算结果超出了有符号运算的范围溢出,V=1. 低8位(0-7):当发生异常时, 这些为的值将发生相应的变化.在特权模式下,也可以通过软件来修改这些位.用的比较多. 1. *中断禁止位* (I=1, IRQ禁止; F=1, FIQ禁止). 2. *状态控制位* (T=0, 处于ARM状态,即可执行32的ARM指令, 否则处于Thumb状态). 3. *模式控制位* ( M[4:0],这5位组合控制处理器处于什么工作模式) 参考书籍 ARM体系结构编程 - 杜春雷 

上一篇:ARMv8-中断处理接口
史海拾趣
|
前言 随着市场的发展,现在的MP3播放器品种越来越多,价钱也越来越实惠。也越来越多的MP3进入了用户的口袋。可以说是MP3随身听丰富了个人的世界,能随时随地随心所欲地欣赏美妙音乐。作为随身听,MP3的最终目的是还原真实的音乐。作为音响爱好者, ...… 查看全部问答> |
|
我在用1602LCD液晶时,它要求在30H-33H输出一组数据,34H-35H输出一组数据,这个地址是怎么回事?这个地址是连续的可输出的时候中间还有一段字符是怎么输出 的。请教高手,谢谢… 查看全部问答> |
|
各位大虾,小弟这几天调试ARM板,发现一个问题,本来开机后系统运行的很流畅,过一会后发现系统时间变成0:00了,于是小弟打开了时间设置界面进行时间设置,发现系统变得极卡无比,关机开机后也运行的很卡,不知道有没有人遇见这种问题,请各位大虾 ...… 查看全部问答> |
|
【lbing7】 您好,麻烦您能给推荐几本PIC单片机方面的经典书籍吗?希望能够以实践为主来讲的电子书籍,最后把下载地址也告诉我下,谢谢 您好,麻烦您能给推荐几本PIC单片机方面的经典电子书籍吗?希望能够以实践为主来讲的电子书籍,最好把下载地址也告诉我下,谢谢… 查看全部问答> |
|
windows xp 与 windows ce 嵌入式系统的usb通信 现有一个条形码识别掌机, 掌机系统为 windows ce.net 6.0, 有usb接口。 将掌机usb接口直接与windows vista电脑相接,不需要任何操作就可以实现通信。 但将掌机与windows xp相接,用了很多方法都不行,比如安装一个activesync 4.5,在连接 ...… 查看全部问答> |
|
可用于主控制的接口有CH375,SL811,还有吗?用于从控制的就多了,如PDIUSBD12,还有MCU内置,如C8051F340就内置USB控制器. 这写USB从控制器能用作主控制器吗?谢谢!… 查看全部问答> |
|
上一贴:跟着套件光盘入门LM3S811 https://bbs.eeworld.com.cn/thread-290441-1-1.html 刚拿到手一看,以为白色那块是LCD来的,细看一眼,原来就是一块塑料板导光板而已。之前看到带OLED Display的LM3S811,原来是另有其板。后来看了光盘 ...… 查看全部问答> |
|
DSP2812的I/O口异常,导致复位功能异常的分析,请大家帮忙? 本人最近遇到一个问题,DSP2812在环境温度较高时复位功能异常的问题。 具体情况是: 1)70°环境温度下,DSP2812工作10分钟之后,人工将DSP2812的复位XRS引脚强制拉低,随后恢复XRS引脚至高电平状态,则DSP2812死机。 即在高温情况下,DSP2812的复 ...… 查看全部问答> |




