2013-09-22 4 views
0

그래서 저는 C 코드로 퀵 소트 알고리즘을 구현 한 클래스를 가지고 있습니다. 우리는 mips 어셈블리 언어로 그 코드를 암시해야합니다. 나는 대부분 내 코드를 성공적으로 만들었지 만 재귀 중 일부는 문제가 있습니다.quicksort Mips assembly

... 
tmp = v[left]; 
v[left] = v[last]; 
v[last] = tmp; 
qsort(v, left, last-1); 
qsort(v, last+1, right); 

내가 함께하는 데 문제 부분은, 즉, 재귀 부분이 내가 걱정 해요 C 프로그램의 일부입니다. ... qsort (v, left, last-1) ...

제 질문은 qsort (v, left, last-1)를 실행하면 last-1 값이 "right"로 저장됩니다. 따라서 재귀 호출이 완료되면 이전 값 ("s")을 기억해야합니다. 간단히 어떻게 할 수 있니?

편집 : 문제는 숫자 목록이 커질수록 재귀 호출 수가 많아지고 저장해야하는 값이 많아집니다. 내가 알고 싶은 것은 다양한 길이의 값을 저장하고 불러올 수있는 방법일까요?

+0

여분의 레지스터에 넣으시겠습니까? 스택 어딘가에 넣으시겠습니까? –

+1

[스택] (http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Mips/stack.html)을 사용하면 재귀 함수에 적합합니다. – Michael

답변

0

표준 MIPS 호출 규칙에 따라 qsort 함수를 코딩하는 경우 right 변수를 호출 수신자 저장 레지스터 ($s0,$1,...,$s7) 중 하나에 저장할 수 있습니다.

qsort 함수가 실행을 시작할 때 가장 먼저해야 할 일은 스택에서 사용하는 호출 수신자 저장 레지스터 중 하나를 저장하는 것입니다.