4.3.12. ASR, LSL, LSR, ROR 및 RRX

오른쪽으로 산술 시프트, 왼쪽으로 논리 시프트, 오른쪽으로 논리 시프트, 오른쪽으로 회전 및 확장을 포함하여 오른쪽으로 회전

이러한 명령어는 시프트된 레지스터 두 번째 피연산자가 있는 MOV 명령어와 같습니다.

구문

op{S}{cond} Rd, Rm, Rs
op{S}{cond} Rd, Rm, #sh
RRX{S}{cond} Rd, Rm

인수 설명:

op

ASR, LSL, LSR 또는 ROR 중 하나입니다.

S

선택적 접미사입니다. S를 지정하면 연산 결과의 조건 코드 플래그가 업데이트됩니다 (조건부 실행 참조).

Rd

대상 레지스터입니다.

Rm

첫 번째 피연산자가 들어 있는 레지스터입니다. 이 피연산자는 오른쪽으로 시프트됩니다.

Rs

Rm의 값에 적용할 시프트 값이 들어 있는 레지스터입니다. 최하위 바이트만 사용됩니다.

sh

상수 시프트입니다. 허용되는 값의 범위는 다음과 같이 명령어에 따라 달라집니다.

ASR

1 ~ 32

LSL

0 ~ 31

LSR

1 ~ 32

ROR

1 ~ 31

사용법

ASR은 레지스터 내용을 2의 제곱으로 나눈 부호 있는 값을 제공하며 부호 비트를 왼쪽의 비어 있는 비트 위치로 복사합니다.

LSL은 레지스터를 2의 제곱으로 곱한 값을 제공하고, LSR은 레지스터를 2의 가변 제곱으로 나눈 부호 없는 값을 제공합니다. 두 명령어는 모두 비어 있는 비트 위치에 0을 삽입합니다.

ROR은 레지스터 내용을 특정한 값만큼 회전한 값을 제공합니다. 오른쪽 끝으로 회전된 비트는 왼쪽의 비어 있는 비트 위치로 삽입됩니다.

RRX는 레지스터 내용을 1비트 오른쪽으로 시프트한 값을 제공합니다. 이전 carry 플래그는 비트[31]로 시프트됩니다. S 접미사가 있으면 이전 비트[0]이 carry 플래그에 배치됩니다.

제한

Rs를 사용하는 ARM 명령어는 r15를 사용하면 안 됩니다. Thumb 명령어는 r15 또는 r13을 사용하면 안 됩니다.

조건 플래그

S를 지정하면 이러한 명령어는 결과에 따라 N 및 Z 플래그를 업데이트합니다.

시프트 값이 0일 경우 C 플래그는 변경되지 않습니다. 시프트 값이 0일 아닐 경우 C 플래그는 시프트된 마지막 비트로 업데이트됩니다.

16비트 명령어

이러한 명령어의 다음 형식은 Thumb-2 이전 Thumb 코드에서 사용할 수 있으며, Thumb-2 코드에서 사용될 경우 16비트 명령어입니다.

ASRS Rd, Rm, #sh

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

ASRS Rd, Rd, Rs

RdRs는 모두 Lo 레지스터여야 합니다.

LSLS Rd, Rm, #sh

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

LSLS Rd, Rd, Rs

RdRs는 모두 Lo 레지스터여야 합니다.

LSRS Rd, Rm, #sh

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

LSRS Rd, Rd, Rs

RdRs는 모두 Lo 레지스터여야 합니다.

RORS Rd, Rd, Rs

RdRs는 모두 Lo 레지스터여야 합니다.

예제

    ASR     r7, r8, r9
    LSLS    r1, r2, r3
    LSR     r4, r5, r6
    ROR     r4, r5, r6
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential