シフタは乗除算や論理演算などでしばしば使われる。 シフトには,シフトして空いたところへ何を埋めるかによって, いくつかの種類がある。 空いたところへ0を埋める場合もあれば, 回転シフトと言って,溢れたビットを,逆から埋めていく場合もある。 こうしたことを考慮し,本書に紹介するシフタは, 基本的にはAバスの内容をシフトするが, 下からBバスの内容を埋めていくものとする。 つまり,AバスとBバスを繋いでシフトするのがよい。 もう少し正確に言うと,AバスとBバスの内容を並べて2wordとし, その任意の位置から1wordを切り出して,出力する機能を有するようにする。 Bバスに0を入れておけば,シフトの結果空いたところには0がつまり, BバスにAバスと同じ内容を入れておけば,回転シフトとなる。
こうしたことを考慮し,
図 9.4のようなシフタ(shifter)が完成する。
なお,16bitバスでは図が大き過ぎるので,4bitバスを仮定した。
実際,
,
,
,
(ShLはShiftLeftの意味)を順に1にすると,
が
,
,
,
と変化していく。
なお,乗除算では1bitのシフトしかないが,シフト溢れを利用することがある。
これは実は,シフト前のMSBまたはLSBであるので,簡単な作業で取り出すことができ,
という形で記憶しておく。