asm 해석에 대한 내용은 볼때마다 까먹는다 ;;;
그나마 arm asm 은 간단해서 다행~
***********************************************************************
Decrement Before : 현제 가리키로 있는 곳에서 상위주소(0번지쪽으로) 가리킨후 실행(STMFD)
LDMDB, LDMEA, STMDB, STMFD 는 모두 r13!,{r2-r3}였을 때
만약 r13에 !가 안붙으면 r13의 값은 변하지 않음
LD일 경우,
처음 r13이 #&14일때 마지막은 #&0C를 가리키고,
r2에 Ox000000C번지의 word, r3에는 Ox0000010번지의 word가 들어감
ST일 경우,
처음 r13이 #&14일때 마지막은 #&0C를 가리키고,
r2의 내용이 Ox0000000C번지에, r3의 내용이 Ox00000010번지에 저장됨
PUSH {r0-r7, LR} -> STMDB r13!, {r0-r7, LR}
POP {r0-r7, PC} -> LDMIA r13!, {r0-r7, PC}
예를들어 다음과 같은 명령은
push {r4-r8, r10-r11, r14}
는 스택에 r14, r11, r10, r8, r7, r6, r5, r4 를 순차적으로 저장하고 SP 를 옮긴다.
**********************************************************************
Decrease Before
LDMDA,LDMFA,STMDA,STMED 모두 r13!,{r2-r3}였을 때
만약 r13에 !가 안붙으면 r13의 값은 변하지 않음
LD인 경우,
처음 r13이 #&14일때 마지막은 #&0C를 가리키고,
r2에는 0x00000010번지의 내용이 들어가고,
r3에는 0x00000014번지의 내용이 들어감,
ST의 경우,
처음 r13이 #&14일때 마지막은 #&0C를 가리키고
r2의 내용이 0x00000010번지에 저장
r3의 내용이 0x00000014번지에 저장
**********************************************************************
Increment Before
STMIB,STMFA,LDMIB,LDMED 모두 r13!,{r2-r3}였을 때
만약 r13에 !가 안붙으면 r13의 값은 변하지 않음
LD일 경우,
처음 r13이 #&14일때 마지막은 #&1C를 가리키고,
r2에 0x00000018번지의 word내용이저장, r3에 0x0000001c의 (내용)word가 저장
ST일 경우,
처음 r13이 #&14일때 마지막은 #&1C를 가리키고,
r2의 내용이 0x00000018번지에, r3의 내용이 0x0000001c에 저장됨
**********************************************************************
Increment After
STMIA,STMEA,LDMIA,LDMFD 모두 r13!,{r2-r3}였을 때
만약 r13에 !가 안붙으면 r13의 값은 변하지 않음
LD일 경우
r13은 0x00000014 -> 0x0000001C로 변함
r2에 Ox00000014번지 내용이 저장
r3에 Ox00000018번지 내용이 저장
ST일 경우
r13은 0x00000014 -> 0x0000001C로 변함
Ox00000014번지에 r2내용이 저장
Ox00000018번지에 r3내용이 저장
[출처] LDMDB, LDMEA, STMDB, STMFD등등 명령어 실제 예|작성자 다니
'Programming > ARM' 카테고리의 다른 글
L1, L2 cache 와 I cache, D cache 의 관계 (2) | 2010.05.04 |
---|---|
arm - SIGSERV나 SIGILL 이 발생했을때의 asm 동작 (0) | 2010.04.23 |
arm cache 의 속성과 셋팅 (2) (0) | 2010.02.01 |
MMU 의 section register 의 의미 (0) | 2010.02.01 |
arm cache 의 속성과 셋팅 (1) (0) | 2010.02.01 |