if (m != 0)

return rgc(m, n % m);

else

return n;

}


이 C 코드를 MIPS 어셈블리로 바꾸는 문제인데


인터넷에 있는 솔루션은


rgc:

add $sp,$sp,-4        # adjust stack pointer    

sw $ra,0($sp)          # save return address to stack

bne %t1,$zero,L1     # if m!=0, goto L1

jr $ra                    # if m==0,return n

L1:

div $st0,$t1            # find n%m

move $t0,$t1          # n=m

mfhi $t1                # m=n%m

jal rgc                   # call rgc(m,n%m)

lw $ra,0($sp)           # restore return address from stack

add $sp,$sp,4         # adjust stack pointer

jr $ra                    # return


이렇게 나옴.


근데 이렇게 쓰면 내 생각에는


1. 함수에 입력 변수 n, m 넘겨 받을 때 input argument reg($a0)에 안넣고 그냥 해도 되는 거임?

2. 같은 느낌으로 return 할때도 output argument reg($v0)에 안넣고 그냥 해도 되는 거임?

3. 이 함수 앞뒤에서 입력 변수 n, m을 어떻게 사용할 줄 알고 stack pointer에 저장도 안하고 막 변형하는 거임? (사실상 이게 메인)


근데 교수가 개꼰대라 그냥 저거 따라서 과제 내야 하나 고민... ㅋㅋ

와죠용