서강대학교 마이크로프로세서 6주차 실험
- 최초 등록일
- 2021.06.30
- 최종 저작일
- 2021.04
- 26페이지/ 한컴오피스
- 가격 3,000원
* 본 문서(hwp)가 작성된 한글 프로그램 버전보다 낮은 한글 프로그램에서 열람할 경우 문서가 올바르게 표시되지 않을 수 있습니다.
이 경우에는 최신패치가 되어 있는 2010 이상 버전이나 한글뷰어에서 확인해 주시기 바랍니다.
소개글
"서강대학교 마이크로프로세서 6주차 실험"에 대한 내용입니다.
목차
1. 실험 제목
2. 실험 목적
3. 실험 이론
4. 실험 결과 및 분석
5. 토의
6. Exercise
7. 참고 문헌
본문내용
1. 실험 제목
Subroutines and Stacks
2. 실험 목적
● Subroutine의 호출 및 복귀와 관련된 명령어들과 그들의 동작에 대해 이해한다.
● Stack의 활용방법, 연관 명령어, subroutine과의 연관성 등을 이해한다.
● Subroutine으로의 변수 전달 방식에 대해 이해한다.
● 개별적인 파일에 작성된 subroutine의 assemble/compile 및 link를 위한 directives의 역할을 이해한다.
3. 실험 이론
1. Subroutine
subroutine은 divide-and-conquer 방식으로 프로그램을 효율적으로 설계하기 위한 것으로, 지정된 역할을 하는 단위 프로그램을 의미한다. subroutine의 호출과 복귀는 bl 명령어를 사용하여 구현할 수 있고, subroutine 수행 후 복귀할 주소는 lr에 저장된다. subroutine의 마지막 부분에서 lr에 저장된 주소를 pc로 옮기게 되고, 따라서 원래 호출했던 명령어의 다음 명령어로의 복귀가 이뤄진다.
다만, sub1에서 다시 sub2를 호출하는 경우, 기존 lr에 저장된 내용을 별도로 저장해두지 않고 sub2를 호출해버리면 lr에는 sub2를 수행한 후 sub1으로 복귀할 주소가 저장되어 sub1 종료 후 다시 main으로 돌아갈 주소를 잃게 된다. 이와 같은 문제를 방지하기 위해 subroutine의 시작 부분에서 lr의 내용을 별도의 위치에 지정된 메모리에 저장하고 subroutine이 끝날 때 그 저장된 값을 lr 대신 pc로 복구함으로써 해결할 수 있다. 여기에 stack이라는 메모리 영역이 사용된다.
subroutine 관련 instructions들을 다음과 같이 정리했다.
Instruction
Description
BL
Branch with link
BLX
Branch indirect with link
BX
Branch indirect
LDM
Load multiple registers, increment after
LDMDB, LDMEA
Load multiple registers, decrement before
LDMFD, LDMIA
Load multiple registers, increment after
POP
Pop registers from stack
PUSH
Push registers onto stack
STM
Store multiple registers, increment after
STMDB, STMEA
Store multiple registers, decrement before
STMFD, STMIA
Store multiple registers, increment after
참고 자료
http://www.keil.com/support
- 각종 명령어 기능에 관한 정보
http://www.jkelec.co.kr/img/lecture/arm_arch/arm_arch_4.html
- 각종 명령어 기능 보조자료
https://study.com/academy/lesson/what-is-stack-overflow-errors-exceptions-causes.html
- stack overflow 및 underflow 이해
Armv7-M Architecture Reference Manual
- 토의 문항 3번 참고자료