【发布时间】:2016-10-03 01:37:37
【问题描述】:
我试图掌握 ARM 编程中的条件执行。
所以我有点理解这样的情况:
if ( (R0 != 5) || (R2 != R3) ) ; != means not equal, || mean OR
{
R4-- ; // R4 = R4 - 1
}
这个的 ARM 版本是:
CMP R0, 5
CMPEQ R2, R3
SUBNE R4, R4, 1
我很好奇 ARM 是如何知道这是一个“或”(||)。所以它做了两个比较。但是如果两个比较都不正确会发生什么。那是NE做的吗?如果它们不同会发生什么(如下例所示)。
假设代码是这样的:
if ( (R0 > 5) && (R2 != R3) ) ; != means not equal, && mean AND
{
R4-- ; // R4 = R4 - 1
}
你会如何用 ARM 中的条件指令编写这个?
谢谢!
【问题讨论】:
-
你没有。您只需反转两个条件,并在给出两个条件中的任何一个时跳过
R4--(就像您对 || 所做的那样) -
@Tommylee2k 反转是什么意思?你能举个例子吗?
-
ARM 不“知道”那个 asm 应该做什么,它只是运行你给它的指令。重要的是所有可能输入的结果与 C 相同。例如,在 asm 中实现时,如果您知道它们不会出错,则无需避免评估 C 短路的东西。 (例如,如果值已经在寄存器中,您可以先检查
&&的任何一半。但如果后半部分涉及取消引用指针,它可能为 NULL,因此您不应该编写 asm 来取消引用它时 C 不't.)