【发布时间】:2023-01-13 03:07:54
【问题描述】:
我是 MIPS 的新手,我正在做一项作业,要找到用户给定的两个数字之间的最大值,但是我遇到了两个我不明白为什么的错误,我写的代码从最大限度:.谢谢您的帮助
错误 1:第 35 行第 9 列:“$ra”:操作数的类型不正确
错误 2:第 40 行第 18 列:“else”:操作数的类型不正确
.text
main:
li $sp, 0x7ffffffc # initialize $sp
# PROLOGUE
subu $sp, $sp, 8 # expand stack by 8 bytes
sw $ra, 8($sp) # push $ra (ret addr, 4 bytes)
sw $fp, 4($sp) # push $fp (4 bytes)
addu $fp, $sp, 8 # set $fp to saved $ra
li $v0, 5 # read x into a0
syscall
move $a0, $v0
li $v0, 5 # read y into a1
syscall
move $a1, $v0
# lw $a1, arg0 # a1 = arg1
# lw $a2, arg1
jal max # v0 = max(arg0, arg1)
move $a0, $v0 # print_int(rval)
li $v0, 1
syscall
li $v0, 11 # print_char(\n)
li $a0, 10
syscall
# EPILOGUE
move $sp, $fp # restore $sp
lw $ra, ($fp) # restore saved $ra
lw $fp, -4($sp) # restore saved $fp
j $ra # return to kernel
max:
#PROLOGUE
# $a0 = x, $a1 = y
sle $a0, $a1, else # if(x <= y), jump to else
move $t0, $a0 # if (x > y), x is max
else: move $t0, $a1 # set $t0 = $t2, y is max
【问题讨论】:
-
你不能
j注册,有jr操作码。 -
sle是一个数学运算,一个二元运算符,用于确定关系——你不能给它一个标签;它有一个寄存器目标,您可以将其与后续分支指令结合使用,例如bne或beq,它们接受标签。