2

所以我目前正在用 MIPS 编写一个计算器,我正在尝试编写一个 n 选择 k 函数。我想使用的算法是这样的:

如果我想做 5 选择 3,那么我将有一个执行 (5*4*3)/(3*2*1) 的循环。假设我已经有乘法和除法函数,我将如何在 MIPS 中实现它?

现在我有这个,但它根本不起作用:

calnchoosek:
    move $t1, $a0
    move $t2, $a2

    move $t3, $a0 # copies for the counter
    move $t4, $a2

loop_top:
    beq $t3, $t4, loop_bottom
    subi $t3, $t3, 1

    move $a0, $t1
    move $a2, $t3
    jal multi
    move $t1, $v0

    j loop_top

loop_bottom:
    beq $t4, $zero, exit1
    subi $t4, $t4, 1

    move $a0, $t2
    move $a2, $t4
    jal multi
    move $t2, $v0

    j loop_bottom

exit1:
    move $a0, $t1
    move $a2, $t2
    jal divi

我认为我的逻辑完全有缺陷,我可能不得不重新开始。有人可以帮我吗?

4

1 回答 1

3

loop_bottom,$t4将在最后一次迭代中设置为 0。乘以$t2零,分母为零。divi正在计算 K*(N!-K!)/0 - 你除以零!

于 2013-04-18T02:23:25.207 回答