4.8.1. B, BL, BX, BLX 및 BXJ

분기, 링크 포함 분기, 분기 및 교환 명령어 세트, 링크 포함 분기 및 교환 명령어 세트, 분기 및 Jazelle 상태로 변경

구문

op1{cond}{.W} label
op2{cond} Rm

인수 설명:

op1

다음 중 하나입니다.

B

분기

BL

링크 포함 분기

BLX

링크 포함 분기 및 교환 명령어 세트

op2

다음 중 하나입니다.

BX

분기 및 교환 명령어 세트

BLX

링크 포함 분기 및 교환 명령어 세트

BXJ

분기 및 Jazelle 실행으로 변경

cond

선택적 조건 코드입니다 (조건부 실행 참조). cond는 이 명령어의 모든 형식에서 사용할 수 없습니다 (명령어 사용 가능 여부 및 분기 범위 참조).

.W

Thumb-2에서 32비트 B 명령어를 사용하도록 지시하는 선택적 명령어 너비 지정자입니다. 자세한 내용은 Thumb-2의 B를 참조하십시오

label

프로그램 기준 식입니다. 자세한 내용은 레지스터 기준 및 프로그램 기준 식을 참조하십시오.

Rm

분기할 주소가 들어 있는 레지스터입니다.

연산

이러한 모든 명령어는 label 또는 Rm에 들어 있는 주소로 분기를 생성합니다. 이외에도 이러한 명령어는 다음 작업을 수행합니다.

  • BLBLX 명령어는 그 다음 명령어의 주소를 lr (r14, 링크 레지스터) 에 복사합니다.

  • BXBLX 명령어는 프로세서 상태를 ARM에서 Thumb으로 변경하거나 Thumb에서 ARM으로 변경할 수 있습니다.

    BLX label 은 항상 상태를 변경합니다.

    BX RmBLX Rm은 다음과 같이 Rm의 비트[0]에서 타겟 상태를 파생합니다.

    • Rm의 비트[0]이 0일 경우 프로세서가 ARM 상태로 변경되거나 ARM 상태를 유지합니다.

    • Rm의 비트[0]이 1일 경우 프로세서가 Thumb 상태로 변경되거나 Thumb 상태를 유지합니다.

  • BXJ 명령어는 프로세서를 Jazelle 상태로 변경합니다.

명령어 사용 가능 여부 및 분기 범위

Table 4.7에서는 ARM 및 Thumb 상태에서 사용할 수 있는 명령어를 보여 줍니다. 이 표에 나와 있지 않은 명령어는 사용할 수 없습니다. 괄호 안의 참고 정보는 명령어를 사용할 수 있는 첫 번째 아키텍처 버전을 나타냅니다.

Table 4.7. 분기 명령어 사용 가능 여부 및 범위

명령어ARM 32비트 Thumb32비트 Thumb
B label±32MB (모두) ±2KB (모든 T) ±16MB[1] (모든 T2)
B{cond} label±32MB (모두) –252 ~ +258 (모든 T) 1MBa (모든 T2)
BL label±32MB (모두) ±4MB [2] (모든 T) ±16MB (모든 T2)
BL{cond} label±32MB (모두) - --
BX Rm사용할 수 있음 (4T, 5) 사용할 수 있음 (모든 T) 16비트 사용 (모든 T2)
BX{cond} Rm사용할 수 있음 (4T, 5) - --
BLX label±32MB (5) ±4MB [2] (5T) ±16MB (ARMv7-M을 제외한 모든 T2)
BLX Rm사용할 수 있음 (5) 사용할 수 있음 (5T) 16비트 사용 (모든 T2)
BLX{cond} Rm사용할 수 있음 (5) - --
BXJ Rm사용할 수 있음 (5J, 6) - 사용할 수 있음 (ARMv7-M을 제외한 모든 T2)
BXJ{cond} Rm사용할 수 있음 (5J, 6) - --

[1] .W를 사용하여 이 32비트 명령어를 사용하도록 어셈블러에 지시합니다.

[2] 명령어 쌍입니다.


분기 범위 확장

시스템 수준 BBL 명령어는 현재 명령어의 주소부터 시작하도록 범위가 제한됩니다. 그러나 label이 범위를 벗어나더라도 이러한 명령어를 사용할 수 있습니다. 종종 링커에서 배치하는 label의 위치를 모를 수 있습니다. 필요한 경우 링커에서는 더 긴 분기를 활성화하는 코드를 추가합니다. 링커 사용 설명서에서 3장 기본 링커 기능 사용을 참조하십시오. 이러한 코드를 베니어라고 합니다.

Thumb-2의 B

.W 너비 지정자를 사용하여 Thumb-2 코드에서 32비트 명령어를 생성하도록 B에 지시할 수 있습니다.

B.W는 16비트 명령어를 사용하여 타겟에 도달할 수 있는 경우에도 항상 32비트 명령어를 생성합니다.

정방향 참조의 경우, 32비트 Thumb 명령어를 사용하여 도달할 수 있는 타겟에서 오류를 발생시킬 수 있더라도 .W가 없는 B는 Thumb 코드에서 항상 16비트 명령어를 생성합니다.

Thumb-2EE의 BX, BLX 및 BXJ

이러한 명령어는 Thumb-2EE 코드에서 분기로 사용할 수 있지만 상태를 변경하는 데는 사용할 수는 없습니다. Thumb-2EE에서는 이러한 명령어의 op{cond} label 형식을 사용할 수 없습니다. 레지스터 형식에서 Rm의 비트[0]은 1이어야 하고 실행은 ThumbEE 상태의 타겟 주소에서 계속됩니다.

조건 플래그

이러한 명령어는 플래그를 변경하지 않습니다.

아키텍처

이러한 명령어의 아키텍처별 사용 가능 여부에 대한 자세한 내용은 명령어 사용 가능 여부 및 분기 범위를 참조하십시오.

예제

    B       loopA
    BLE     ng+8
    BL      subC
    BLLT    rtX
    BEQ     {pc}+4  ; #0x8004
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential