강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

platformpjt02님의 프로필 이미지
platformpjt02

작성한 질문수

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)

Armv7-A: BL 명령어 실행 후 스택 Push 및 Pop 디버깅 실습 (Practice1-Part2)

LDM

작성

·

47

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

  1. LDM 동작: 이 명령어는 지정된 여러 레지스터에 메모리 데이터를 동시 로드하는 기능을 합니다. r13부터 시작해 나열된 모든 레지스터에 차례로 데이터를 로드합니다.

  2. POP과의 유사점:

    • POP의 역할: 스택에서 자료를 추출하는 명령으로, 보통은 스택 포인터에서 데이터를 가져옵니다. POP도 LDM처럼 여러 레지스터에 데이터를 로드할 수 있습니다.
    • 유사점: 위의 LDM 예제는 흔히 스택에서 데이터를 꺼내오는 즉, 스택 언와인딩의 역할을 하므로 POP과 같은 역할을 할 수 있습니다.
    • 차이점: 하지만, LDM 자체는 스택 연산에 한정되지 않으며 그 사용처에 따라 달라질 수 있습니다. 주의해야 할 점은 POP은 스택 포인터를 자동으로 조정하지만, LDM 명령어는 명시적 스택 포인터 조정 없이 데이터를 로드합니다.

추가 정보

LDM의 본래 기능은 스택 연산뿐만 아니라 여러 위치에서 데이터를 로드하려는 다양한 시나리오에서 유용합니다. 예를 들어, 루프 내에서 일정한 데이터를 동시에 로드하는 데에도 사용할 수 있습니다.

관련된 심화적인 내용이나 다른 질문이 있으면 언제든지 댓글로 추가 질문을 부탁드립니다. 유사 질문으로 도움이 될 수 있는 게시물을 아래에 안내드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

platformpjt02님의 프로필 이미지
platformpjt02

작성한 질문수

질문하기