stmfd, ldmfd에 대해 질문드립니다. 고수님들 답변좀 부탁드립니다.
stmfd store multiple full descending
저장 한꺼번에쭉 꽉차게 주소감소하면서
ldmfd load multiple full descending
꺼냄 한꺼번에쭉 꽉차게 주소감소하면서
강의를보고 이해하기로 저렇게 이해했습니다. 그러면 stmfd에서 낮은 주소방향으로 스택이 쌓여가다가 ldmfd에서도 또 낮은 주소방향으로 주소 포인터가 이동하면서 꺼내야 되는데 왜 ldmfd에서는 높은 주소방향으로 주소 포인터가 이동하면서 쌓아놨던 스택을 꺼내는 걸까요? store와 load 명령어의 동작 방식 때문에 그렇다면 st와 ld로 인해 위에 d의 의미가 감소가 아니라 증가로 바뀌는 것인가요?
단순히 push pop개념으로 이해하면 그냥 넘어가겠는데, 명령어상 문자상의 의미로는 틀린거같아서요.
ldmfa라고 해야 맞는 명령어이지 않을까요?
왜 저렇게 쓰는지 모르겠어요.
다른 분은 full descending 의미는 store에서 라고 하셨는데 그 말은 st냐 ld에 따라 마지막 d의 의미가 달라진다는 말씀이신 것같은데요. 제가 생각하는게 맞나요?
또 한가지 더요.
ldmfd는 현재 주소에서 큰 주소 방향으로 이동하는데 , 주소가 증가하고 데이터 빼고 하는 pop 인가요? .......1
"" , 데이터 빼고 주소가 증가하는 pop 인가요? .......2
1번 이 맞는 것같은데... 확실한지 모르겠네요.
질문이어렵나요?
제가 설명을 잘못해서 그런지 답변이 없네요. 부탁드릴께요.
ARM Addressing Mode 4
Load and Store Multiple instruction은 기본적으로
* 대상이 되는 레지스터의 값이 변경되는 방향 (increment / decrement) 및
* 데이터 접근에 대비한 변경 시점 (before / after)에 따라
ldm과 stm 각각에 대해 총 4 가지 조합으로 이용할 수 있습니다.
ldmia, stmda, ...
하지만 스택 연산에 대해서는 개별적인 연산 자체를 구분하는 이러한 이름 대신
다음과 같은 스택의 특성에 초점을 맞추어 별도의 이름을 이용할 수도 있습니다.
* 스택 포인터가 마지막으로 저장된 위치를 가리키는지 (full)
그 다음의 비어있는 위치를 가리키는지 (empty)
* 스택이 아래로 증가하는지 (descending) 위로 증가하는지 (ascending)
이도 역시 4가지 조합이 가능합니다.
ldmfd, stmea, ...
참고로 다음과 같은 관계가 성립합니다.
ldmfd == ldmia
stmfd == stmdb
ldmea == ldmdb
stmea == stmia
댓글 달기