가장 많이 본 글

2014년 10월 6일 월요일

arm. arm의 register

내 본업은 system engineer이다.

그간 정리해놓았던 것들을 blog로 옮겨보려고 한다. 차근차근...



ARM register 37개임거의범용 register로 구성되어 있다.
User 
System 
FIQ 
Supervisor 
Abort 
IRQ 
Undef 
R0 






R1 






R2 






R3 






R4 






R5 






R6 






R7 






R8 

R8_fiq 




R9 

R9_fiq 




R10 

R10_fiq 




R11 

R11_fiq 




R12 

R12_fiq 




R13(SP) 

R13_fiq 
R13_svc 
R13_abt 
R13_irq 
R13_und 
R14(LR) 

R14_fiq 
R14_svc 
R14_abt 
R14_irq 
R14_und 
R15(PC) 







CPSR 







SPSR_fiq 
SPSR_svc 
SPSR_abt 
SPSR_irq 
SPSR_und 

Current Program Status Register(CPSR) 
  • 31 ~ 28 (NZCV) 
    • N: Negative 
    • Z: Zero 
    • C: Carry 
    • V: oVerflow 
  • 27 ~ 8: unused 
  • 7: IRQ 
  • 6: FIQ enable(0)/disable(1), interrupt 걸리지 않도록 control 가능함. 
  • 5: Thumb mode / ARM mode 
  • 4 ~ 0: 현재의 mode 
Saved Program Status Register(SPSR) 
  • CPSR 복사해 넣는 특수 Register. 백업용임. 
  • SPSR 값을 CPSR 다시 집어 넣으면 이전 mode 곧바로 복귀 가능함. 

R14: Linked Register(LR) 
  • 어딘가로 jump 어디서 branch 왔는지 표시하는  

R13: Stack Pointer(SP) 
  • 현재 Stack 어디까지 쌓아두었는가. 

R15: Program counter(PC) 
  • 현재 어디를 수행하고 있는지를 나타냄. 

Context: Register set snapshot. , R0 ~ R1, CPSR snapshot 

Thumb / ARM mode 차이 
  • Thumb R0 ~ R7 사용 
  • ARM R0 ~ R12까지 사용 
FIQ banked register 많은 이유는 stack backup하는 시간 절약... 

Kernel 영역에서 행하는 것은 supervisor mode. 
User 영역에서 실행하는 것은 user mode. 
모델에서 0~3 4개의 모드가 있는데 kernel 0모드, user 3 모드, 1, 2 OS 제공해줌. 
user mode system call SWI(SW interrupt) 명령을 내리면 kernel 영역으로 진입함. 
unistd.h system call 정의 되어 있음 

댓글 없음: