1、 SVC 模式 IRQ 模式 FIQ 模式 APCSR0 - R0 - R0 - R0 a1R1 - R1 - R1 - R1 a2R2 - R2 - R2 - R2 a3R3 - R3 - R3 - R3 a4R4 - R4 - R4 - R4 v1R5 - R5 - R5 - R5 v2R6 - R6 - R6 - R6 v3R7 - R7 - R7 - R7 v4R8 - R8 - R8 R8_fiq v5R9 - R9 - R9 R9_fiq v6R10 - R10 - R10 R10_fiq slR11 - R11 - R11 R11_fiq fpR12 - R12 - R12 R1
2、2_fiq ipR13 R13_svc R13_irq R13_fiq spR14 R14_svc R14_irq R14_fiq lr- R15 / PC - pc最右侧的列是 APCS 代码使用的名字,关于 APCS 的详情参见这里。 程序计数器构造如下: 位 31 30 29 28 27 26 25-2 1 0 N Z C V I F 程 序 计 数 器 S1 S0对 R15 的详细解释,请参见 psr.html。下面是你想知道的模式,比如上面提及的FIQ模式。用户模式,运行应用程序的普通模式。限制你的内存访问并且你不能直接读取硬件设备。超级用户模式(SVC 模式),主要用于 SWI(软
3、件中断)和 OS(操作系统)。这个模式有额外的特权,允许你进一步控制计算机。例如,你必须进入超级用户模式来读取一个插件(podule)。这不能在用户模式下完成。中断模式(IRQ 模式),用来处理发起中断的外设。这个模式也是有特权的。导致 IRQ 的设备有键盘、 VSync (在发生屏幕刷新的时候)、IOC 定时器、串行口、硬盘、软盘、等等. 快速中断模式(FIQ 模式),用来处理发起快速中断的外设。这个模式是有特权的。导致 FIQ 的设备有处理数据的软盘,串行端口(比如在 82C71x 机器上的 A5000) 和 Econet。IRQ 和 FIQ 之间的区别是对于 FIQ 你必须尽快处理你事情
4、并离开这个模式。IRQ 可以被 FIQ 所中断但 IRQ 不能中断 FIQ。为了使 FIQ 更快,所以有更多的影子寄存器。FIQ 不能调用 SWI。FIQ 还必须禁用中断。如果一个 FIQ 例程必须重新启用中断,则它太慢了并应该是 IRQ 而不是 FIQ。 Phew!关于如果变更处理器的模式的详情请参照 psr.html。ARM中文指令-32 位操作这里的许多信息取自 ARM 汇编器手册。我现在没有 32 位处理器,就只能信任文档了. 这个文档中表述的 UMUL 和 UMLA 只能在 32bit 模式下进行是错误的。如果你的处理器(比如: StrongARM)可以这么做,则它可以在 32bit
5、 或 26bit 下工作. ARM2 和 ARM3 有一个 32 位数据总线和一个 26 位地址总线。在以后版本的 ARM 上,数据总线和地址总二者都是完全的 32 位宽。这解释了为什么一个“32 位处理器”被称为 26 位。数据宽度和指令/字大小是 32 位,并总是这样,但地址总线只是 24 位。因为 PC 总是字对齐的,一个地址中的低两位总是零,所以在 ARM2/ARM3 处理器上这些位持有处理器模式设置。尽管实际上只使用了 24 位,PC 的有效宽度仍是 26 位。在老机器上这没有问题。4Mb 内存是基准的。一些人升级到 8Mb、和 16Mb 是理论上的限制。(Some people u
6、pgraded to 8Mb, and 16Mb was the theoretical limit.) 但是 RiscPC 使用一个 26 位程序计数器是不可能的,因为 RiscPC 允许安装 258Mb 内存,而 26 位只允许你寻址到 %11111111111111111111111100 (或 67108860 字节,或 64Mb)。这附带的解释了对应用任务的 28Mb 大小限制;就是希望系统与老的 RISC OS API 相容。尽管这个汇编器站点的某些部分覆盖了 32 位模式(比如运行在 SVC32 下的一个简要的例子!),但多数部分是关于 26 位模式操作的,这是为了与 RISC
7、OS 的当前可获得的版本相兼容(就是 RISC OS 2 到 RISC OS 4);我注意到部分例子不适用于 32 位。RiscPC、Mico、RiscStation、A7000 等都有能力运行完全的 32 位操作系统;实际上 ARMLinux 就是这样的一个操作系统。RISC OS 不是,因为 RISC OS 需要,至少一个时期,保持与现存版本的兼容。这是个古老的两分问题(dichotomy),有一个崭新的完全 32 位版本的 RISC OS 版本是美妙的,但当你发现许多你的现存软件不能继续运行(so much as load)就不那么美妙了!RISC OS 不是完全的 26 位。一些处理程
8、序(handler)需要工作在 32 位模式下;限制它的是金钱(就是说,谁为完全转换 RISC OS 付钱;谁为用来重建它们的代码的开发工具付钱(PD 在 RISC OS 上是强壮的)和必要性(就是说,很多人使用 Impression 而 CC 不再与我们同在;Impression 好象不能在更新的 RISC OS 上工作,所以如果人们需要的软件将不能工作,那么他们不会认为有升级的必要)。为什么这如此重要? 新的 ARM 处理器将不支持 26 位操作。尽管做了一些融合(ARM6、ARM7、StrongARM),但气数就要尽了。你可以增加一个 26/32 位系统的复杂性,或者只用 32 位而得到
9、更简单、更小的处理器。我们要么随波逐流,要么被甩下. 所以我们别无选择。32 位体系ARM 体系在 ARM6 系列中进行了重大变更。下面我将描述 26 位 和 32 位操作行为的不同之处。在 ARM 6 中,程序计数器被扩展到完整的 32 位。结果是:PSR 从 PC 中分离到自己的寄存器 CPSR(当前的程序状态寄存器)中。在改变处理器模式的时候,不再与 PC 一起保存 PSR;现在是每个有特权的模式都有一个额外的寄存器 - SPSR (保存的程序状态寄存器) - 用来持有前面模式的 PSR。增加了使用这些新寄存器的指令。除了允许 PC 使用完全的 32 位之外,还有进一步的变更,就是给 P
10、SR 增加了额外的有特权的模式。这些模式用于处理未定义指令和异常终止例外:未定义指令、异常终止、和超级用户不再共享同一个模式。去掉了在早期 ARM 上存在的对超级用户的那些限制。在 ARM6 系列(和以后的其他兼容芯片)中通过设置片上某个控制寄存器来确定这些特征的可获得性。可以选择三个处理器配置中的一个:26 位程序和数据空间,这个配置强制 ARM 在 26 位地址空间中进行操作。在这个配置中只能获得四个 26 位模式(参照处理器模式描述);不可能选择任何 32 位模式。在所有当前的 ARM6 和 7 系列上复位(reset)时被设置为这个模式。26 位程序空间和 32 位数据空间。除了禁止地
11、址例外来允许数据传送操作访问完整的 32 位地址空间之外,与 26 位程序和地址空间配置相同。32 位程序和数据空间。这个配置把地址空间扩展成 32 位,并介入了对处理器模型的重大变更。在这个配置中你可以选择任何 26 位和 32 位处理器模式(参见下面的处理器模式)。在配置成 32 位程序和数据空间的时候,ARM6 和 ARM7 系列支持十个有所重叠的处理器操作模式:用户模式: 正常的程序执行状态;或 User26 模式: 一个 26 位版本。FIQ 模式: 设计来支持一个数据传送或通道处理;或 FIQ26 模式:IRQ 模式: 用于通用中断处理;或 IRQ26 模式:SVC 模式: 用于操
12、作系统的保护模式或 SVC26模式: 一个 26 位模式。异常终止模式(ABT 模式): 在一个数据或指令预取异常终止(abort)的时候进入的模式。未定义模式(UND 模式): 在执行了一个未定义的指令的时候进入的模式。当在一个 26 位处理器模式中的时候,编程模型倒退成早期的 26 位 ARM 处理器。除了下列变动之外,它的行为与 ARM2aS 宏单元(macrocell)相同:只在 ARM 被配置为 26 位程序和数据空间的时候,它才生成地址例外。在其他配置下 OS 仍然可以通过使用外部逻辑模拟地址例外的行为,比如用一个内存管理单元在超出 64Mbyte 范围的时候生成一个异常终止,并把这个异常终止转换成给这个应用程序的一个地址例外陷入。保持在通用寄存器和程序状态寄存器之间传送数据的新指令可操作。在调用了包含 26 位的 ARM 二进制代码的之后,操作系统可以使用这些新指令返回到一个 32 位模式。当在一个 32 位程序和数据空间配置下的时候,所
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1