2013-10-26 2 views
0

을에 반환 주소를 저장하면의 내가 있다고 가정 해 봅시다 :MIPS : 중첩 된 절차

내가 이해에서
main: 

    // stuff 

    jal function_a 

function_a: 

    // function_a stuff 

    jal function_b 

    jr $ra 

function_b: 

    // function_b stuff 

    jr $ra 

는 메인 그것이 JAL function_a을 수행 $ 가시에 적절한 반환 주소를 저장하지만 다음 function_a은 $ 가시를 덮어 function_b를 사용할 때 $ ra가 어느 시점에서 저장되어야합니다. 그러나 나는 이것을하기 위해 국제 대회가 실제로 무엇을 말하고 있는지를 알 수 없다. jal function_b을 호출하기 전에 function_a에서 $ ra를 스택에 저장합니까? jal function_b을 호출하기 전에 s-register에 $ ra를 저장하고 function_b의 시작 부분에 해당 s 레지스터를 저장합니까? (이것은 here을 암시한다고 생각합니다)? 다른 뭔가? 그게 그렇게 중요한 건가?

답변

1

일반적인 방법은 $ra을 스택에 직접 저장하는 것입니다. $s0에 저장하는 것은 의미가 없습니다. 정상적인 호출 규칙에 따라 도 $s0을 보존해야하므로 $ra의 공간을 만들기 위해 스택에 $s0을 먼저 저장해야합니다. 당신이 정상적인 전화 협약을 따르지 않는다면 당연히 원하는대로 할 수 있습니다.

+0

감사합니다. – Tyler