본문 바로가기

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리/4장: 어셈블리 명령어

arm instruction(명령어) - ldm

"ldm r6,{r2-r3}" 명령어를
Trace32로 실행한 과정을 업데이트할께요.
 
R6 레지스터가 C011AACC 주소를 가르키고 있고,
C011AACC 주소에는 10001000 값이 담겨져 있어요.
[Before]
N _  R0          0  R8          0  ^S+ ^Stack_+
Z _  R1          0  R9          0
C _  R2          0  R10         0
V _  R3          0  R11         0
Q _  R4          0  R12         0
     R5          0  R13  D000D000
0 _  R6   C011AACC  R14         0
1 _  R7          0  PC   C01A7310
2 _  SPSR       10  CPSR     01D3
 
(where)
_____address|________0________4________8________C
NSD:C011AAC0| E59F2198 E59F3198 E88B000C>10001000
NSD:C011AAD0| E59B300C E12FFF33 E5942014 E5943010
NSD:C011AAE0| E023A392 E5942000 E2833080 E0823003
 
"ldm r6,{r2-r3}" 명령어를 실행하고 나니,
R2와 R3이 각각, 10001000, E59B300C로 업데이트 되었네요.
[After]
N _  R0          0  R8          0
Z _  R1          0  R9          0
C _  R2   10001000  R10         0
V _  R3   E59B300C  R11         0
Q _  R4          0  R12         0
     R5          0  R13  D000D000
0 _  R6   C011AACC  R14         0
1 _  R7          0  PC   C01A7314
2 _  SPSR       10  CPSR     01D3
 
아래와 같이 보면 좀 더 이해하기 쉽겠죠?
_____address|________0________4________8________C
NSD:C011AAC0| E59F2198 E59F3198 E88B000C>10001000(R2)
NSD:C011AAD0| E59B300C(R3) E12FFF33 E5942014 E5943010
NSD:C011AAE0| E023A392 E5942000 E2833080 E0823003