ARM处理器寄存器
ARM处理器9种基本寻址方式

寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式,ARM处理器有9 种基本寻址方式。
1.寄存器寻址操作数的值在寄存器中,指令中的地址码字段给出的是寄存器编号,寄存器的内容是操作数,指令执行时直接取出寄存器值操作。
例如指令:MOV R1,R2 ;R1←R2SUB R0,R1,R2 ;R0←R1- R22.立即寻址在立即寻址指令中数据就包含在指令当中,立即寻址指令的操作码字段后面的地址码部分就是操作数本身,取出指令也就取出了可以立即使用的操作数(也称为立即数)。
立即数要以“#”为前缀,表示16进制数值时以“0x”表示。
例如指令:ADD R0,R0,#1 ;R0←R0 + 1MOV R0,#0xff00 ;R0←0xff003.寄存器移位寻址寄存器移位寻址是ARM指令集特有的寻址方式。
第2个寄存器操作数在与第1个操作数结合之前,先进行移位操作。
例如指令:MOV R0,R2,LSL #3 ;R2的值左移3位,结果放入R0,即R0=R2 * 8 ANDS R1,R1,R2,LSL R3 ;R2的值左移R3位,然后和R1相与操作,结果放入R1可采用的移位操作如下:LSL:逻辑左移(Logical Shift Left),寄存器中字的低端空出的位补0。
LSR:逻辑右移(Logical Shift Right),寄存器中字的高端空出的位补0。
ASR:算术右移(Arithmetic Shift Right),移位过程中保持符号位不变,即如果源操作数为正数,则字的高端空出的位补0,否则补1ROR:循环右移(Rotate Right),由字的低端移出的位填入字的高端空出的位RRX:带扩展的循环右移(Rotate Right extended by 1 place),操作数右移一位,高端空出的位用原C 标志值填充。
各移位操作过程如图所示。
4.寄存器间接寻址指令中的地址码给出的是一个通用寄存器编号,所需要的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针,操作数存放在存储器中。
arm9处理器的内部寄存器结构

arm9处理器的内部寄存器结构
ARM9处理器是一种32位的嵌入式处理器,内部包含了多种寄存器,这些寄存器扮演着不同的角色,用于存储不同类型的数据和指令,从而实现处理器的各种功能。
ARM9处理器的内部寄存器结构主要包括:
1.通用寄存器:ARM9处理器有16个32位的通用寄存器,这些寄存器不仅可以用于存储数据,还可以用于存储指令中的操作数。
通用寄存器还可以用于存储函数的参数和返回值。
2.程序计数器(PC):程序计数器是一个32位的寄存器,用于存储当前正在执行的指令的地址。
当处理器执行完一条指令后,PC会自动递增,指向下一条指令的地址。
3.状态寄存器:状态寄存器用于存储处理器的当前状态。
例如,它可以用于存储处理器的运行模式,或者存储处理器的条件码。
4.堆栈指针(SP):堆栈指针用于指向当前的堆栈顶部。
当处理器需要执行函数调用或其他需要使用堆栈的指令时,它会将数据压入堆栈中,并将堆栈指针减小。
当函数返回时,处理器会将数据从堆栈中弹出,并将堆栈指针增加。
5.链接寄存器(LR):链接寄存器用于存储函数调用的返回地址。
当函数被调用时,处理器将当前指令的地址存储在LR中。
当函数执行完毕后,处理器会将LR中的地址作为返回地址,跳转回调用函数的地方。
6.中断寄存器:中断寄存器用于存储当前中断的状态。
当处理器
接收到一个中断时,它会将当前的状态保存在中断寄存器中,并跳转到中断处理程序的地址。
总之,ARM9处理器的内部寄存器结构是非常复杂的,不同类型的寄存器扮演着不同的角色。
通过合理地利用这些寄存器,程序员可以实现各种复杂的嵌入式应用。
ARM处理器的三大特点

ARM处理器的三大特点是:耗电少功能强、16位/32位双指令集和合作伙伴众多。
1、体积小、低功耗、低成本、高性能;2、支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;3、大量使用寄存器,指令执行速度更快;4、大多数数据操作都在寄存器中完成;5、寻址方式灵活简单,执行效率高;6、指令长度固定。
编辑本段ARM处理器的历史1978年12月5日,物理学家赫尔曼·豪泽(Hermann Hauser)和工程师Chris Curry,在英国剑桥创办了CPU公司(Cambridge Processing Unit),主要业务是为当地市场供应电子设备。
1979年,CPU公司改名为Acorn计算机公司。
起初,Acorn公司打算使用摩托罗拉公司的16位芯片,但是发现这种芯片太慢也太贵。
"一台售价500英镑的机器,不可能使用价格100英镑的CPU!"他们转而向Intel公司索要80286芯片的设计资料,但是遭到拒绝,于是被迫自行研发。
1985年,Roger Wilson和Steve Furber设计了他们自己的第一代32位、6M Hz的处理器,Roger Wilson和Steve Furber[1]用它做出了一台RISC指令集的计算机,简称ARM(Acorn RISC Machine)。
这就是ARM这个名字的由来。
RISC的全称是"精简指令集计算机"(reduced instruction set computer),它支持的指令比较简单,所以功耗小、价格便宜,特别合适移动设备。
早期使用ARM芯片的典型设备,就是苹果公司的牛顿PDA。
20世纪80年代后期,ARM很快开发成Acorn的台式机产品,形成英国的计算机教育基础。
1990年11月27日,Acorn公司正式改组为ARM计算机公司。
苹果公司出资150万英镑,芯片厂商VLSI出资25万英镑,Acorn本身则以150万英镑的知识产权和12名工程师入股。
ARM的37个寄存器详解

ARM的37个寄存器详解ARM寄存器ARM共有37个32位物理寄存器,7种⼯作模式下可访问的寄存器见下表,User和System使⽤完全相同的物理寄存器。
2.1 R0~R7所有⼯作模式下,R0-R7都分别指向同⼀个物理寄存器(共8个物理寄存器),它们未被系统⽤作特殊的⽤途。
在中断或异常处理进⾏⼯作模式转换时,由于不同⼯作模式均使⽤相同的物理寄存器,可能造成寄存器中数据的破坏。
2.2 R8~R12在User&System、IRQ、Svc、Abt和Und模式下访问的R8~R12都是同⼀个物理寄存器(共5个物理寄存器);在FIQ模式下,访问的R8_fiq~R12_fiq是另外独⽴的物理寄存器(共5个物理寄存器)。
2.3 R13和R14在User&System、IRQ、FIQ、Svc、Abt和Und访问的R13_~R14都是各⾃模式下独⽴的物理寄存器(共12个物理寄存器)。
R13在ARM指令中常⽤作堆栈指针(SP),但这只是⼀种习惯⽤法,⽤户也可使⽤其他的寄存器作为堆栈指针。
⽽在Thumb指令集中,某些指令强制性的要求使⽤R13作为堆栈指针。
由于处理器的每种⼯作模式均有⾃⼰独⽴的物理寄存器R13,在⽤户应⽤程序的初始化部分,⼀般都要初始化每种模式下的R13,使其指向该⼯作模式的栈空间。
这样,当程序进⼊异常模式时,可以将需要保护的寄存器放⼊R13所指向的堆栈,⽽当程序从异常模式返回时,则从对应的堆栈中恢复,采⽤这种⽅式可以保证异常发⽣后程序的正常执⾏。
R14称为链接寄存器(Link Register),当执⾏⼦程序调⽤指令(BL)时,R14可得到R15(程序计数器PC)的备份。
在每⼀种⼯作模式下,都可⽤R14保存⼦程序的返回地址,当⽤BL或BLX指令调⽤⼦程序时,将PC的当前值复制给R14,执⾏完⼦程序后,⼜将R14的值复制回PC,即可完成⼦程序的调⽤返回。
以上的描述可⽤指令完成。
执⾏以下任意⼀条指令:MOV PC, LRBX LR在⼦程序⼊⼝处使⽤以下指令将R14存⼊堆栈:STMFD SP!,{,LR}对应的,使⽤以下指令可以完成⼦程序返回:LDMFD SP!,{,PC}R14也可作为通⽤寄存器。
arm通用寄存器及其别名

AMR寄存器的别名+ APCS默认情况下,arm处理器中的通用寄存器被称为:r0、r1...r14等,在APCS中为arm通用寄存器定义了别名。
在某些情况下(比如多人协作编辑汇编代码,或需要修改其它人所写的汇编代码时),使用APCS所定义的别名有助于提高代码的可读性和兼容性。
arm通用寄存器及其别名对照表:The following register names are predeclared:r0-r15 and R0-R15a1-a4 (argument, result, or scratch registers, synonyms for r0 to r3)v1-v8 (variable registers, r4 to r11)sb and SB (static base, r9)ip and IP (intra-procedure-call scratch register, r12)sp and SP (stack pointer, r13)lr and LR (link register, r14)pc and PC (program counter, r15).arm中r12的用途原文作者在维护1个以前的程序,该程序包括应用、库文件以及linux device driver。
该程序原来使用arm-linux-gcc 3.4.3编译,现在改用arm-linux-gcc 4.1.1进行编译时发现程序无法运行。
经原文作者测试,发现当使用shared library形式编译程序后无法运行,而使用static linking形式编译程序后可正常运行。
这是由于在arm-linux-gcc 4.1.1所使用的新的规范中,r12不仅作为通用寄存器,还被称为Intra-Procedure-call scratch register。
Register r12 (IP) may be used by a linker as a scratch register between a routine and any subroutine it calls (for details, see §5.3.1.1, Use of IP by the linker). It can also be used within a routine to hold intermediate values between subroutine callsBoth the ARM- and Thumb-state BL instructions are unable to address the full 32-bit address space, so it may be necessary for the linker to insert a veneer between the calling routine and the called subroutine. Veneers may also be needed to support ARM-Thumb inter-working or dynamic linking. Any veneer inserted must preserve the contents of all registers except IP (r12) and the condition code flags; a conforming program must assume that a veneer that alters IP may be inserted at any branch instruction that is exposed to a relocation that supports inter-working or long branches.——引用自:"Procedure Call Standard for the ARM Architecture"19th January, 2007, Richard Earnshaw.由上述说明可知,若在汇编代码中使用了bl命令,而r12又被作为通用寄存器使用时,则r12的值可能会被链接器插入的veneer代码所修改,若是单纯的c源码则不会出现此问题。
armcpsr寄存器状态位计算

Arm架构中的CPSR寄存器是一个特殊的寄存器,用于存储程序状态和控制位。
在这篇文章中,我们将深入探讨CPSR寄存器中的状态位计算,包括其作用、计算方法和相关的指令。
1. CPSR寄存器概述CPSR寄存器是Arm架构中的一个32位寄存器,用于存储程序状态和控制位。
它包括四个字段:程序状态标志位(N、Z、C、V)、控制位(I、F、T)、保留位(保留为0)和模式位(M)。
2. 状态位作用程序状态标志位(N、Z、C、V)用于存储运算结果的状态信息,分别代表负数、零、进位和溢出。
控制位(I、F、T)用于控制中断、协处理器访问和Thumb指令集的切换。
3. 状态位计算方法状态位的计算方法通常是通过指令执行的结果来确定。
在进行算术运算时,根据运算结果的正负、是否为零、是否有进位和是否有溢出来设置相应的状态位。
4. 相关指令在Arm指令集中,有一些专门用于状态位计算的指令,如CMP(比较指令)、TST(测试指令)和TEQ(异或测试指令)。
这些指令可以根据操作数的不同情况来修改状态位。
5. 状态位的应用状态位在程序的控制流程、条件执行和错误处理等方面起着重要作用。
程序可以根据状态位的取值来进行条件分支、异常处理和错误检测等操作。
6. 总结CPSR寄存器中的状态位计算是Arm架构中的重要内容,它对程序的执行流程和控制起着关键作用。
通过深入理解状态位的作用、计算方法和相关指令,可以更好地编写高效、稳定的Arm程序。
通过以上内容的论述,相信读者对Arm架构中的CPSR寄存器状态位计算有了更加深入的了解。
希望本文能对读者有所帮助。
7. 状态位计算的优化策略在实际的程序开发中,状态位计算具有重要的意义,优化状态位计算的策略也是非常重要的。
针对状态位计算的优化,可以采取以下几点策略:- 使用逻辑右移:在进行状态位计算时,可以使用逻辑右移操作来提高效率。
通过逻辑右移操作,可以快速获取运算结果的最低位,从而方便进行状态位的计算。
举例arm芯片的三个专用寄存器的名称

ARM体系结构是一种经典的32位精简指令集(RISC)处理器架构。
在ARM处理器架构中,有许多专用寄存器用于特定的功能,例如控制处理器状态、存储系统和I/O设备的配置信息等。
以下是ARM处理器架构中三个常见的专用寄存器的名称及其功能:1.程序状态寄存器(CPSR)程序状态寄存器(CPSR)是ARM处理器架构中最重要的专用寄存器之一。
它用于存储处理器的当前执行状态,包括当前处理器模式(用户模式、系统模式等)、条件标志位(零标志、负标志等)以及中断屏蔽状态。
通过读取和修改CPSR的值,软件可以控制处理器的执行状态,例如启用或禁用中断、切换处理器模式等。
CPSR的位字段结构非常复杂,需要仔细阅读ARM体系结构手册以理解其所有细节。
2.控制寄存器(CR)控制寄存器(CR)是用于控制处理器操作模式和系统功能的专用寄存器。
其中包括了配置指令和操作类型,如分支指令的方式(指数或者相关)、数据访问权限(只读或者读写)等。
通过对CR的设置,软件可以控制处理器的操作行为,例如启用或禁用高速缓存、配置分支预测算法等。
CR寄存器中的内容对于系统的性能和功能有着重要的影响,因此需要谨慎设置。
3.中断控制寄存器(ICR)中断控制寄存器(ICR)用于存储处理器中断系统的配置信息和状态。
ICR包括了中断屏蔽寄存器和中断向量寄存器两部分。
中断屏蔽寄存器用于控制处理器对各种中断的响应,包括屏蔽中断、启用中断等。
中断向量寄存器用于存储中断向量表的起始位置区域,当发生中断时,处理器从中断向量表中读取相应中断处理程序的入口位置区域。
ICR的设置对于系统的中断处理有着重要的影响,需要根据具体的系统需求进行合理配置。
总结上述是在ARM处理器架构中,三个常见的专用寄存器及其功能。
这些专用寄存器对于处理器的操作和系统的性能有着重要的影响,需要在系统软件开发和调试过程中予以重视。
更多的专用寄存器和其功能还需要开发者去阅读ARM体系结构手册获取更多了解。
ARM9寄存器超全详解

自己学驱动17——ARM工作模式和ARM9寄存器1.ARM体系CPU的7种工作模式(1)用户模式(usr):ARM处理器正常的程序执行状态。
(2)快速中断模式(fiq):用于高速数据传输或通道处理。
(3)中断模式(irq):用于通用的中断处理。
(4)管理模式(svc):操作系统使用的保护模式。
(5)数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
(6)系统模式(sys):运行具有特权的操作系统任务。
(7)未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
可以通过软件进行模式的切换,或者发生各类中断、异常时CPU自动进入相应的模式。
除用户模式以外的6种工作模式都属于特权模式,大多数程序运行于用户模式,进入特权模式是为了处理中断、异常,或者访问被保护的系统资源。
2.ARM920T的寄存器ARM920T有31个通用的32位寄存器和6个程序状态寄存器,这37个寄存器分为7组,进入某个工作模式时就使用它的那组寄存器。
有些寄存器,不同的工作模式下有自己的副本,当切换到另一个工作模式时,那个工作模式的寄存器副本将被使用:这些寄存器被称为备份寄存器。
从下图中可以看出fiq模式的备份寄存器最多,这是为了提高fiq的响应速度,减少保存寄存器值所花费的时间。
CPSR在七种模式下都是同一个寄存器,所以可以修改里面的值来转换到不同的工作模式下。
R0~R15可以直接访问,除R15外均为通用寄存器,既可以用于保存数据也可以用于保存地址。
R13~R15稍有特殊:R13又被称为栈指针寄存器sp,通常用于保存栈指针;R14又被称为程序连接寄存器,当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份,而当发生中断或异常时,对应的R14_svc、R14_irq、R14_fiq、R14_abt或R14_und保存R15的返回值;R15又被称为程序计数器PC。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ARM处理器寄存器
1.1.1ARM 处理器不同模式下寄存器CPU 的模式不同,在其对应模式下可
以使用的寄存器也不相同,如表3-2 所示:表3-2 ARM 处理器模式下寄存器寄
存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理终止
未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)
R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10( SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svc R13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14 _fiqR15(PC)R15 状态寄存器CPSRCPSRSPSR 无
SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq 其中R0~R7 在所有模式下都可以使用的共有寄存器,R8~R12 是快速中断模式下私有的寄存器,其它模式下
不能使用,之所以叫其快速中断,是因为快速中断模式下,这几个私有寄存器
里数据在模式切换时可以不用入栈保存。
除了用户模式和系统模式共用一组
R13,R14,其余每种模式都私有自己的R13,R14,因为在每种模式下都有自
己的栈空间用于执行程序,在执行程序过程中还要保存返回地址,这样可以保
证在进入不同模式时,当前模式下栈空间不被破坏。
比如:网卡因为数据到达,
产生了中断进入中断模式,在中断模式下有自己的中断处理例程(ISR),ISR
在执行时要用到栈空间,因此要使用R13,R14。
中断处理完成后,返回用户
模式下,要继续执行被网卡中断信号中断的执行程序。
用户模式和系统模式为
什么要共用一组R13,R14 呢?这是因为,在特权模式下可以自由切换工作模
式,但是如果切换到用户模式下,就不能再切换到特权模式了,这是CPU 为
操作系统提供的保护机制,但是有的时候就需要切换到用户模式下去使用其
R13,R14 寄存器,比如当操作系统的进程进行上下文切换时,如果用户模式。