7.8.1. ALIGN

ALIGN 지시어는 NOP 명령어나 0으로 패딩하여 지정한 경계에 맞춰 현재 위치를 정렬합니다.

구문

ALIGN {expr{,offset{,pad{,padsize}}}}

인수 설명:

expr

20에서 231 사이의 2의 제곱으로 평가되는 숫자 식입니다.

offset

임의의 숫자 식일 수 있습니다.

pad

임의의 숫자 식일 수 있습니다.

padsize

1, 2 또는 4일 수 있습니다.

연산

현재 위치는 아래 형식의 다음 주소에 맞춰 정렬됩니다.

offset + n * expr

expr을 지정하지 않으면 ALIGN이 현재 위치를 다음 워드 (4바이트) 경계에 설정합니다. 이전 위치와 새 현재 위치 사이의 사용하지 않는 바이트는 다음으로 채워집니다.

  • pad를 지정한 경우, pad의 복사본다음 조건을 모두 만족하는 경우,

  • NOP 명령어

    • pad를 지정하지 않은 경우

    • ALIGN 지시어가 ARM 또는 Thumb 명령어 뒤에 나오는 경우

    • 현재 섹션에서 CODEALIGN 특성이 AREA 지시어에 설정되어 있는 경우

  • 그 외의 경우는 0

padpadsize의 값에 따라 바이트, 하프워드 또는 워드로 처리됩니다. padsize를 지정하지 않으면 pad가 데이터 섹션에서는 바이트로, Thumb 코드에서는 하프워드로, ARM 코드에서는 워드로 기본적으로 처리됩니다.

사용법

ALIGN을 사용하여 데이터와 코드가 적절한 경계에 맞춰 정렬되도록 합니다. 일반적으로 이 지시어는 다음 경우에 필요합니다.

  • ADR Thumb 의사 명령어가 워드로 정렬된 주소만 로드할 수 있지만 Thumb 코드 내의 레이블이 워드로 정렬되지 않을 수 있습니다. ALIGN 4를 사용하면 Thumb 코드 내의 주소를 4바이트로 정렬할 수 있습니다.

  • ALIGN을 통해 일부 ARM 프로세서에서 캐시를 이용합니다. 예를 들어 ARM940T에서 16바이트 행이 있는 캐시를 이용합니다. ALIGN 16을 사용하면 16바이트 단위로 함수 항목을 정렬하고 캐시 효율성을 최대화할 수 있습니다.

  • LDRDSTRD 더블워드 데이터 전송이 8바이트로 정렬되어야 합니다. LDRD 또는 STRD를 사용하여 데이터에 액세스해야 할 경우 DCQ (데이터 정의 지시어 참조) 같은 메모리 할당 지시어 앞에 ALIGN 8을 사용합니다.

  • 행의 레이블은 자동으로 임의로 정렬될 수 있습니다. 다음 ARM 코드는 워드로 정렬됩니다 (Thumb 코드의 경우 하프워드로 정렬됨). 따라서 레이블이 코드 주소를 올바로 지정하지 않습니다. 레이블 앞에 ALIGN 4 (Thumb의 경우, ALIGN 2) 를 사용합니다.

정렬은 루틴이 있는 ELF 섹션의 시작 부분을 기준으로 지정됩니다. 이 섹션은 동일하거나 덜 정교한 경계에 맞춰 정렬되어야 합니다. AREA 지시어의 ALIGN 특성은 이와 다르게 지정됩니다 (AREA예제 참조).

예제

        AREA    cacheable, CODE, ALIGN=3
rout1   ; code              ; aligned on 8-byte boundary
        ; code
        MOV     pc,lr       ; aligned only on 4-byte boundary
        ALIGN   8           ; now aligned on 8-byte boundary
rout2   ; code

        AREA    OffsetExample, CODE
        DCB     1           ; This example places the two
        ALIGN   4,3         ; bytes in the first and fourth
        DCB     1           ; bytes of the same word.

        AREA    Example, CODE, READONLY
start   LDR     r6,=label1
        ; code
        MOV     pc,lr
label1  DCB     1           ; pc now misaligned
        ALIGN               ; ensures that subroutine1 addresses
subroutine1                 ; the following instruction.
        MOV r5,#0x5
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential