打印

ARM 指令格式和时序1

[复制链接]
126|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
肉坨坨|  楼主 | 2018-8-31 17:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
处理器模式ARM 有一个用户模式和多个有特权的超级用户模式。它们是:
IRQ 在触发中断请求(IRQ)时进入。 FIQ 在触发快速中断请求(FIQ)时进入。 SVC 在指令一个软件中断(SWI)时进入。 Undef 在执行了一个未定义的指令时进入(不存在于 ARM 2 和 3,在这里进入 SVC 模式)。 Abt 在一个内存访问尝试被内存管理器(例如,MEMC 或 MMU)所终止时进入,通常因为所做的尝试要访问不存在的内存或者在没有充足特权的模式下访问内存(不存在于 ARM 2 和 3,在这里进入 SVC 模式)。 在每种情况下还调用适当的硬件向量。
 
寄存器ARM 2 和 3 有 27 个 32 位处理器寄存器,在任何给定时间只有其中的 16 个是可见的(是哪十六个取决于处理器模式)。它们被引用为 R0-R15。
ARM 6 和以后有 31 个 32 位处理器寄存器,在任何给定时间只有其中的 16 个是可见的。
R15 特别重要。在 ARM 2 和 3,其中的 24 位用做程序计数器,而余下的 8 位用于保持处理器模式、状态标志和中断模式。所以 R15 经常被称做 PC。
        R15 = PC = NZCVIFpp pppppppp pppppppp ppppppMM
位 0-1 和 26-31 被称为 PSR (处理器状态寄存器)。位 2-25 给出被取回到指令流水线中的当前指令的(以字为单位)地址 (见后)。所以永远只能从字对齐的地址执行指令。 M        当前处理器模式

0        用户模式
1        快速中断处理模式(FIQ 模式)
2        中断处理模式(IRQ 模式)
3        超级用户模式(SVC 模式)
名字        意思

N        负数(Negative)标志
Z        零(Zero)标志
C        进位(Carry)标志
V        溢出(oVerflow)标志
I        中断(Interrupt)请求禁用
F        快速(Fast)中断请求禁用
R14、R14_FIQ、R14_IRQ、和 R14_SVC 由于它们在带连接的分支指令期间的行为而有时被称为‘连接’寄存器。
ARM 6 和以后的处理器核心支持 32 位地址空间。这些处理可以在 26 为和 32 位 PC 模式二者下操作。 在 26 位 PC 模式下,R15 表现如同在以前的处理器上,所以代码只能运行在地址空间的最低的 64M 字节中。在 32 位 PC 模式下,R15 所有 32 位用做程序计数器。使用独立的状态寄存器来存储处理器模式和状态标志。PSR 定义如下:
        NZCVxxxx xxxxxxxx xxxxxxxx IFxMMMMM
注意在 32-bit 模式下 R15 的底端两位总是零 - 就是说你仍然只能得到字对齐的指令。忽略对这两位写非零的任何尝试。 当前定义了下列模式:
M        名字        意思

00000        usr_26        26 位 PC Usr 模式
00001        fiq_26        26 位 PC FIQ 模式
00010        irq_26        26 位 PC IRQ 模式
00011        svc_26        26 位 PC SVC 模式

10000        usr_32        32 位 PC Usr 模式
10001        fiq_32        32 位 PC FIQ 模式
10010        irq_32        32 位 PC IRQ 模式
10011        svc_32        32 位 PC SVC 模式
10111        abt_32        32 位 PC Abt 模式
11011        und_32        32 位 PC Und 模式
推测自上面的表,可能期望还定义了下列两个模式:
M        名字        意思

00111        abt_26        26 bit PC Abt Mode
01011        und_26        26 bit PC Und Mode
实际上未定义它们(如果你确实向模式位写了 00111 或 01011,结果的芯片状态不会是你所希望的 - 就是说不会是有适当的 R13 和 R14 被交换进来的一个 26-bit 特权模式。 下表展示在每个处理器模式下可获得那些的寄存器:
        +------+---------------------------------------+
        | 模式 |  可获得的寄存器                        |
        +------+---------------------------------------+
        | USR  | R0             -             R14  R15 |
        +------+---------+-----------------------------+
        | FIQ  | R0 - R7 | R8_FIQ    -    R14_FIQ  R15 |
        +------+---------+----+------------------------+
        | IRQ  | R0   -   R12 | R13_IRQ - R14_IRQ  R15 |
        +------+--------------+------------------------+
        | SVC  | R0   -   R12 | R13_SVC - R14_SVC  R15 |
        +------+--------------+------------------------+
        | ABT  | R0   -   R12 | R13_ABT - R14_ABT  R15 | (ARM 6 和以后)
        +------+--------------+------------------------+
        | UND  | R0   -   R12 | R13_UND - R14_UND  R15 | (ARM 6 和以后)
        +------+---------------------------------------+
在 ARM6 和以后的处理器上有六个状态寄存器。一个是当前处理器状态寄存器(CPSR),持有关于当前处理器状态的信息。其它五个是保存的程序状态寄存器(SPSR): 每个特权模式都有一个,持有完成在这个模式下的例外处理时处理器必须返回的关于状态的信息。
分别使用 MSR 和 MRS 指令来设置和读取这些寄存器。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

419

主题

431

帖子

0

粉丝