인프런 커뮤니티 질문&답변
LDM
작성
·
67
0
안녕하세요, ldm 명령어가 수업 중 몇번 등장하는데요,
본론은, ldm r13, {r4, r5, r11, r13, pc}
에서 r13위치 기준으로 쭉 읽어오는 것 같은데요, (맞겠죠?)
이 명령어도 stack 의 pointer 를 바꾸는 것 같은데요, 그럼 사실상 POP 과 같은 명령어라고 보면 되는 건가요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. platformpjt02님.
LDM 명령어에 관한 질문을 해주셨네요. LDM은 “Load Multiple”의 약자로, 메모리에서 여러 레지스터로 데이터를 한꺼번에 로드하는 ARM의 명령어입니다. 질문하신 ldm r13, {r4, r5, r11, r13, pc}의 경우, r13을 기준으로 메모리에서 데이터를 읽어오며 지정된 레지스터로 로드합니다.
LDM과 Stack Operation
LDM 동작: 이 명령어는 지정된 여러 레지스터에 메모리 데이터를 동시 로드하는 기능을 합니다. r13부터 시작해 나열된 모든 레지스터에 차례로 데이터를 로드합니다.
POP과의 유사점:
- POP의 역할: 스택에서 자료를 추출하는 명령으로, 보통은 스택 포인터에서 데이터를 가져옵니다. POP도 LDM처럼 여러 레지스터에 데이터를 로드할 수 있습니다.
- 유사점: 위의 LDM 예제는 흔히 스택에서 데이터를 꺼내오는 즉, 스택 언와인딩의 역할을 하므로 POP과 같은 역할을 할 수 있습니다.
- 차이점: 하지만, LDM 자체는 스택 연산에 한정되지 않으며 그 사용처에 따라 달라질 수 있습니다. 주의해야 할 점은 POP은 스택 포인터를 자동으로 조정하지만, LDM 명령어는 명시적 스택 포인터 조정 없이 데이터를 로드합니다.
- POP의 역할: 스택에서 자료를 추출하는 명령으로, 보통은 스택 포인터에서 데이터를 가져옵니다. POP도 LDM처럼 여러 레지스터에 데이터를 로드할 수 있습니다.
추가 정보
LDM의 본래 기능은 스택 연산뿐만 아니라 여러 위치에서 데이터를 로드하려는 다양한 시나리오에서 유용합니다. 예를 들어, 루프 내에서 일정한 데이터를 동시에 로드하는 데에도 사용할 수 있습니다.
관련된 심화적인 내용이나 다른 질문이 있으면 언제든지 댓글로 추가 질문을 부탁드립니다. 유사 질문으로 도움이 될 수 있는 게시물을 아래에 안내드립니다:
- 여러 가지 질문 - ARM 명령어와 관련해서 다루어진 게시물이 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





