苦苦挣扎于GCD的逻辑

时间:2015-10-17 21:36:46

标签: assembly mips

所以我写了这段代码试图在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,所以无论我最终将以三个中的最低数字退出。有人能看到一种逻辑实现的方法吗?

0 个答案:

没有答案