ARM Instruction 에서 stm와 ldm의 addressing mode에 대해 질문드려요~

tomahawk28의 이미지


프로그램 소스 보던중에 의문이 생겼는데 Non-stack mode 일때는 addressing mode가

IA(icrement after) ,IB(icrement before) , DB(decrement before), DA(decrement after)

이렇게 있는데요

STMDB로 활용할때는 해당 레지스터에 넣거나 빼기 전에 일단 주소부터 -4를 해주고 들어가던데

STMIA를 쓸때의 결과는 어떨지 모르겠네요 스택이 감소하는 방향으로 늘어난다고 알고있는데..

이 경우에는 해당 레지스터에 넣고 뺀 "다음" 주소를 감소하는 방향이 아닌 위쪽으로 +4 시켜주는 건가요?

나빌레라 님의 강좌를 보니 태스크 콘트롤 블록이..

typedef struct __task_control_block{
\t int temp1;
\t int temp2;
}

이렇게 되어있을때 temp1에 해당하는 값을 stmia로 넣어주면 자동으로 그 주소는 temp2를 넣어줄 주소로 옮겨와있다고
하더군요.. 그러면 구조체의 입장에서는 하나 "낮춰"들어가야하는건데 주소를 "높여"들어가면 서로 다른게 아닌가요?

미진한 실력으로... 질문이 해결되지가않네요.. Reference manual이 익숙치가 않아서..

답변 주시면 감사하겠습니다~ ^_^