우리가 외국인이 어떤 사람인지 잘 알려면 외국어를 배워야 합니다. 외국어를 직접 말하면서 외국인과 대화를 해야 그 사람의 성격을 제대로 알 수 있습니다.
 
그렇다면 프로그래머 입장에서 ARM 프로세서가 어떤 동작을 하는 지 파악하려면 무엇을 배워야 할 까요? 바로 ARM 어셈블리 명령어입니다.
 
미국인과 대화를 하려면 영어를 말하듯 ARM 프로세서와 대화를 하려면 ARM 어셈블리 명령어를 사용해야 합니다. 즉, ARM 어셈블리 명령어는 ARM 프로세서와 소통하는 대화하는 언어라고 말할 수 있습니다.
 
ARM 어셈블리 명령어를 사용하면 ARM 프로세서와 어떻게 대화를 할 수 있을까요?
이번에는 프로그래머 입장에서 조금 더 구체적으로 ARM 프로세서와 대화하는 패턴을 예로 들겠습니다.
 
쉽게 설명을 하면 ARM 프로세서와는 대화하는 패턴을 2가지로 요약할 수 있습니다. 
 
   ● ARM 프로세서에게 일을 시킨다.
   ● ARM 프로세서의 상태 정보를 읽어 오고 싶다.
   
프로그래머 입장에서 위에서 언급한 패턴을 벗어나는 대화를 하는 경우는 드뭅니다. 
 
ARM 어셈블리 명령어의 포멧 
 
ARM 어셈블리 명령어는 명령어와 명령어를 수행한 결과를 저장하는 레지스터로 구성돼 있습니다.
다음 그림을 보면서 ARM 어셈블리 명령어의 포멧을 설명하겠습니다.
 

 
그림 1.3 어셈블리 명령어의 포멧
 
위 그림에서 표기된 필드 중 왼쪽 부분부터 살펴봅시다.
 
   ● OP Code: mov, add, sub, str, ldr와 같이 어셈블리 명령어의 기능을 나타내는 필드입니다. 
   ● cond: 어셈블리 명령어를 조건부로 실행하기 위해 OP Code 뒤에 붙여서 사용되는 필드입니다. 명령문의 추가 옵션입니다.
   ● Rd: 연산을 수행한 다음의 결과를 저장하는 레지스터인 목적 레지스터가 위치하는 필드입니다. 이 필드에는 R0~R15 레지스터가 올 수 있습니다. 
   ● Rn: Operand1로 레지스터가 위치하는 필드이며 R0~R15 레지스터가 사용됩니다. 
   ● Rm: Operand2로 레지스터뿐만 아니라 상수, 주소, 비트 시프트 연산식과 같은 등 다양한 값이 위치하는 필드입니다.
 
이번에는 다음과 같이 간단한 명령어를 예를 들어 어셈블리 명령어를 소개합니다. 
 
   ●  mov r1, #0x1
   
위 명령어는 mov라는 명령어인데 레지스터에 데이터를 저장하는 역할을 합니다. 
mov란 명령어를 실행하면 실행 결과는 어디에 저장될까요? 바로 레지스터 r1입니다.
   
처음에 ARM 어셈블리 명령어를 보고 공포에 질려 공부를 포기하는 분들이 많지만 ARM 어셈블리 명령어의 포멧은 다음과 같이 정말로 간단합니다.  
 
ARM 어셈블리는 ARM의 기본 개념과 더불어 배울 수 있는 개념이므로  어셈블리 명령어의 의미와 ARM 프로세서의 동작 원리를 확인할 수 있습니다.
< '시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리' 저자>
 
* 유튜브 소개 영상 

+ Recent posts