命令 | 動作 |
---|---|
rol |
rotate left |
rcl |
rotate left through carry ローテートのする際に,最上位ビットと最下位ビットの間にキャリーフラグを挟んでローテートする. すなわち,最上位ビットの値がキャリーフラグに入り,キャリーフラグの値が最下位ビットに入るようになる. |
shr |
shift logical right 最上位ビットには必ず0が入り,最下位ビットの値はキャリーフラグに押し出される. |
sar |
shift arithmetic right 最上位ビットの値はキープしたまま右側にずれる. 最下位ビットの値はキャリーフラグに押し出される. |
シフトおよびローテート命令では,いずれの場合も押し出された値はキャリーフラグに流れ込むようになっている. したがって,キャリーフラグの値を監視すればどのビットが0/1であったかを調べることができる.
左シフトについては論理シフトでも算術シフトでも同じ結果になるが,ニーモニックとしては,いちおう両方用意されている.
シフト量については,rcl bl, 1
のように即値の1を指定しているが,
実は8086では即値を指定する場合はシフト量として1以外の値を指定することはできず
(上位互換CPUである80186,80286,およびV30では任意のシフト量が指定できる),
1以外の値を指定したい場合は,即値ではなくCL
レジスタに値をセットしてから,
ror bl, cl
のようにする必要があった.