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/hideT32 コードにおける制限事項

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

IT ブロックの LSL 命令の sh 値にゼロは指定できません。

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

これらの A32 命令では SP の使用は非推奨です。

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

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

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

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

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

    Note

    A32 命令 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 ビット命令

これらの命令は、T32 コード内では次の形式で使用できます。これらは 16 ビット命令です。

ASRS Rd, Rm, #sh

RdRm は共に Lo レジスタである必要があります。この形式は IT ブロック以外でのみ使用できます。

ASR{cond} Rd, Rm, #sh

RdRm は共に Lo レジスタである必要があります。この形式は IT ブロック内でのみ使用できます。

ASRS Rd, Rd, Rs

RdRs は共に Lo レジスタである必要があります。この形式は IT ブロック以外でのみ使用できます。

ASR{cond} Rd, Rd, Rs

RdRs は共に Lo レジスタである必要があります。この形式は IT ブロック内でのみ使用できます。

LSLS Rd, Rm, #sh

RdRm は共に Lo レジスタである必要があります。この形式は IT ブロック以外でのみ使用できます。

LSL{cond} Rd, Rm, #sh

RdRm は共に Lo レジスタである必要があります。この形式は IT ブロック内でのみ使用できます。

LSLS Rd, Rd, Rs

RdRs は共に Lo レジスタである必要があります。この形式は IT ブロック以外でのみ使用できます。

LSL{cond} Rd, Rd, Rs

RdRs は共に Lo レジスタである必要があります。この形式は IT ブロック内でのみ使用できます。

LSRS Rd, Rm, #sh

RdRm は共に Lo レジスタである必要があります。この形式は IT ブロック以外でのみ使用できます。

LSR{cond} Rd, Rm, #sh

RdRm は共に Lo レジスタである必要があります。この形式は IT ブロック内でのみ使用できます。

LSRS Rd, Rd, Rs

RdRs は共に Lo レジスタである必要があります。この形式は IT ブロック以外でのみ使用できます。

LSR{cond} Rd, Rd, Rs

RdRs は共に Lo レジスタである必要があります。この形式は IT ブロック内でのみ使用できます。

RORS Rd, Rd, Rs

RdRs は共に Lo レジスタである必要があります。この形式は IT ブロック以外でのみ使用できます。

ROR{cond} Rd, Rd, Rs

RdRs は共に Lo レジスタである必要があります。この形式は IT ブロック内でのみ使用できます。

Show/hide可用性

これらの命令は A32 および T32 で使用できます。

T32 では、これらの命令は 16 ビットおよび 32 ビットエンコーディングで使用できます。

T32 には、16 ビットの RRX 命令はありません。

Show/hide

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

Show/hide関連項目

Copyright © 2014 ARM. All rights reserved.ARM DUI 0802AJ
Non-ConfidentialID061814