2.2.5. 레지스터

ARM 프로세서에는 37개의 레지스터가 있습니다. 이러한 레지스터는 뱅크의 일부가 서로 겹치는 방식으로 정렬됩니다. 레지스터 뱅크는 프로세서 모드에 따라 서로 다릅니다. 뱅크 레지스터는 신속한 컨텍스트 전환을 통해 프로세서 예외와 권한 있는 연산을 처리할 수 있도록 합니다. 레지스터가 뱅크되는 방법에 대한 자세한 내용은 ARM 아키텍처 참조 문서를 참조하십시오.

다음 레지스터를 사용할 수 있습니다.

30개의 범용 32비트 레지스터

15개의 범용 레지스터 (r0 ~r12, sp, lr) 는 현재 프로세서 모드에 따라 한 번에 하나씩 표시됩니다.

sp (r13) 는 스택 포인터입니다. C 및 C++ 컴파일러에서는 항상 sp를 스택 포인터로 사용합니다. Thumb-2에서는 sp가 스택 포인터로 엄격하게 정의되기 때문에 sp가 사용될 경우 스택 조작에 도움이 되지 않는 여러 명령어는 예상할 수 없는 결과를 낼 수 있습니다. sp는 범용 레지스터로 사용하지 않는 것이 좋습니다.

사용자 모드에서 lr (r14) 은 링크 레지스터로 사용되어 서브루틴 호출이 수행될 때 복귀 주소를 저장합니다. 또한 반환 주소가 스택에 저장될 경우 범용 레지스터로 사용될 수도 있습니다.

예외 처리 모드에서 lr은 예외 복귀 주소나 서브루틴 복귀 주소 (서브루틴 호출이 예외 내에서 실행될 경우) 를 저장합니다. 또한 복귀 주소가 스택에 저장될 경우 범용 레지스터로 사용될 수도 있습니다.

PC (프로그램 카운터)

프로그램 카운터는 pc (r15) 로 액세스되며, ARM 상태에 있는 각 명령어에 대해 1워드 (4바이트) 씩 증가하거나 Thumb 상태에서 실행되는 명령어의 크기만큼 증가합니다. 분기 명령어는 대상 주소를 pc로 로드합니다. 또한 데이터 연산 명령어를 사용하면 PC를 직접 로드할 수도 있습니다. 예를 들어 서브루틴에서 복귀하려면 다음을 사용하여 링크 레지스터를 PC로 복사할 수 있습니다.

    MOV pc,lr

실행하는 동안 pc는 현재 실행되는 명령어의 주소를 포함하지 않습니다. 현재 실행되는 명령어의 주소는 일반적으로 ARM의 경우 pc-8이거나 Thumb의 경우 pc-4입니다.

APSR (응용 프로그램 상태 레지스터)

APSR은 ALU (산술 논리 단위) 상태 플래그의 복사본을 포함하며, 조건부 명령어의 실행 여부를 결정하는 데 사용됩니다. 자세한 내용은 조건부 실행을 참조하십시오.

ARMv5TE 및 ARMv6 이상에서는 APSR에 Q 플래그도 포함됩니다 (ALU 상태 플래그 참조).

ARMv6 이상에서는 APSR에 GE 플래그도 포함됩니다 (병렬 더하기 및 빼기 참조).

이러한 플래그에는 MSRMRS 명령어를 사용하여 모든 모드에서 액세스할 수 있습니다. 자세한 내용은 MRSMSR을 참조하십시오.

CPSR (현재 프로그램 상태 레지스터)

CPSR에는 다음이 포함됩니다.

  • APSR 플래그

  • 현재 프로세서 모드

  • 인터럽트 비활성화 플래그

  • 현재 프로세서 상태 (ARM, Thumb, ThumbEE 또는 Jazelle)

  • IT 블록의 실행 상태 비트

실행 상태 비트는 IT 블록의 조건부 실행을 제어하며 (IT 참조) ARMv6TE 이상에서만 사용할 수 있습니다.

APSR 플래그만 모든 모드에서 액세스할 수 있고 CPSR의 나머지 비트에는 MSRMRS 명령어를 사용하여 권한 모드에서만 액세스할 수 있습니다. 자세한 내용은 MRSMSR을 참조하십시오.

SPSR (저장된 프로그램 상태 레지스터)

SPSR은 예외가 발생할 때 CPSR을 저장하는 데 사용됩니다. 각 예외 처리 모드에서는 하나의 SPSR에 액세스할 수 있습니다. 사용자 모드와 시스템 모드는 예외 처리 모드가 아니므로 SPSR을 가지고 있지 않습니다. 자세한 내용은 개발자 설명서에서 6장 프로세서 예외 처리를 참조하십시오.

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