【发布时间】:2021-03-30 07:56:45
【问题描述】:
我正在尝试调用FUNC 并将其值返回给xintersect。我认为使用 jr $ra 应该返回给调用者,但它会跳转到代码的末尾。我无法修改FUNC,因为它是给定的示例测试用例。任何想法?下面是我的 MIPS 代码:
.globl FUNC
FUNC:
mul $t0, $a0, $a0
addi $v0, $t0, -16
jr $ra
# expect 4 in $v1
main:
la $a0, FUNC
li $a1, 0#a
li $a2, 100#b
b xintersect
xintersect:
subu $s0, $a2, $a1
sltiu $t3, $s0, 1
add $s5, $0, $a0
bne $t3, 1, whileLoop
#return the value in $v1
add $v1, $a1, $0
jr $ra
whileLoop:
addu $s2, $a1, $a2
srl $a0, $s2, 1#m in $a0
jr $s5
slt $s2, $0, $v0
beq $0, $s2, ifLoop
addu $a2, $0, $a0
b whileLoop
ifLoop:
addu $a1, $0, $a0
b whileLoop
下面应该是C代码:
int xintersect(int (*f) (int), int a, int b) {
/* f(a) ≤ 0 ≤ f(b), a ≤ b */
while (b-a > 1) {
int m = (a+b)/2;
if (f(m) <= 0) a = m; else b = m;
}
return a;
}
【问题讨论】: