ARM assembly 관련 메모
processor state ==> ARM state or Thumb state 가 존재
operating mode ==> user mode or privileged mode 가 존재
user mode : user
privileged mode 종류 : Fast interrupt, Interrupt, Supervisor, Abort, System, Undefined
-----
<ARM state register set>
ARM state에서는 16개의 general register들(r0-r15)과 1개 또는 2개의 status register가 사용됨
CPSR(Current Program Status Register) : condition code flag 값들과 current mode bit값을 가지고 있음
privileged mode일때는 추가로 SPSR(Saved Program Status Register)에 접근할 수 있음
-----
<Thumb state register set>
8개의 general register(r0-r7)과 PC, stack pointer SP(ARM r13), LR(ARM r14), CPSR이 사용됨
-----
<APCS (Arm Procedure Call Standard)>
r0-r3 : function parameters (caller-saved registers)
=> function parameter가 4개 이상인 경우 추가 인자들은 스택에 저장됨
r4-r11 : general (callee-saved registers)
r13(sp) : stack pointer
r14(lr) : link register
=> Branch with Link(BL or BLX) 명령어가 실행될 때 r15(pc)의 복사본을 받음
r15(pc) : program counter
=> ARM state일 때는 word-aligned, Thumb state일 때는 halfword-aligned 되어있음
-----
<condition codes>
EQ : equal
NE : unequal
VS : overflow
VC : no overflow
<unsigned의 경우> HS : >=, HI : <, LS : <=, LO : <
<signed의 경우> GE : >=, GT : >, LE : <=, LT : <, PL : >= 0, MI : < 0