프로시저
- 프로시저란?
- 프로시저란 제공되는 인수에 따라서 특정 작업을 수행하는 서브루틴
- 프로시저의 인수(parameter)는 프로시저에 값을 보내고 결과를 받아옴
- 프로시저나 함수는 재사용 가능하도록 프로그램을 구조화
- 프로시저 관련 레지스터
- $a0~$a3 : 전달할 인수를 가지고 있는 인수 레지스터
- $v0~$v1 : 반화뇌는 값을 갖게 되는 값 레지스터
- $ra : 복귀주소(return address)를 가지고 있는 레지스터
- 프로시저를 위한 명령어
- jal(jump-and-link instruction)
- 복귀주소를 $ra에 저장하고 프로시저가 할당된 주소로 점프하는 명령어
- $ra의 주소로 복귀할 때 jr(jump register)명령어 를 사용
- eg) jal procedure address, jr $ra
- 프로시저의 실행단계
- 프로시저가 접근 할 수 있는곳에서 인수를 넣는다.
- 프로시저로 제어를 넘긴다.
- 프로시저가 필요로하는 메모리 자원을 획득한다.
- 필요한 작업을 수행한다.
- 호출한 프로그램이 접근할 수 있는 레지스터에 결과값을 넘긴다.
- 호출한 프로그램으로 제어권을 반환한다.
- 스택 (정적변수 - 컴파일)
- 정적변수에 이용 (컴파일시 결정)
- 메모리를 사용
- 레지스터가 부족한 경우에 사용
- 후입선출(lifo)로 이루어진 선형 자로구조
- push, pop 으로 데이터를 넣고 꺼낼 수 있다.
- 스택포인터(sp)의 값은 스택에서 데이터가 들어가고 나올때마다 변경된다.
- 스택은 높은 주소에서 낮은 주소로 생성되기 때문에 스택을 할당 할 때에는 sp에서 사용할 만큼의 값을 감소 시켜야한다.
- 스택 프레임
- 각 프로시저는 독립된 스택프레임을 가지고 있음
- 프로시저이 저장된 레지스터와 지역변수를 가지고 있는 스택영역
- 프레임포인터(fp)가 프로시저의 첫 번째 워드를 가리키도록 되어있음.
- fp에는 인수, 지역변수, 복귀주소 등이 저장됨
- fp는 베이스레지스터의 역할을 하고 sp는 값이 변경되며 스택의 최하단을 가리킴
- 재뒤호툴등에서 ra값이 변경될 여지가 있으므로 복귀주소 저장 수단으로 스택프레임을 사용함.
- 연습문제
- 메모리
- 세그먼트
- 메모리는 각각 다른 값을 저장하는 블록으로 나누어져 있음
- stack : 지역변수 선언, 정적할당, 프로그램 종료시 자동소멸 (8mb)
- heap : 동적으로 할당된 메모리영역, 개발자가 해제를 해줘야함. (링크드리스트)
- data : 전역변수
- text : 기계어 저장
- segmentation Fault : 참조할 수 없는 메모리역역을 참조했을 때 발생 에러
Comments powered by Disqus.