您的位置 首页 电子

ARM寄存器小结

ARM微处理器支持7种运行模式,分别为:1.用户模式(usr):ARM处理器正常的程序执行状态;2.快速中断模式(fiq):用于高速数据传输…

ARM微处理器支撑7种运转形式,分别为:

1. 用户形式(usr):ARM处理器正常的程序履行状况;
2. 快速间断形式(fiq):用于高速数据传输或通道办理;
3. 外部间断形式(irq):用于通用的间断处理;
4. 办理形式(svc):操作系统运用的保护形式;
5. 数据拜访停止形式(abt):当数据或指令预取停止时进入该形式,用于虚拟存储及存储保护;
6. 系统形式(sys):运转具有特权的操作系统使命;
7. 未定义指令间断形式(und):当未定义指令履行时进入该形式,可用于支撑硬件协处理器的软件仿真

ARM系统结构的存储器格局有如下两种:
大端格局:字数据的高字节存储在低地址中,字数据的低字节寄存在高地址中;
小端格局:与大端存储格局相反,高地址寄存数据的高字节,低地址寄存数据的低字节

ARM寄存器总结:
ARM有16个32位的寄存器(r0到r15)。
r15充任程序寄存器PC,r14(link register)存储子程序的回来地址,r13存储的是仓库地址。
ARM有一个当时程序状况寄存器:CPSR。
一些寄存器(r13,r14)在反常产生时会产生新的instances,比方IRQ处理器形式,这时处理器运用r13_irq和r14_irq
ARM的子程序调用是很快的,因为子程序的回来地址不需求寄存在仓库中。

1、ARM处理器共有37个寄存器,其间包含:

i. 31个通用寄存器,包含程序计数器(PC)在内。都是32位寄存器

ii. 6个状况寄存器,都是32位寄存器,但现在只运用了其间12位

2、ARM处理器有7种不同的处理器形式,在每一种处理器形式中有一组相应的寄存器组。恣意时间(也便是恣意的处理器形式下),可见的寄存器包含15个通用寄存器(R0~R14)、一个或两个状况寄存器及程序计数器(PC)。在所有的寄存器中,有些是各形式共用的同一个物理寄存器,有些是各形式自己具有的独立的物理寄存器。

3、 通用寄存器能够分为3类:未备份寄存器(R0~R7)、备份寄存器(R8~R14)和程序计数器PC(R15)。关于每一个未备份寄存器来说,在所有的处理器形式下指的都是同一个物理寄存器。对应备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器,这使得间断处理十分简略。例如,仅仅运用R8~R14寄存器时,FIQ处理程序能够不用履行保存和康复间断现场的指令,然后使间断处理进程十分敏捷。关于备份寄存器R13和R14来说,每个寄存器对应6个不同的物理寄存器,其间的一个是用户形式和系统形式共用的,别的的5个对应于其他5种处理器形式。

4、每一种反常形式具有自己的物理的R13。运用程序初始化该R13,使其指向该反常形式专用的栈地址。当进入反常形式时,能够将需求运用的寄存器保存在R13所指的栈中;当退出反常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使反常处理程序不会损坏被其间断程序的运转现场。

5、寄存器R14又被称为衔接寄存器(Link Register,LR),在ARM系统中具有下面两种特别的效果:

i. 每一种处理器形式自己的物理R14中寄存当时子程序的回来地址。当经过BL或BLX指令调用子程序时,R14被设置成该子程序的回来地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即回来。

ii.当反常间断产生时,该反常形式特定的物理R14被设置成该反常形式即将回来的地址,关于有些反常形式,R14的值或许与将回来的地址有一个常数的偏移量。详细的回来方法与子程序回来方法根本相同。

6、因为ARM选用了流水线机制,当正确读取了PC的值时,该值为当时指令地址值加8个字节。也便是说,关于ARM指令集来说,PC指向当时指令的下两条指令的地址,因为ARM指令是字节对齐的,PC值得第0位和第1位总为0。

7、 关于ARM版别3以及更低的版别,写入R15的地址值的bits[1:0]被疏忽,关于ARM版别4以及更高的版别,程序有必要确保写入R15寄存器的地址值的bits[1:0]为0b00;不然会产生不行预知的成果。关于Thumb指令集来说,指令是半字对齐的。处理器将疏忽bit[0]。

还有一些指令关于R15的用法有一些特别的要求。比方,指令BX运用bit[0]来确认是ARM指令,仍是Thumb指令。

8、指令mov pc, pc将程序跳转到当时指令下面第2条指令处履行。相似的指令还有add pc, pc, #0

9、 每一种处理器形式下都有一个专用的物理状况寄存器,称为SPSR(备份程序状况寄存器)。当特定的反常间断产生时,这个寄存器用于寄存当时程序状况寄存器的内容。在反常间断程序退出时,能够用SPSR中保存的值来康复CPSR。

10、 因为用户形式和系统形式不是反常间断形式,所以它们没有SPSR。当在用户形式或系统形式中 拜访SPSR,将会产生不行预知的成果。

—————————————————————————————————–

ARM处理器共有37个寄存器。其间包含:31个通用寄存器,包含程序计数器(PC)在内。这些寄存器都是32位寄存器。以及6个32位状况寄存器。但现在只运用了其间12位。ARM处理器共有7种不同的处理器形式,在每一种处理器形式中有一组相应的寄存器组。恣意时间(也便是恣意的处理器形式下),可见的寄存器包含15个通用寄存器(R0~R14)、一个或两个状况寄存器及程序计数器(PC)。

表1各种处理器形式下的寄存器
用户形式 系统形式 特权形式 间断形式 未定义指令形式 外部间断形式 快速间断形式
R0 R0 R0 R0 R0 R0 R0
R1 R1 R1 R1 R1 R1 R1
R2 R2 R2 R2 R2 R2 R2
R3 R3 R3 R3 R3 R3 R3
R4 R4 R4 R4 R4 R4 R4
R5 R5 R5 R5 R5 R5 R5
R6 R6 R6 R6 R6 R6 R6
R8 R8 R8 R8 R8 R8 R8_fiq
R9 R9 R9 R9 R9 R9 R9_fiq
R10 R10 R10 R10 R10 R10 R10_fiq
R11 R11 R11 R11 R11 R11 R11_fiq
R12 R12 R12 R12 R12 R12 R12_fiq
R13 R13 R13_svc R13_abt R13_und R13_inq R13_fiq
R14 R14 R14_svc R14_abt R14_und R14_inq R14_fiq
PC PC PC PC PC PC PC
CPSR CPSR
CPSR
SPSR_svc
CPSR
SPSR_abt
CPSR
SPSR_und
CPSR
SPSR_inq
CPSR
SPSR_fiq

未备份寄存器包含R0~R7。关于每一个未备份寄存器来说,在所有的处理器形式下指的都是同一个物理寄存器。未备份寄存器没有被系统用于特别的用处,任何可选用通用寄存器的运用场合都能够运用未备份寄存器。

关于备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器。系统没有将这几个寄存器用于任何的特别用处,可是当间断处理十分简略,仅仅运用R8~R14寄存器时,FIQ处理程序能够不用履行保存和康复间断现场的指令,然后能够使间断处理进程十分敏捷。关于备份寄存器R13和R14,每个寄存器对应6个不同的物理寄存器,其间的一个是用户形式和系统形式共用的;别的的5个对应于其他5种处理器形式。选用记号R13_来区别各个物理寄存器:其间,能够是下面几种形式之一:usr、svc、abt、und、irq及fiq。
寄存器R13在ARM中常用作栈指针。在ARM指令会集,这仅仅一种习气的用法,并没有任何指令强制性的运用R13作为栈指针,用户也能够运用其他的寄存器作为栈指针;而在Thumb指令会集,有一些指令强制性地运用R13作为栈指针。每一种反常形式具有自己的物理的R13。运用程序初始化该R13,使其指向该反常形式专用的栈地址。当进入反常形式时,能够将需求运用的寄存器保存在R13所指的栈中;当退出反常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使反常处理程序不会损坏被其间断程序的运转现场。
寄存器R14又被称为衔接寄存器(Link Register,LR),在ARM系统中具有下面两种特别的效果:1、每一种处理器形式自己的物理R14中寄存在当时子程序的回来地址。当经过BL或BLX指令调用子程序时,R14被设置成该子程序的回来地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即回来。2、当反常间断产生时,该反常形式特定的物理R14被设置成该反常形式即将回来的地址,关于有些反常形式,R14的值或许与将回来的地址有一个常数的偏移量。详细的回来方法与上面的子程序回来方法根本相同。R14寄存器也能够作为通用寄存器运用。

因为ARM选用了流水线机制,当正确读取了PC的值时,该值为当时指令地址值加8个字节。也便是说,关于ARM指令集来说,PC指向当时指令的下两条指令的地址。
因为ARM指令是字对齐的,PC值的第0位和第1位总为0。需求留意的是,当运用指令STR/STM保存R15时,保存的或许是当时指令地址值加8字节,也或许保存的是当时指令地址加12字节。究竟是哪种方法,取决于芯片详细规划方法。无论如何,在同一芯片中,要么选用当时指令地址加8,要么选用当时指令地址加12,不能有些指令选用当时指令地址加8,另一些指令选用当时指令地址加12。因而关于用户来说,尽量防止运用STR/STM指令来保存R15的值。当不行防止这种运用方法时,能够先经过一些代码来确认所用的芯片运用的是哪种完成方法。
关于ARM版别4以及更高的版别,程序有必要确保写入R15寄存器的地址值的bits[1:0]为0b00;不然将会产生不行预知的成果。关于Thumb指令集来说,指令是半字对齐的,处理器将疏忽bit[0]。即写入R15的地址值首要与0XFFFFFFFC做与操作,再写入R15中。
还有—些指令关于R15的用法有一些特别的要求。比方,指令BX运用bit[0]来确认是ARM指令,仍是Thumb指令。这种读取PC值和写入PC值的不对称的操作需求特别留意。
需求留意的是,当运用str/stm保存R15时,保存的或许是当时指令地址值加8个字节,也或许保存的是当时指令地址值加12个字节。究竟哪种方法取决于芯片的详细规划。关于用户来说,尽量防止运用STR/STM指令来保存R15的值。
当成功的向R15写入一个数值时,程序将跳转到该地址履行。因为ARM指令是字对齐的,写入R15的值应满意bits[1:0]为0b00,详细要求arm各版别有所不同:
**关于arm3以及更低的版别,写入R15的地址值bits[1:0]被疏忽,即写入r15的地址值将与0xFFFF FFFC做与操作。
**关于ARM4以及更高的版别,程序有必要确保写入R15的地址值bits[1:0]为0b00,不然将产生不行预知的成果。
关于Thumb指令集来说,指令是半字对齐的,处理器将疏忽bit[0]。

CPSR(当时程序状况寄存器)能够在任何处理器形式下被拜访。它包含了条件标志位、间断制止位、当时处理器形式标志以及其他的一些操控和状况位。

每一种处理器形式下都有一个专用的物理状况寄存器,称为SPSR(备份程序状况寄存器)。当特定的反常间断产生时,这个寄存器用于寄存当时程序状况寄存器的内容。在反常间断程序退出时,能够用SPSR中保存的值来康复CPSR。因为用户形式和系统形式不是反常间断形式,所以它们没有SPSR。当在用户形式或系统形式中拜访SPSR,将会产生不行预知的成果。
CPSR的格局如下所示。SPSR格局与CPSR格局相同。
31 30 29 28 27 26 7 6 5 4 3 2 1 0
N Z C V Q DNM(RAZ) I F T M4 M3 M2 M1
M0

ARM系统运用单—的平板地址空间。该地址空间的巨细为232个8位字节。这些字节单元的地址是一个无符号的32位数值,其取值规模为0到232—1。ARM的地址空间也能够看作是230个32位的字单元。这些字单元的地址能够被4整除,也便是说该地址的低两位为0b00。地址为A的字数据包含地址为A、A+I、A+2、A+3,4个字节单元的内容。
在ARM版别4及以上的版别中,ARM的地址空间也能够看作是231个16位的半字单元。这些半字单元的地址能够被2整除,也便是说该地址的最低位为0b0。地址为A的半字数据包含地址为A、A+1两个字节单元的内容。
各存储单元的地址作为32位的无符号数,能够进行惯例的整数运算。这些运算的成果进行232取模。也便是说,运算成果产生上溢出和下溢出时,地址将会产生卷绕。

在ARM系统中,每个字单元中包含4个字节单元或许两个半字单元:1个半字单元中包含两个字节单元。可是在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格局:big-endian格局和little-endian格局。
在big-endian格局中,关于地址为A的字单元包含字节单元A、A+1、A+2及A+3,其间字节单元由高位到低位字节次序为A、A+1、A+2、A+3;地址为A的字单元包含半字单元A、A+2,其间半字单元由高位到低位字节次序为A、A+2:地址为A的半字单元包含字节单元A、A+1,其间字节单元由高位到低位字节次序为A、A+1。

在little-endian格局中,地址为A的字单元包含字节单元A、A+1、A+2及A+3,其间字节单元由高位到低位字节次序为A+3、A+2、A+1、A;地址为A的字单元包含半字节单元A、A+2,其间半字单元由高位到低位字节次序为A+2、A;地址为A的半字单元包含字节单元A、A+1,其间字节单元由高位到低位字节次序为A+1、A

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/276458.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部