【问题标题】:MIPS if-else with printing troubleMIPS if-else 有打印问题
【发布时间】:2017-09-25 17:12:02
【问题描述】:

我正在编写一个程序来确定一个整数是偶数还是奇数。该程序首先要求用户输入一个整数,并且应该根据该整数是什么打印“偶数”和“奇数”。我在创建 If-else 语句时遇到问题。

语句应该是,如果$t2=$t0,输出“Odd”,否则,输出“Even”。这是我现在无法使用的代码($t1=1, $t2=user's integer AND'd with 1,odd_str="Odd", even_str="Even"):

bne $t2, $t1, L1
    li $v0, 4
    la $a0, odd_str
    syscall
L1: 
    li $v0, 4
    la $a0, even_str
    syscall

奇数的输出是“OddEven”,偶数的输出是“Even”。任何想法如何解决这个问题?

【问题讨论】:

  • 代码看起来对我有用。 (输出不正确,但代码有效)。您还可以检查调试器、代码的工作方式以及输出不符合预期的原因。但它确实有效,实际上我还没有看到有效的机器代码,这会让 CPU 拒绝它执行,从来没有发生过。它总是执行它,并执行指令指定的操作。为避免某些代码执行,请不要执行它。例如跳到别处。此外,对于高级程序员来说,无需 if/else 即可轻松创建此任务,只需使用小指针数组,因此代码将只有单个 exec.flow。
  • 在调试器中单步执行您的代码,看看它是如何通过的。另请注意,这两个块是相同的,只是它们传递给syscall 的指针不同,因此您可以将其考虑在内。

标签: assembly mips


【解决方案1】:

奇数的输出是“OddEven”

当然,因为在syscall 之后没有打印"Odd" 字符串会使程序终止。标签不是障碍 - 它们只是程序中位置的方便名称。

任何想法如何解决这个问题?

在您希望程序终止的地方,执行系统调用 10。直接或通过跳转到代码中执行该系统调用的其他位置。

【讨论】: