シフト・ローテート

1. 右シフト(算術シフト)

0 か 1が並んだデータを1つだけ右に順番に移動することを、右シフトと呼びます。
その際に一番左端の桁には、左端のビットを設定するのが下記命令です。
1が設定されていた場合には1を、0が設定されていた場合には0が設定されます。
例)
SAR AAA BBB ; AAAの値を、BBB回、右に移動します。

  

2. 左シフト(算術シフト)

右シフトとは逆に左に移動して、左から1を追加するのが左シフトです。
例)
SAL AAA BBB ; AAAの値をBBB回、左に移動します。

  

3. 左・右シフト(論理シフト)

論理シフトは右シフトの際に、最上位の桁に0を設定するシフトです。
下記コードでは、右シフトの後に左シフトを実施しています。

  

4. 左ローテート

ビットを左に移動させて、移動前に最上位だったビットを最下位ビットにそのまま持ってきます。

  

5. 右ローテート

ビットを右に移動させて、移動前に最下位ビットだった値を最上位ビットに設定します。

  

6. その他のローテート(キャリーフラグ利用)

これまでのローテート命令は単純に回るだけでした。
以降で紹介する命令は、
1.左右にシフト(キャリーフラグの値がシフトイン)
2.シフトアウトした値をキャリーフラグに設定
する命令となります。
そのため下記命令では最初のcrlで最上位の1がシフトアウト後にキャリーフラグに1が
設定されるため、clc命令で0を設定しています。