임베디드/임베디드 레시피

Coprocessor Assembly

twoweeks-within 2024. 11. 27. 15:50

Coprocessor:  Co-worker , cpu 혼자 모든걸 처리할 수는 없으니

Coprocessor 명령 : 전용 register
Data를 전송하는 명령


1) Coprocessor 내부의 Register들을 장난 침.

(Coprocessor 내부 Register ↔ Coprocessor 내부 Register)

여기에 붙은 모든 것들은 Coprocessor 내부에 정의 된 녀석들
(형식)
CDP Coprocessor번호, Coprocessor 명령어, CRd, CRn
Coprocessor 명령어 : Coprocessor마다 준비된 명령어가 다름

CRd: Coprocessor 내부에 있는 Register,, Destination Register로 사용

CRn: Coprocessor 내부에 있는 Register > 인자 Register

2) Coprocessor 내부의 Register들을 ARM Register에 읽거나 반대로 써서 장난치는 경우.

   (Coprocessor 내부 Register ↔ ARM Register)
Coprocessor 명령: ARM core와 Coprocessor와의 통신에 관련된 Register, PSR명령과 유사

 

MRC, MCR : Coprocessor의 Register들과 직접적인 Register 값 교환을 하는 명령어

M X ← Y 형식입니다.

R : Core의 일반 Register,

C: coprocessor의 Register

MRC: R←C로서 R:=Coprocessor 
MCR은 C←R로서, C:=Register .
ex)
MCR 코프로세스번호, 무조건 0, 레지스터번호, Coprocessor 레지스터번호, c0, 무조건 0의 형태
  MCR p15, 0, r4, c2, c0, 0

     > coprocessor 15번 의 2번 register에 r4 값을 전송하라는 뜻이 됨을 상기 하시면 됨다~

3) Coprocessor내부의 Register를 Memory에 직접 읽어 들이거나 반대로 써서 장난 침.
(Coprocessor 내부 Register ↔ Memory)
LDC, STC : Coprocessor 내부 레지스터와 메모리 사이에 Load, Store 명령

 preindex, postindex 방식 존재

 

ex)

LDC p15, c2, [r0, 0x100] 

Coprocessor 15번의 register 2번 > r0+0x100이 가리키는 곳의 값을 load

 일반 load와 다른점 : 앞에 Coprocessor 번호인 p15 붙음.

LDR은 Register의 R, LDC는 Coprocessor의 C.

 

//Coprocessor 15 :  MMU, Cache에 관련된 coprocessor