티스토리 뷰

Study/Architecture

[ARM] Registers on the ARM Cortex M4

생각많은 소심남 2017. 2. 10. 00:09

R0부터 R12 까지는 General Purpose(GP) Register, 즉 범용적으로 사용할 수 있는 register를 나타낸다. 이때 범용적이라고 함은 이 register field에 어떤 data가 담길 수도 있으며, 혹은 어떤 영역을 가리키는 address가 들어갈 수 있다는 것이다. R13은 Stack pointer(SP)이며, 보통 프로그램 구동시 필요한 Stack의 top을 가리키는 index를 담고 있다. R14는 Link Register 인데, 만약 어떤 함수가 호출될 경우 함수의 return address를 담고 있다. 물론 return address 뿐만 아니라 interrupt 같은 exception을 다룰때도 사용되기도 한다. 마지막으로 R15는 Program Counter(PC)이고, memory로부터 fetch되어 오는 다음 instruction을 가리키는 역할을 한다. Processor는 보통   instruction fetch -> Decode -> Execute 의 과정을 수행하는데, 이때 instruction fetch가 수행되면서 PC가 증가하게 된다.

 앞에서 이야기 한바와 같이 Register는 어떤 data를 담는 역할을 하고, 그 담겨진 data는 Architecture마다 다르다. ARM의 경우 ARM Architecture Procedure Call Standard(AAPCS) 라는 일종의 규칙에 따라서 프로그램 동작시 R0, R1, R2, R3 register에 특정 정보를 담는다. 예를 들어 C 함수가 호출될때 이때 함수의 인자가 있는 경우 해당 값들이 R0~R3 register에 저장된다.  또 함수에서 return될때는 R0에 return parameter가 들어간다.

앞에서 언급한 Register 이외에도 현재 동작하는 프로그램의 상태를 나타내는 Program Status register가 3개 존재하며 각각 Application Program Status Register(APSR), Interrupt Status Register(IPSR), Execution Program Status Register(EPSR) 라고 불린다. 

 이중 APSR의 N, Z, C, V, Q는 ALU 동작의 결과에 대한 간단한 요약을 나타낸다. 이값을 통해서 ALU의 output을 정확히 알수는 없지만, 그래도 해당 field의 여부에 따라 output이 음수인지 아닌지, 혹은 carry가 있는 여부, overflow 여부를 확인할 수 있다.(Q는 Saturation 여부라고 하는데, 어떤건지 모르겠다..., 또 T도 ARM Thumb instruction 지원 여부를 나타낸 것이라고 하는데 사실 잘 모르겠다...)

 ISR Number는 말그대로 processor상에서 어떤 interrupt가 발생했는지를 알려준다. 참고로 이 interrupt와 관련한 mask register가 따로 존재한다(exception mask register). 그리고 마지막으로 현재 동작중이 task나 program의 priority를 나타내는 register(BASEPRI)도 존재한다. M4에서는 8단계의 priority가 존재하는데 0번에 가장높고, 7번이 낮다. 여기서 높다 낮다의 차이는 우선순위를 말한다. 가령 Priority가 3인 task가 수행중인 상태에서 Priority 2인 task가 동작할 경우, 그 task가 먼저 수행되게 된다.( 이 개념도 preemption/non-preemption을 고려하면 끝도 없다.)

'Study > Architecture' 카테고리의 다른 글

[Architecture] Processes  (0) 2016.07.07
[Architecture] MMU improvements  (0) 2016.07.06
[Architecture] Contexts  (0) 2016.07.05
[Architecture] Building the MMU (2)  (1) 2016.07.04
[Architecture] Building the MMU (1)  (0) 2016.06.30
[Architecture] Page faults  (0) 2016.06.29
[Architecture] Basics of Virtual Memory (2)  (0) 2016.06.26
댓글