Start New Discussion within our **Software Development Community** Not Yet Answered # euclidean GCD algorithm

wildgoose 420

**Donate $1 now to see this question answered quickly**

Sponsored questions offer a monetary incentive to answerers to produce quality responses.

Be **intelligently matched** with 5 likely answerers who will be alerted to help.

0

I'm looking at your code, but I don't see your algorithm.

If you're trying to find the Greatest Common Denominator, then I'm not seeing the algorithm. Several methods for a GCD. One is inner, outer loop. Subtract tmp divisor each time, looking for a divisor == 0 vs divisor < remainder result. If not zero, increment the divisor, reset the dividend and start again. Fastest method though would be to start from divisor half the dividend, and decrement the divisor each time.

You aren't using recursion. I'm not aware of any Euclidean GCD algorithm that uses a Nx2 algorithm in its basis.

Can you post your logic in pseudo code to make it clearer!

I've added comments to your code but it isn't helping me understand the algorithm.

What happens if a0 is (0)? I'm assuming a1 is (1) as its being used as a shifter, but shouldn't that be a divisor instead of a multiplier?

```
; a0, a1 preset.
; Assuming a1 always == 1, as a down counter?
; If 1==1 exit
loop: beq $a0, $a1, exit
slt $t0, $a0, $a1 ; t0 = a0 << a1 ??? Why making # bigger to zero instead of smaller?
bne $t0, $zero, label ; jmp t0==0 label
sub $a0, $a0, $a1 ; a0 -= a1 ??? Only subtracting (1)
j loop
; Outer Loop
label: sub $a1, $a1, $a0 ; a1 -= a0
j loop
exit: add $v0, $zero, $a0 ; return a0
```

Instead of starting with assembly. Start with pseudo code or a higher programming language to get the logic flow in place

This article has been dead for over six months. Start a new discussion instead.