Mips 连续除法

Mips Continuous Divison

我正在尝试以 mips 实现连续除法

function_1:

    while:
        # a % 2 == 0
        DIV  $s0,  
        MFHI $t1
        bne  $t1, [=10=], exit

        # b % 2 == 0
        DIV  $s1,   
        MFHI $t2
        bne  $t2, [=10=], exit

        j while
   exit:

jr $ra

出于某种原因,检查 a 是否偶数有效,但检查 b 是否偶数无效。即使 ab 都是偶数,while 循环中的其余指令也不执行,调用函数后 a 和 b 保持不变。

任何关于我做错了什么的意见都会有所帮助。

谢谢!

您可以通过 andi $t0, $s2, 0x1 检查均匀性,如果 $s2 为偶数,则 $t0 的结果为零。无需使用 div 指令。另外 div $s1, 会将寄存器 16 ($s2) 除以寄存器 2 ($v0),这可能不是您想要的。