pretty new to programming in assembly but my assignment is to write a GCD program but my program works sometimes and sometimes it doesn't work. if i put the smaller number first then the larger number i don't get the correct GCD but if i do the opposite i get the right answer
example:
if i enter 209 then 2585 it says the GCD is 209, which is incorrect
but, if i enter 2585 then 209 it says the GCD is 11 which is correct
looking for some guidance on to why my program is working one way and not the other
here is my code:
# Lab 2 - GCD
#
.data
A: .word 0
B: .word 0
Prompt: .asciiz "Type integer for A, press ENTER. Type integer for B, press ENTER \n"
Result: .asciiz "\nThe GCD is "
.globl main
.text
main:
li $v0,4 # syscall to print String
la $a0,Prompt # load address of Prompt
syscall # print Prompt String
li $v0,5 # syscall to read integer
syscall # read first intger
move $a0,$v0 # move integer in $v0 to $a0
li $v0,5 # syscall to read integer
syscall # read next integer
move $a1,$v0 # move integer in $v0 to $a1
baseCase:
bne $a1,$zero,recCase # if $a1 != 0 branch to recCase
li $v0,4 # syscall to print String
la $a0,Result # load address of Result
syscall # print result String
lw $a0,A # load A
li $v0,1 # syscall to print integer
syscall # print A
li $v0,10 # terminate prog running
syscall # return control to system
recCase:
sub $sp,$sp,12 # push stack
sw $ra,0($sp) # save return address
sw $a0,4($sp) # save registers
sw $a1,8($sp)
move $t0,$a1 # move $a1 to $t0
rem $a1,$a0,$a1 # $a1 = A%B
sw $t0,A # store A for output
jal baseCase # jump to baseCase
lw $ra,0($sp) # load main
addi $sp,$sp,12 #
jr $ra # return to main