4.7.3. SXT, SXTA, UXT 및 UXTA

부호 확장, 더하기 포함 부호 확장, 0 확장 및 더하기 포함 0 확장

구문

SXT<extend>{cond}  {Rd}, Rm  {,rotation}
SXTA<extend>{cond} {Rd}, Rn, Rm {,rotation}
UXT<extend>{cond}  {Rd}, Rm  {,rotation}
UXTA<extend>{cond} {Rd}, Rn, Rm {,rotation}

인수 설명:

<extend>

다음 중 하나입니다.

B16

두 개의 8비트 값을 두 개의 16비트 값으로 확장합니다.

B

8비트 값을 32비트 값으로 확장합니다.

H

16비트 값을 32비트 값으로 확장합니다.

cond

선택적 조건 코드입니다 (조건부 실행 참조).

Rd

대상 레지스터입니다.

Rn

더할 숫자가 들어 있는 레지스터입니다 (SXTAUXTA에만 해당).

Rm

확장할 값이 들어 있는 레지스터입니다.

rotation

다음 중 하나입니다.

ROR #8

Rm의 값이 8비트만큼 오른쪽으로 회전합니다.

ROR #16

Rm의 값이 16비트만큼 오른쪽으로 회전합니다.

ROR #24

Rm의 값이 24비트만큼 오른쪽으로 회전합니다.

rotation이 생략될 경우 회전이 수행되지 않습니다.

Rd, Rn 또는 Rm에 r15를 사용하면 안 됩니다.

연산

이러한 명령어는 다음을 수행합니다.

  1. Rm의 값이 0, 8, 16 또는 24비트만큼 오른쪽으로 회전합니다.

  2. 얻은 값에 대해 다음 중 하나를 수행합니다.

    • 비트[7:0]을 추출하고 32비트로 부호 확장 또는 0 확장합니다. 명령어가 확장 및 더하기이면 Rn의 값을 더합니다.

    • 비트[15:0]을 추출하고 32비트로 부호 확장 또는 0 확장합니다. 명령어가 확장 및 더하기이면 Rn의 값을 더합니다.

    • 비트[23:16] 및 비트[7:0]을 추출하고 32비트로 부호 확장 또는 0 확장합니다. 명령어가 확장 및 더하기이면 Rn의 비트[31:16] 및 비트[15:0]에 각각 더해 결과의 비트[31:16] 및 비트[15:0]을 얻습니다.

조건 플래그

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

16비트 명령어

Thumb 코드에서 사용하는 경우 다음 형식만 16비트 명령어이며 Thumb 2 이전 Thumb 코드에서 사용할 수 있습니다.

SXTB Rd, Rm

RdRm은 모두 Lo 레지스터여야 합니다.

SXTH Rd, Rm

RdRm은 모두 Lo 레지스터여야 합니다.

UXTB Rd, Rm

RdRm은 모두 Lo 레지스터여야 합니다.

UXTH Rd, Rm

RdRm은 모두 Lo 레지스터여야 합니다.

아키텍처

이러한 ARM 명령어는 ARMv6 이상에서 사용할 수 있습니다.

SXTAUXTA Thumb 명령어는 ARMv7-M 프로필을 제외하고 ARMv6T2 이상에서 사용할 수 있습니다.

SXTUXT 32비트 Thumb 명령어는 ARMv6T2 이상에서 사용할 수 있습니다.

SXTUXT 16비트 Thumb 명령어는 ARMv6 이상에서 사용할 수 있습니다.

예제

    SXTH         r3, r9, r4
    UXTAB16EQ    r0, r0, r4, ROR #16

올바르지 않은 예제

    SXTH     r9, r3, r2, ROR #12 ; rotation must be by 0, 8, 16, or 24.
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential