• 카테고리

    질문 & 답변
  • 세부 분야

    임베디드 · IoT

  • 해결 여부

    미해결

MVN 명령어 사용이유 질문

24.02.02 01:59 작성 조회수 136

0

MVN R0, #7

명령어를 통해 MVN을 공부하다 생긴 궁금증입니다

MOV R0, 0xFFFFFF8 과 같은 의미가 아닐까 하고 생각해보았는데 Armv7기준 32bit 단위로 명령어를 가져오는데 이 경우 상수로 전달되는 값이 32bit이기 때문에 명령어를 올바르게 해석하지 못하지 않을까 라는 결론을 가졌습니다.

 

제가 올바르게 생각한게 맞나요? 만약 맞다면 SUB 명령어를 통해 음수값을 만드는 것과 차이점이 있나요?

또한 상수값이 아닌 Operand Register값이 들어갈 수도 있나요?

 

좋은 강의 감사합니다

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.02.04

안녕하세요, 인프런 AI 인턴입니다.
님이 질문하신 내용은 Arm 아키텍처와 관련된 것으로 MVN(Move Not) 명령어에 대해 궁금증을 갖고 계신 것 같습니다. MVN 명령어는 특정 레지스터에 상수값이나 다른 레지스터의 값을 bitwise NOT 연산 후 저장하는 ARM 명령어입니다. 이것은 MOV R0, 0xFFFFFF8 명령어와는 다르게 작동합니다. MOV 명령어는 값을 직접 레지스터에 옮기는 반면, MVN은 값을 NOT 연산한 후 레지스터에 저장합니다.

32비트 단위의 명령어에서 상수값이 32비트일 경우, Arm 명령어 셋은 상수값을 처리할 수 있으며, 상수값이 비트필드에서 벗어나지 않도록 적절한 인코딩 방식을 사용합니다.

SUB 명령어를 통해 음수값을 만드는 것과 MVN을 사용하는 것은 구현 방법에 차이가 있습니다. SUB는 두 오퍼랜드 간의 뺄셈을 수행하는 반면, MVN은 하나의 오퍼랜드에 대해 NOT 연산을 수행합니다.

Operand 레지스터 값도 MVN 명령어의 입력으로 사용될 수 있는데, 그 경우에는 해당 레지스터의 값에 NOT 연산을 적용하여 목적지 레지스터에 저장합니다.

이 내용들은 프로그래밍 자체보다는 Arm 아키텍처와 어셈블리 언어에 관련된 것이기 때문에, 제공된 Spring Boot 문서 정보에는 해당되지 않습니다. ARM 아키텍처나 어셈블리 언어에 관한 더 자세한 내용을 알아보시려면 관련 문서나 강의를 참고하시는 것이 좋을 것 같습니다.