
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에 저장도 안하고 막 변형하는 거임? (사실상 이게 메인)
근데 교수가 개꼰대라 그냥 저거 따라서 과제 내야 하나 고민... ㅋㅋ
와죠용
해당 댓글은 삭제되었습니다.
ㄹㅇ로 처음 듣는 말임; 컴공이면 기본적으로 알고있어서 교수가 설명안해주는거임?
지금 듣는 수업이 컴구인데 왜 말 안해주냐 ㅋㅋ 내가 컴공 아니라 나만 모르는줄
상위 함수안에서 caller save로 값 저장하고 불렀을거 아니야 새기야
일단 caller saved 라는 말을 처음 들었고, 문제에는 딱 C코드를 어셈블리로 바꿔라 이게 다인데 그런 부연설명이 없어도 그냥 당연한거임?