배우고픈 공돌이

[교육] ARM 개론 본문

ARM/Tutorial

[교육] ARM 개론

내 마음 아홉수 2017. 9. 21. 20:08

1. 파이프라인 5단계


fetch > decode > excute > mem access > write back



2. 레지스터 뱅크의 개수


총 37개, 범용 31개 - 특수범용 : r13 - 15 (sp, lr, pc)

상태 레지스터 - 6개 : CPSR -1, SPSR - 5



3. 상태 레지스터 구조


1) Carry 발생 조건 : 정수 >>  i - j >=0

2) FIQ, IRQ set 1 >> disable

3) 5번 비트 set 1 >> thumb 명령 / set 0 >> arm 명령 ( 예외처리할 때에는 arm모드여야한다. )


** 전원이 들어왔을 때, reset으로 분기하고 PSR을 셋팅하는데 사용하는 값 : 0xD3 (no exception, arm mode, supervisor mod)


4. exception vector table (빈칸 문제)



5. exception 후의 복귀 명령 ( PC 조정 )



6. arm 데이터 프로세싱 명령어 구조


1) 즉치 값(immediate value) : 오퍼랜드2에 즉치 값으로 #0x8000/000F를 넣는다면 12비트에는 어떤 형식으로 저장되는가?

op2 = 0x13E


2) 데이터 프로세싱에서의 어셈 표현이 틀린 것은?

ADD r0, r1, r2

ADD r0, r1, r2, LSL #2

ADD r0, r1, r2, LSL r3

ADD r0, r1, #0xFF


7. 64bit 산술 연산에서 사용하는 명령어


하위바이트 먼저 계산 후, 상위바이트를 계산 ( double 형 )


8. 비교 명령어에서 셋팅되는 상태 플래그

CMP에서 셋팅되는 상태 비트 : Z, C


9. 분기 명령어



10. 싱글 & 멀티 로드, 스토어 명령어

1) 

LDM - increase - after = 현재 sp 공간부터 위로 데이터를 불러온다.

LDM - increase - before = 현재 sp 위부터 위로 데이터를 불러온다.

LDM - decrease - after = 아래부터 현재 위치까지 데이터를 불러온다.

LDM - decrease - before = 아래부터 현재 전까지 데이터를 불러온다.


STM - increase - after = 현재 sp 공간부터 위로 데이터를 저장한다.

STM - increase - before = 현재 sp 위부터 위로 데이터를 저장한다.

STM - decrease - after = 아래부터 현재 위치까지 데이터를 저장한다.

STM - decrease - before = 아래부터 현재 전까지 데이터를 저장한다.


ex)



11. ARM 어셈블러 사용


리셋을 제외한 다른 예외 접근에 대해서 위에 설명한 것과 같이 바로 pc에 값을 넣는다.


그 이유는 분기하기에는 너무 멀기 때문.



mrs = move to register from status register

bic = bit clear

orr = or

msr = move to status register from register



bleq : 상태 레지스터 Z의 값이 1이면 eq 조건에 만족하여 cmp_eq_ok 함수로 분기되었다가 돌아온다.

blne : 상태 레지스터 Z의 값이 0이면 not eq로 cmp_ne_ok 함수로 분기되었다가 돌아온다.

mov r5, lr / mov lr, r5 : 

- 분기했다가 복귀하면서 lr이 변경되어 돌아온다. 즉, 미리 저장(백업)의 의미가 크다.

- lr은 분기할 때, 돌아갈 주소를 저장한다. 

- cmp_eq_ok로 분기했다 가정하면 lr은 asm_cmp_test의 mov lr, r5 을 저장하고 있다.

- 그렇게 된다면 메인으로 돌아가기 위한 lr는 사라지는 것임으로 사전에 back-up한다.


12. 커널 모듈의 적재와 장치 추가. 어플리케이션이 open할 때, 시스템 콜 과정



'ARM > Tutorial' 카테고리의 다른 글

[교육] ARM 프로세서와 명령어  (0) 2017.09.09
[교육] ARM 개요  (0) 2017.09.04
stm32cubemux 사용  (0) 2017.07.31
STM32F4 디스커버리 보드 : LED blink  (0) 2017.05.08
ARM 컴파일과정  (0) 2017.04.29
Comments