3
• 中断模式(IRQ 模式),用来处理发起中断的外设。这个模式也是有特权的。导致 IRQ
的设备有键盘、 VSync (在发生屏幕刷新的时候)、IOC 定时器、串行口、硬盘、软
盘、等等...
• 快速中断模式(FIQ 模式),用来处理发起快速中断的外设。这个模式是有特权的。
导致 FIQ 的设备有处理数据的软盘,串行端口(比如在 82C71x 机器上的 A5000)
和 Econet。
IRQ 和 FIQ 之间的区别是对于 FIQ 你必须尽快处理你事情并离开这个模式。IRQ 可以被
FIQ 所中断但 IRQ 不能中断 FIQ。为了使 FIQ 更快,所以有更多的影子寄存器。FIQ 不能
调用 SWI。FIQ 还必须禁用中断。如果一个 FIQ 例程必须重新启用中断,则它太慢了并应
该是 IRQ 而不是 FIQ。 Phew!
关于如果变更处理器的模式的详情请参照 psr.html。
32 位操作
这里的许多信息取自 ARM 汇编器手册。我现在没有 32 位处理器,就只能信任文档了... 这
个文档中表述的 UMUL 和 UMLA 只能在 32bit 模式下进行是错误的。如果你的处理器(比如:
StrongARM)可以这么做,则它可以在 32bit 或 26bit 下工作...
ARM2 和 ARM3 有一个 32 位数据总线和一个 26 位地址总线。在以后版本的 ARM 上,数据
总线和地址总二者都是完全的 32 位宽。这解释了为什么一个“32 位处理器”被称为 26
位。数据宽度和指令/字大小是 32 位,并总是这样,但地址总线只是 24 位。因为 PC 总
是字对齐的,一个地址中的低两位总是零,所以在 ARM2/ARM3 处理器上这些位持有处理器
模式设置。尽管实际上只使用了 24 位,PC 的有效宽度仍是 26 位。
在老机器上这没有问题。4Mb 内存是基准的。一些人升级到 8Mb、和 16Mb 是理论上的限制。
(Some people upgraded to 8Mb, and 16Mb was the theoretical limit.) 但是 RiscPC 使
用一个 26 位程序计数器是不可能的,因为 RiscPC 允许安装 258Mb 内存,而 26 位只允
许你寻址到 %11111111111111111111111100 (或 67108860 字节,或 64Mb)。这附带的解释
了对应用任务的 28Mb 大小限制;就是希望系统与老的 RISC OS API 相容。
尽管这个汇编器站点的某些部分覆盖了 32 位模式(比如运行在 SVC32 下的一个简要的例
子!),但多数部分是关于 26 位模式操作的,这是为了与 RISC 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)
就不那么美妙了!
PDF created with pdfFactory trial version www.pdffactory.com
评论1
最新资源