我想知道为什么我们总是需要在协处理器寄存器cp15 c3中的域访问控制寄存器中禁用所有域。通常,通过类似下面的启动代码使用MCR指令来完成此操作。MVN r1, #0 MCR p15, 0, r1, c3, c0, 0 为什么我们要将所有零加载到c3中以禁用所有域名?
你肯定不需要在域访问控制寄存器中禁用域名。实际上,这甚至是不可能的,因为如果MMU被启用,则总是检查域访问。通过加载值到DACR,您真正做的是设置域的访问权限。您发布链接的页面准确描述了DACR中位的意义。一般来说:00 - 完全没有访问权限 01 - 访问根据TLB条目中的值进行检查 11 - 总是允许访问这意味着将0xFFFFFFFF写入DACR将关闭内存保护。这正是您发布的代码所做的事情。请注意指令“mvn”,它与“mov”有所不同。“mvn <Rd>, <Rm>”是“Move NOT”指令,它将<Rm>的补码写入<Rd>。在执行“mvn r1, #0”后,r1的值等于0xFFFFFFFF。您发现的启动代码可能不需要内存保护,或者仅暂时关闭它以后重新启用。然而,并不是规定您应该始终启用对所有域的完全访问。
MOV
命令而不是MVN
。谢谢,这让我明白了。 - 71GA