프로시저
- 고급언어의 함수 같은 기능.
- 제공되는 인수에 따라서 특정 작업을 수행하는 서브루틴
실행단계
- 프로시저가 접근할 수 있는 곳에 인수를 가지고 있는 레지스터(a0 a3)의 값을 넣는다.
- 프로시저에로 제어권을 넘긴다. 수행중인 명령어의 주소는 PC(program counter)레지스터에 그 때 그 때 저장됨.
- 계산 결과를 반환값을 저장하는 레지스터에 넣음(v0 v1)
- 복귀 주소를 저장하는 레지스터($ra)에 복귀 주소를 저장(jal: jump-and-link instruction)하고 할당된 주소로 복귀(jr: jump register): 호출한 프로그램으로 제어권을 반환
ex) jal procedure address, jr $ra
스택
- 레지스터가 부족한 경우에 사용
- 선입후출로 이루어진 자료구조
- 스택포인터(sp)의 값은 가장 최근에 들어온 데이터의 위치를 가지고 있음
- 정적변수 선언을 했을 때 값이 저장되는 공간
- 레지스터보다 훨씬 큰 공간이므로 배열 등을 저장할 수 있음.
스택 프레임
- 각 프로시저는 독립된 스택프레임을 가지고 있음
- 프로시저에 저장된 레지스터와 지역변수를 가지고 있는 스택영역
- 프레임포인터(fp)가 프로시저의 첫 번째 워드를 가리킴
- 스택포인터(sp)는 스택의 최하단을 가리킴
- 프로시저의 복귀 주소를 저장하는 곳
주소지정방식
1. 수치 주소지정: 피연산자는 명령어 내에 있는 상수
- 명령어의 주소 필드에 데이터가 들어 있으며 상수의 정의나 변수 값의 초기화에 편리
- 데이터를 얻기 위한 기억장치 접근이 필요 없음
- 사용할 수 있는 수의 크기가 주소 필드의 크기로 제한됨
2. 레지스터 주소지정: 피연산자는 레지스터
- cpu내의 레지스터에 데이터가 저장되어 있는 방식
- 주소 필드가 레지스터 번호를 나타내므로 적은 비트수가 필요함
- 데이터 저장공간이 cpu 내부 레지스터로 제한
3. 베이스 레지스터 주소지정: 메모리 주소는 베이스 레지스터의 값과 주소 필드의 변위 값을 더함
- 베이스 레지스터의 값과 주소 필드의 변위 값을 더해서 주소를 구함
- 피연산자가 메모리에 존재
- 메모리 자원을 사용하므로 저장형식이 유연
4. pc 상대 주소지정: pc값과 명령어 내 상수의 합을 더해서 주소를 구함
- pc(program counter)값에 명령어의 주소 필드 값을 더해서 유효주소를 구함
- 적은 비트를 사용하는 것으로 32비트 분기 주소를 만드는 것이 가능
- 조건부 분기명령에 사용
5. 의사직접 주소지정: 명령어 내의 26비트를 pc의 상위 비트들과 연접하여 점프 주소를 구함
- 명령어 내의 26비트를 pc의 상위 비트들과 연접하여 점프 주소를 구함
- 무조건 분기문에서 주로 사용