シフト演算

レジスタのシフト演算では、レジスタ内のビットが指定のビット数(シフト長)だけ左または右に移動します。レジスタのシフトは以下の方法で実行できます。

指定可能なシフト長はシフトの種類と命令によって異なります。個々の命令やフレキシブル第 2 オペランドの説明を参照して下さい。シフト長が 0 の場合、シフトは行われません。レジスタのシフト演算では、指定したシフト長が 0 の場合を除き、キャリーフラグが更新されます。以下のサセクションでは、さまざまなシフト操作と、それらの操作がキャリーフラグに与える影響について説明します。ここでは、Rm はシフトされる値を保持するレジスタを、n はシフト長を表します。

Show/hideASR

n ビットの算術右シフトです。レジスタ Rm の左 32-n ビットを右に n 桁、結果の右 32-n ビットに移動します。レジスタの元のビット [31] は結果の左 n ビットにコピーされます。詳細については、Figure 1を参照して下さい。

ASR #n 操作を使用すると、レジスタ Rm の値を 2n で除算し、その結果を負の無限大に丸めることができます。

命令が ASRS の場合、あるいは MOVSMVNSANDSORRSORNSEORSBICSTEQ、または TST 命令と共に ASR #nOperand2 で使用した場合、キャリーフラグは、レジスタ Rm からシフトアウトされた最後のビット(ビット [n-1])に更新されます。

Note

  • n が 32 以上の場合、結果のすべてのビットが Rm のビット [31] の値に設定されます。

  • n が 32 以上でキャリーフラグが更新される場合、Rm のビット [31] の値に更新されます。

Figure 1. ASR #3

To view this graphic, your browser must support the SVG format. Either install a browser with native support, or install an appropriate plugin such as Adobe SVG Viewer.


Show/hideLSR

n ビットの論理右シフトです。レジスタ Rm の左 32-n ビットを右に n 桁、結果の右 32-n ビットに移動します。さらに、結果の左 n ビットを 0 に設定します。Figure 2 を参照して下さい。

LSR #n 操作を使用すると、レジスタ Rm の値を 2n で除算できます(値が符号なし整数と見なされる場合)。

命令が LSRS の場合、あるいは MOVSMVNSANDSORRSORNSEORSBICSTEQ、または TST 命令と共に LSR #nOperand2 で使用した場合、キャリーフラグは、レジスタ Rm からシフトアウトされた最後のビット(ビット [n-1])に更新されます。

Note

  • n が 32 以上の場合、結果のすべてのビットが 0 にクリアされます。

  • n が 33 以上でキャリーフラグが更新される場合、0 に更新されます。

Figure 2. LSR #3

To view this graphic, your browser must support the SVG format. Either install a browser with native support, or install an appropriate plugin such as Adobe SVG Viewer.


Show/hideLSL

n ビットの論理左シフトです。レジスタ Rm の右 32-n ビットを左に n 桁、結果の左 32-n ビットに移動します。さらに、結果の右 n ビットを 0 に設定します。Figure 3を参照して下さい。

LSL #n 操作を使用すると、レジスタ Rm の値を 2n で乗算できます(値が符号なし整数または 2 の補数の符号付き整数と見なされる場合)。このとき警告なしでオーバーフローが発生する場合があります。

命令が LSLS の場合、あるいは MOVSMVNSANDSORRSORNSEORSBICSTEQ、または TST 命令と共に LSL #nn はゼロ以外)を Operand2 で使用した場合、キャリーフラグは、レジスタ Rm からシフトアウトされた最後のビット(ビット [32-n])に更新されます。これらの命令を LSL #0 と共に使用した場合、キャリーフラグへの影響はありません。

Note

  • n が 32 以上の場合、結果のすべてのビットが 0 にクリアされます。

  • n が 33 以上でキャリーフラグが更新される場合、0 に更新されます。

Figure 3. LSL #3

To view this graphic, your browser must support the SVG format. Either install a browser with native support, or install an appropriate plugin such as Adobe SVG Viewer.


Show/hideROR

n ビットの右ロテートです。レジスタ Rm の左 32-n ビットを右に n 桁、結果の右 32-n ビットに移動します。さらに、レジスタの右 n ビットを結果の左 n ビットに移動します。詳細については、Figure 4を参照して下さい。

命令が RORS の場合、あるいは MOVSMVNSANDSORRSORNSEORSBICSTEQ、または TST 命令と共に ROR #nOperand2 で使用した場合、キャリーフラグは、レジスタ Rm の最後のビットローテーション(ビット [n-1])に更新されます。

Note

  • n が 32 の場合、結果の値は Rm の値と同じになります。また、キャリーフラグが更新される場合は、Rm のビット [31] に更新されます。

  • 32 を超えるシフト長 nROR を指定した場合、シフト長 n-32 と ROR を指定した場合と動作は同じになります。

Figure 4. ROR #3

To view this graphic, your browser must support the SVG format. Either install a browser with native support, or install an appropriate plugin such as Adobe SVG Viewer.


Show/hideRRX

拡張付き右ロテートです。レジスタ Rm のビットを 1 ビット分右に移動します。さらに、キャリーフラグを結果のビット [31] にコピーします。詳細については、Figure 5を参照して下さい。

命令が RRXS の場合、あるいは MOVSMVNSANDSORRSORNSEORSBICSTEQ、または TST 命令と共に RRXOperand2 で使用した場合、キャリーフラグは、レジスタ Rm のビット [0] に更新されます。

Figure 5. RRX

To view this graphic, your browser must support the SVG format. Either install a browser with native support, or install an appropriate plugin such as Adobe SVG Viewer.


Show/hide関連項目

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