将 C 转换为 MIPS

Converting C to MIPS

我正在用 MIPS 编写程序,但无法全神贯注地编写下面的语句。如何在 MIPS 指令集中编写这样的逻辑语句?

return a > b ? a : b;
  • return : 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

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