ARM - 域访问控制寄存器

时间:2012-03-05 14:41:51

标签: assembly arm startup

我想知道,为什么我们总是必须禁用位于协处理器寄存器cp15 c3中的域访问控制寄存器中的所有域。这通常使用MCR指令通过下面的内容在启动代码中完成。

MVN   r1, #0
MCR   p15, 0, r1, c3, c0, 0

为什么我们将所有零加载到c3中以禁用所有domains

1 个答案:

答案 0 :(得分:3)

您当然不必禁用域访问控制寄存器中的域。实际上,甚至不可能,因为如果启用MMU,则始终检查域访问。通过将值加载到DACR,您真正要做的是设置域的访问权限。 The page您发布了一个链接,用于描述DACS中位的确切含义。一般来说:

  • 00 - 完全无法访问
  • 01 - 访问TLB条目中的再次检查值
  • 11 - 始终允许访问

这意味着向DACR写入0xFFFFFFFF会关闭内存保护。这正是您发布的代码所做的。注意说明mvn,它与mov不同。 mvn <Rd>, <Rm>是“移动NOT”指令,它将<Rm>的补充写入<Rd>mvn r1, #0 r1之后的值等于0xFFFFFFFF。

您遇到的启动代码可能不需要内存保护或暂时关闭它只是为了以后启用它。然而,您应该始终启用对所有域的完全访问权限,这不是任何规则。