【问题标题】:Converting C to MIPS将 C 转换为 MIPS
【发布时间】:2016-03-15 03:38:13
【问题描述】:

我正在用 MIPS 编写一个程序,但我无法在下面写下以下语句。如何在 MIPS 指令集中写出这样的逻辑语句?

return a > b ? a : b;

【问题讨论】:

  • 在 MIPS 指令集参考中查找 SLTBEQ

标签: mips cpu instructions


【解决方案1】:
  • return :向被调用者返回一些值(如果存在表达式)。
  • A ? B : C :这是条件运算符。如果A 为真(非零),则评估B。否则,将评估 C

如果ab 是有符号的32 位整数,应该是这样的:

# assuming
# a = $t0
# b = $t1
# return value = $v0

slt   $t2, $t1,   $t0     # $t2 = (b < a)
beq   $t2, $zero, nottrue # if (!(a > b)) goto nottrue
addui $v0, $t0,   $zero   # return value = a (not harmful even if executed when jump is taken)
jr  $ra                   # return
sll $zero, $zero, 0       # nop: prevent instruction after branch from being executed
nottrue:
addui $v0,   $t1,   $zero # return value = b
jr    $ra                 # return
sll   $zero, $zero, 0     # nop: prevent instruction after branch from being executed

【讨论】:

  • 谢谢迈克,你是个巫师
【解决方案2】:

首先将其分解为简单的 if 语句,MIPS 是一种汇编语言,因此如果它们很复杂,所有这些都将不起作用,请记住,您的大脑不是编译器,所以尽量不要编写复杂的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2014-01-24
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多