汇编 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 块
我正在努力将 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 块