所以我写了这段代码试图在MIPS中找到3个数字的GCD。
li $s0, 1
whileloop:
bgt $s0, $t0, exit
bgt $s0, $t1, exit
bgt $s0, $t2, exit
IF:
div $s0, $t0
mfhi $s1
div $s0, $t1
mfhi $s2
div $s0, $t2
mfhi $s3
bne $s1, $zero, else
bne $s2, $zero, else
bne $s3, $zero, else
addi $s0, $s0, 1
j if
else:
addi $s0, $s0, 1
j whileloop
exit:
la $a0, answer
syscall
move $a0, $s0
li $v0, 1
syscall
我的逻辑是,在循环中,我将每个数字除以一个初始化为1的数字。如果所有三个用户输入的数字($ t0,$ t1,$ t2)都可以被该数字整除,而不是将该数字加1然后再次尝试使用下一个最高的数字。如果除数总是等于任何数字,那么这个循环的中断应该是因为如果它更高,它显然不可能是GCD。我的逻辑似乎是关闭的,因为else语句必须将除数递增1,所以无论我最终将以三个中的最低数字退出。有人能看到一种逻辑实现的方法吗?