汇编 MIPS 中 if 语句的多个条件

Multiple Conditions for an if-statement in Assembly MIPS

我正在努力将 C 程序转换为汇编 MIPS。我在一个 if 语句中有多个条件。是 if (n == 0 || (n > 0 && n % 10 != 0))。当此条件为真时,它将变量 ans 重新分配给 0.

这是我目前所做的:

    beqz n label1

有多个条件怎么办?

使用 pseudo-code,解决方案可能如下所示:

Compare n to zero.
If the comparison result is “equal”, go to TestIsTrue.
If the comparison result is not “greater than”, go to TestIsFalse.
Calculate the remainder of n divided by 10.
Compare the remainder to zero.
If the comparison result is “not equal”, go to TestIsTrue.
Go to TestIsFalse.

TestIsTrue:
Store 0 in ans.
Go to AllDone.

TestIsFalse:
(Put any desired code here.  Can be empty.)

AllDone:

if 语句将执行定向到两个位置之一:THEN 块的开始,或 ELSE 块的开始(如果没有 ELSE 块,则紧跟在 THEN 块之后.)

所以我们可以把条件分解如下:

  • n == 0: 转到THEN块
  • n <= 0:转到ELSE块或IF
  • 之后
  • n % 10 == 0:转到ELSE块或IF
  • 之后
  • 转到 THEN 块