2.3.2. ARM 어셈블리 언어 모듈 예제

Example 2.1에서는 어셈블리 언어 모듈의 일부 핵심 구성요소를 보여 줍니다. 이 예제는 ARM 어셈블리 언어로 작성되었으며, 주 예제 디렉토리인 install_directory\RVDS\Examplesarmex.s로 제공되어 있습니다. 이 예제를 어셈블, 링크 및 실행하는 방법에 대한 자세한 내용은 코드 예제를 참조하십시오.

이 예제의 구성 부분에 대해서는 다음 단원에서 자세히 설명합니다.

Example 2.1. 

        AREA     ARMex, CODE, READONLY
                                ; Name this block of code ARMex
        ENTRY                   ; Mark first instruction to execute
start
        MOV      r0, #10        ; Set up parameters
        MOV      r1, #3
        ADD      r0, r0, r1     ; r0 = r0 + r1
stop
        MOV      r0, #0x18      ; angel_SWIreason_ReportException
        LDR      r1, =0x20026   ; ADP_Stopped_ApplicationExit
        SVC      #0x123456      ; ARM semihosting (formerly SWI) 
        END                     ; Mark end of file

ELF 섹션 및 AREA 지시어

ELF 섹션은 코드 또는 데이터의 독립적이고 명명된 나눌 수 없는 시퀀스입니다. 응용 프로그램을 만들려면 최소한 하나 이상의 코드 섹션이 있어야 합니다.

어셈블리 및 컴파일의 출력에는 다음이 포함될 수 있습니다.

  • 하나 이상의 코드 섹션으로, 대개 읽기 전용 섹션입니다.

  • 하나 이상의 데이터 섹션으로, 대개 읽기/쓰기 섹션입니다. 이러한 섹션은 0으로 초기화 (ZI) 될 수 있습니다.

링커는 섹션 배치 규칙에 따라 각 섹션을 프로그램 이미지에 배치합니다. 소스 파일의 인접 섹션이 응용 프로그램 이미지에서도 인접할 필요는 없습니다. 링커가 섹션을 배치하는 방법에 대한 자세한 내용은 링커 사용 설명서에서 5장 스캐터 로딩 설명 파일 사용을 참조하십시오.

소스 파일에서 AREA 지시어는 섹션의 시작을 표시합니다. 이 지시어는 섹션의 이름을 지정하고 해당 특성을 설정합니다. 특성은 이름 뒤에 배치되고 쉼표로 구분됩니다. AREA 지시어의 구문에 대한 자세한 내용은 AREA를 참조하십시오.

아무 이름이나 선택할 수 있지만 알파벳 이외의 문자로 시작하는 이름은 막대로 묶어야 합니다. 그렇지 않으면 AREA name missing 오류가 생성됩니다. 예를 들면 |1_DataArea|와 같습니다.

Example 2.1에서는 코드를 포함하고 READONLY로 표시되는 ARMex라는 단일 섹션을 정의합니다.

ENTRY 지시어

ENTRY 지시어는 실행되는 첫 번째 명령어를 표시합니다. C 코드를 포함하는 응용 프로그램에서는 진입점이 C 라이브러리 초기화 코드 내에도 포함되고 초기화 코드와 예외 처리기에도 포함됩니다.

응용 프로그램 실행

Example 2.1의 응용 프로그램 코드는 10진수 값 10 및 3을 레지스터 r0r1로 로드하는 start 레이블에서 실행을 시작합니다. 이러한 레지스터를 더한 결과는 r0에 배치됩니다.

응용 프로그램 종료

기본 코드가 실행된 후에는 디버거로 제어권이 반환되어 응용 프로그램이 종료됩니다. 이 작업은 ARM 세미호스팅 SVC (기본적으로 0x123456임) 를 다음 매개변수와 함께 사용하여 수행합니다.

  • r0은 angel_SWIreason_ReportException (0x18) 과 같습니다.

  • r1은 ADP_Stopped_ApplicationExit (0x20026) 와 같습니다.

RVCT 개발자 설명서8장 세미호스팅을 참조하십시오.

END 지시어

이 지시어는 이 소스 파일의 처리를 중지하도록 어셈블러에 지시합니다. 모든 어셈블리 언어 소스 모듈은 별도의 행에서 END로 끝나야 합니다.

Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential