6-1. シフト ( Shift )
まず、符号なし整数(もしくは数値以外のデータ)のシフト命令について説明する。これらは論理シフトと言い、ずらしてはみ出す1桁はキャリーフラグ(CF)に格納される。足りなくなる1桁には無条件に0が入る(下図参照)。
シフト命令はCount(CLまたは8bitの符号なし整数で表せる範囲の即値)で指定した分だけ、上述のシフトを行う。CFには、はみ出した桁が格納されるが、Countの値がDESTのサイズを越えた場合(「SHR AX,17」など)は、CFの値は未定である。上のニーモニックにも示したが、 OFはCount=1nの時のみ結果を反映するが、Count=1の時もOFを見て何かするようなことはあまりない。SHR ( Shift Logical Right ) :論理的右シフト
SHL ( Shift Logical Left ) :論理的左シフト
SHR DEST,Count SHL DEST,Count 動作:別途解説 影響を受けるフラグ:OF(Count=1の場合のみ結果を反映), SF,ZF,PF(結果を反映), CF:別途解説 DEST :レジスタ、メモリー Count :CL、即値(8bit以下)
次に、符号付き整数のシフトを説明する。符号付き整数は、上位1bitが符号を表している。この符号を壊さないようにシフトさせる(下図参照)。この理由は後述する。
上図のようにSHLとSALは同じ働きをする。しかしSARはSALと異なり、上位1bitには0が入るのではなく、ずらす前の値がそのまま残る。
SAR ( Shift Arithmetic Right ) :算術的右シフト
SAL ( Shift Arithmetic Left ) :算術的左シフト
SAR DEST,Count SAL DEST,Count 動作:別途解説 影響を受けるフラグ:OF(Count=1の場合のみ結果を反映), SF,ZF,PF(結果を反映), CF:別途解説 DEST :レジスタ、メモリー Count :CL、即値(8bit以下)

次に、8bitの128を右にずらすことを考える。8bitの128は符号付き整数で考えると -128である。この両者をSHRとSARでシフトさせると下図のようになる。
