シフト/ローテート命令

命令 動作
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のようにする必要があった.


はたいたかし
May 5, 2006.
トップ > 開発ツール > 8086