2

指令是否像

fstmiaxne ip!, {d8-d15}

当必要的协处理器可能不存在时,在 ARM 汇编中使用是否有效/安全,如果当前条件代码确保除非协处理器存在,否则不会执行操作?

4

2 回答 2

2

这取决于架构版本和变体。来自 ARM 架构参考手册 (DDI 0406B):

有条件地执行未定义的指令

第 A8-8 页的条件执行中描述的条件执行规则适用于所有指令。这包括未定义指令和其他会导致进入未定义指令异常的指令。

如果此类指令未能通过其条件检查,则行为取决于体系结构配置文件和进入未定义指令异常的潜在原因,如下所示:

  • 在 ARMv7-A 配置文件中:

    — 如果潜在原因是指令本身的执行并且取决于指令读取的数据值,则指令作为 NOP 执行并且不会导致未定义指令异常。

    — 如果潜在原因是执行较早的协处理器指令,或执行指令本身但不依赖于指令读取的数据值,则由实现定义指令是作为 NOP 执行还是导致未定义指令异常。实现必须以相同的方式处理所有此类情况。

  • 在 ARMv7-R 配置文件中,指令作为 NOP 执行,不会导致未定义指令异常。

笔记

在 ARMv7 之前,所有实现都将任何未能通过条件检查的指令作为 NOP 执行,即使否则它会导致未定义指令异常。为这些实现编写的未定义指令处理程序可能会假设未检查未定义指令是否通过了其条件检查。此类未定义指令处理程序可能需要重写,以检查条件是否通过,然后才能在所有 ARMv7-A 实现上正常运行


由于您使用已弃用的 VFP 指令作为示例,我假设您正在处理 ARMv7 之前的拱门,因此您似乎可以假设它将被视为 NOP。

编辑:对于 ARMv7-M(来自 DDI 0403D):

有条件地执行未定义的指令

如果未定义的指令未能通过 ARMv7-M 中的条件检查,则该指令将表现为 NOP 并且不会导致异常。

笔记

条件字段为“1110”的分支 (B) 指令是 UNDEFINED 并接受异常,除非 IT 指令的条件检查失败合格。


于 2012-07-30T11:41:53.563 回答
0

这个网站似乎有一个答案:

http://www.peter-cockerell.net/aalp/html/app-a.html

另请注意,如果一条指令由于其条件代码导致它被 ARM 忽略而未执行,则它永远不会被“提供”给协处理器,或者作为未定义的指令被捕获。这意味着如果一条指令由于其条件代码为“从不”而为“无操作”,则其余指令可以是任何东西——它永远不会导致陷阱发生。

但是,如果没有权威的声明来源,我有点犹豫要不要相信它。

于 2012-07-28T23:26:19.233 回答