본문 바로가기

Programming/ARM

ARM ASM commond 해석 (LDMDB, LDMEA, STMDB, STMFD)

원문 : http://blog.naver.com/realdani?Redirect=Log&logNo=100007759984

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번지에 저장됨


 

참고로 Trace 의 ARM 명령어중 push 는 다음과 같이 해석이 된다.
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등등 명령어 실제 예|작성자 다니