【发布时间】:2013-11-06 05:25:05
【问题描述】:
在 ARM SWI 指令中,32 位分为 3 组:0:23(系统调用号)、24:27(0b1111)和 28:31(条件)。 条件是什么?
“ARM SoC 架构”一书提到“如果条件通过,则指令进入主管模式。”当我检查示例代码时,该示例在 SWI 之前有一个 CMP 条件,但我是仍然无法理解病情的原因。此外,互联网上出现的一些关于“SWI for ARM”的演示文稿在 SWI 之前都没有任何 CMP 条件。所以我很困惑我们是否需要它,如果是,那么需要什么?
请帮助并提前致谢。
【问题讨论】:
-
每条手臂指令都有一个条件。大多数时候它是 0b1110 (0xE),这意味着总是。一如既往地运行。
-
但是条件的用途是什么,它的工作是使条件0xE。这些只是填充位吗?
-
每条指令都有一个条件 ADDEQ add if equal, vs ADD, always。 SWILT SWI 如果小于,SWIEQ,SWI 如果相等。 SUBGT, sub if greater than 等。编写代码是程序员的工作,程序员选择何时使指令有条件。
-
填充位通常被标记为 SBZ(应该为零),并且没有另外记录。条件位非常真实,经常使用,通常与分支 blt、beq 等一起使用,但与 arm 一起可用于任何指令以提高性能。
-
@dwelch 非常感谢,现在我明白了。您想说每条指令都有一个可以明确提及的条件(例如 ADDEQ、ADDGT 等),有些是隐含的(ADD - 总是)。在这里也是一样的。再次感谢。它真的很有帮助,我学到了新东西。