ASR、LSL、LSR、ROR、RRX

算術右シフト、論理左シフト、論理右シフト、右ロテート、および拡張付き右ロテートです。

これらの命令は、レジスタオペランドがシフトされる MOV 命令と同じ意味です。

Show/hide構文

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

各パラメータには以下の意味があります。

op

ASRLSLLSR、または ROR のいずれかを指定します。

S

任意に指定できる接尾文字です。S が指定されている場合は、演算結果に基づいて条件コードフラグが更新されます。

Rd

デスティネーションレジスタを指定します。

Rm

第 1 オペランドを保持するレジスタを指定します。このオペランドは右にシフトされます。

Rs

Rm の値に適用するシフト値を保持するレジスタを指定します。最下位バイトのみが使用されます。

sh

定数シフトを指定します。指定可能な値の範囲は、命令によって異なります。

ASR

可能なシフト 1 ~ 32

LSL

可能なシフト 0 ~ 31

LSR

可能なシフト 1 ~ 32

ROR

可能なシフト 1 ~ 31

Show/hide使用法

ASR は、レジスタの内容を 2 のべき乗で除算した、符号付きの値を求めます。空の左のビット位置には、符号ビットがコピーされます。

LSL は、レジスタを 2 のべき乗で乗算した値を求めます。LSR は、レジスタを 2 の可変乗で除算した、符号なしの値を求めます。いずれの命令でも、空のビット位置には 0 が挿入されます。

ROR は、レジスタの内容を任意の値でロテートした値を求めます。ロテートの結果右端から溢れたビットは、空の左のビット位置に挿入されます。

RRX は、レジスタの内容を右に 1 ビットシフトした値を求めます。古いキャリーフラグはビット [31] にシフトされます。接尾文字 S を指定した場合、古いビット [0] がキャリーフラグに配置されます。

Show/hideThumb コードにおける制限事項

Thumb 命令では、PC も SP も使用できません。

Show/hideARM ASR、LSL、LSR、ROR、および RRX 命令での SP および PC の使用

SP はこれらの ARM 命令で使用できますが、これらは ARMv6T2 以降では非推奨です。

PC は、op{S}{cond} Rd, Rm, Rs 構文を使う命令では使用できません。他の構文では、Rd および Rm に PC を使用できますが、これらは ARMv6T2 以降では非推奨です。

Rm に PC を指定している場合、使用される値は「命令のアドレス + 8」となります。

Rd に PC を指定した場合、以下のようになります。

  • 演算結果に対応するアドレスへの分岐が実行されます。

  • 接尾文字 S を指定している場合は、現在のモードの SPSR が CPSR にコピーされます。この動作を利用して、例外から復帰することができます。

    Note

    ARM 命令 opS{cond} pc,Rm,#sh および RRXS{cond} pc,Rm は、常に MOVS{cond} pc,Rm{,shift} という適切な形式に逆アセンブルされます。

Caution

ユーザモードまたはシステムモードで Rd に PC を使用する場合は、接尾文字 S を使用しないで下さい。このような命令による影響は予測不可能なうえ、アセンブル時にアセンブラによる警告が生成されません。

これらの命令でレジスタ制御シフトを行う場合は、Rd やオペランドに PC は使用できません。

Show/hide条件フラグ

S が指定されている場合、これらの命令は演算結果に基づいて N と Z の各フラグを更新します。

シフト値が 0 の場合、C フラグは影響を受けません。0 以外の場合、シフトアウトされた最後のビットで更新されます。

Show/hide16 ビット命令

これらの命令は、Thumb コード内では次の形式で使用できます。これらは 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 レジスタである必要があります。

Show/hideアーキテクチャ

これらの ARM 命令は、すべてのアーキテクチャで使用できます。

これらの 32 ビット Thumb 命令は、ARMv6T2 以降で使用できます。

これらの 16 ビット Thumb 命令は、ARMv4T 以降で使用できます。

16 ビットの Thumb RRX 命令はありません。

Show/hide

    ASR     r7, r8, r9
    LSLS    r1, r2, r3
    LSR     r4, r5, r6
    ROR     r4, r5, r6

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0489EJ
Non-ConfidentialID081711