【问题标题】:Altering the CPSR Reserved bits更改 CPSR 保留位
【发布时间】:2016-01-12 05:27:40
【问题描述】:

尽管我在所有 ARM 参考资料中都知道下面的注释,但我想知道是否有任何方法可以更改 CPSR 中的保留位?如何更改保留位以生成我想要的值?

提前谢谢你,

注意 为了与未来的 ARM 处理器兼容,请勿更改程序状态寄存器的保留位。更改 CPSR 时使用 read-modify-write 操作。

http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0311d/ch02s04s02.html

【问题讨论】:

  • 很可能这些位后面没有触发器来存储任何东西。当您尝试使用 msr cpsr、r0 或任何寄存器并且没有在 cpsr 之后添加任何 _stuff 时发生了什么?然后 r0,cpsr 夫人读回来?你能改变那些位吗?
  • 你想在这里完成什么?
  • 现在比较 ARM968 和 something more modern - 当有人在 v7 内核上运行您的代码时,您的“期望值”会损坏多少状态?
  • 也很可能其中一个或一些具有未删除的损坏功能,您不应该乱用。与保留位有关的整个类别,除非您可以访问您并不真正了解的资源,否则我无法想象您如此渴望存储,以至于您无法在某个地方的 ram 中腾出少量位或找到其他一些读取-在您不使用的外围设备中写入寄存器,您可以从中获取一些位。不能保证即使这些位后面有存储,它们也会像已知的 cpsr 位一样传递给其他 psr。
  • 对于您正在使用的该芯片的特定芯片和版本/步进,一旦您尝试并发现它有效,这并不意味着该芯片的未来步进将表现相同或其他芯片的行为供应商或其他 arm 核心。因此,如果您真的需要它并且它似乎可以正常工作(需要进行大量测试才能做到这一点),请不要在没有额外工作的情况下移植该代码。

标签: assembly arm cpu-registers


【解决方案1】:

您引用的文档中的关键字是:

为了与未来的 ARM 处理器兼容

这意味着您无法知道这些位在特定 CPU 中的含义。您可能有一个 CPU 是在编写此文本后产生的,其中一个保留位具有特殊含义。

如果这个特殊含义是“执行 CPU 重置”,那么在尝试更改这些位时会导致 CPU 崩溃!

对于目前市场上的 CPU,我认为“dwelch”是正确的:这些位只是硬连线到某个值,无法更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 1970-01-01
    • 2011-05-07
    • 2012-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多