어셈블리어 (BL 명령어의 작동 및 레지스터의 변화)
- 최초 등록일
- 2010.12.24
- 최종 저작일
- 2010.12
- 3페이지/ 한컴오피스
- 가격 1,000원
소개글
실습3. 14page 의 코드를 작성하여 실제 레지스터를 살펴 어떤식으로 함수 호출이 진행되는가를 보라.
▶BL 명령어의 작동 및 레지스터(LR)의 변화
▶리턴(MOV pc, lr)시 레지스터 및 PC의 변화
소스코드 및 스크린샷 첨부
목차
없음
본문내용
실습3. 14page 의 코드를 작성하여 실제 레지스터를 살펴 어떤식으로 함수 호출이 진행되는가를 보라.
▶BL 명령어의 작동 및 레지스터(LR)의 변화
▶리턴(MOV pc, lr)시 레지스터 및 PC의 변화
1. ADR.W R0, str1
ADR.W R1, str2
-R0레지스터에는 str1의 시작 주소인 0x2C가 들어있고, R1 레지스터에는 str2의 시작주소인 0x36이 들어있다.
2.BL strcmp
-strcmp 함수호출 부분으로, strcmp label 로 branch 한다. 여기서 함수가 끝나면 다시 돌아와서 다음 명령어를 수행해야하므로 R14(LR)에 현재 PC(1번에서 보면 알 수 있듯이 0xe이다)에서 4를 더한 값을 저장한다. 여기서 의문점이 생겼다. 원래 0xe 에 4를더한값(다음명령어의주소) 는 0x12여야한다. Disassembly 창에서 확인해봐도 다음 명령어인 program_end 의 시작 주소는 0x12 이다.
그런데 R14(LR)에 저장되는 값을 보면 0x13인 것을 알 수 있는데, 이것은 THUMB의 특성상 LSB가 1이여야 하기 때문에 1이 더해진다.
3. strcmp 함수
-strcmp 함수는 두 개의 문자열을 비교하는 함수로 주석만 봐도 이해가 가므로 상세한 설명은 하지 않고, 실습보고서 주제인 LR의 변화와, 리턴시 레지스터 및 PC의 변화에 대해서 알아보겠다.
참고 자료
없음