임베디드 시스템 실험 2주차 ARM Assembly Study(1), ADS
- 최초 등록일
- 2013.10.28
- 최종 저작일
- 2012.03
- 45페이지/ 한컴오피스
- 가격 4,000원
목차
1. Title
2. Name
3. Abstract
4. Experimental Results
5. Conclusion
6. References
본문내용
ⅰ)AREA Directive, Section name, CODE, READONLY
AREA : 새로운 코드나 데이타 섹션을 생성하는 지시어.
Section name, CODE, READONLY 이나 Section name, DATA, READWRITE 등으로 선언할 수 있다.
ⅱ)ENTRY Directive - 프로그램의 입장을 선언하는 지시어
ⅲ)END Directive - 소스파일의 끝임을 나타내는 지시어
ⅳ)LABEL - 해당 address를 표시하는 symbol이다.
실험2) Calling Subroutine - Discussion
* BL destination
asm의 구조를 이해하고 실행해 보시오.
현재 MOV 명령어로 인해 r0가 0xA로 증가하였고, pc는 0x8008로 다음 실행순서인 BL doadd를 나타내고 있다.
BL doadd를 실행하여 doadd라벨로 분기하여 pc는 doadd라벨의 첫 부분인 15번째 줄 0x801C를 나타내고 있다. r14(LR)에는 되돌아갈 7번줄(BL명령어의 다음줄)의 pc값이 저장된다.
<중 략>
* subroutine call에 대한 개념을 이해한다.
그래서 BL 명령어로 LR에 저장돼 있는 주소를 MOV pc.lr을 통해 PC에 LR에 저장돼 있는 주소를 넣어주어서 Subroutine으로 리턴할 수 있었다.
* 무한대 시간 후의 프로그램이 속해 있는 Label은 어디인가?
또한 stop이라는 라벨 끝애 B stop이라는 명령어를 붙여서 stop라벨에서 무한대로 분기가 일어나 일종의 무한loop를 형성하는 것을 확인하였다.
* r0의 값의 변화를 살펴보고 r0의 중간 값과 최종 값을 알아본다.
그리고 r0의 값은 초기값 0에서 4번째 줄 MOV r0, #10에 의해 0xA(=10)만큼 증가하였다가 doadd로 분기 후 15번째 줄 ADD r0,r0,r1에 의해 중간값 0xD(=13)으로 증가하였다가 다시 돌아가서 7번째 줄 ADD r0,r0,r1에 의해 최종값 0x10(=16)으로 증가하는 것을 알아 볼 수 있었다.
<이하생략>
참고 자료
ADS Developer Suite Assembler Guide / ARM
[HandOut]1_2._ARM_Architecture_and_Exception
[HandOut][2주차]_ARM_ASSEMBLY실습
[HandOut]1_3.ARMasm
[HandOut]ARMasm(2)
kkamagui의 프로그래밍 작업실 - http://kkamagui.egloos.com/
네이버 블로그 - http://blog.naver.com/venezia99