double arrow

Сдвигатель (Shifter)


Рис. 5 – Сдвигатель в схеме операционного устройства.

Сдвигатель обрабатывает непосредственные значения из очереди команд (I-Unit). А так же может двусторонне взаимодействовать с памятью, пространством ввода-вывода, регистрами устройства адресации (A-unit), устройства управления (P-unit) и регистрами, находящимися непосредственно в операционном устройстве(D-unit). Более того, сдвигатель может передавать значения в АЛУ операционного устройства (Как входное значение для дальнейших вычислений) и АЛУ устройства адресации (В качестве значений для сохранения в регистрах устройства адресации.)

Сдвигатель может выполнять следующие действия:

· Сдвиг 40-битных значений аккумулятора влево (на значение до 31) и вправо (на значение до 32). Размер сдвига может быть задан в одном из временных регистров T0 – T3 или константой в коде команды.

· Сдвиг 16-битных значений регистров, ячеек памяти или регистров в пространстве ввода – вывода (I/O space) влево (на значение до 31) и вправо (на значение до 32). Размер сдвига может быть задан в одном из временных регистров T0 – T3 или константой в качестве одного из операндов в команды.




· Сдвиг 16-битных непосредственных значений влево (на значение до 15 бит). Размер сдвига задается константой в одном из операндов команды.

· Циклический сдвиг значений в регистрах.

· Округление значений в аккумуляторе перед их записью в память.

· Выполнение сложений и умножений для некоторых команд, включающих сдвиг (Т.е. для команд, осуществляющих помимо сдвига дополнительные действия, например перемещение из одного регистра в другой значения со сдвигом)

Существует несколько типов сдвига:

· Циклический сдвиг вправо – ror (rotate right) и влево – rol (rotate left)

При этом сдвиге уходящий бит записывается на место освободившегося бита.

Рис. 6 – Циклические сдвиги вправо и влево

· Логический сдвиг – shtl (shift logically)

Это сдвиг, при котором уходящий бит уходит, не влияя на оставшееся биты, а на место появившегося бита записывается бит 0. Уходящий бит сохраняется во флаге переноса. Эта функция широко используется при работе с многобайтовыми числами.

Рис. 7 – Логические сдвиги влево и вправо

· Арифметический сдвиг – shts (shift signed)

При этом сдвиге слово рассматривается не просто как группа битов, а как целое число в дополнительном коде. При сдвиге влево на место освободившегося правого бита записывается 0, а знаковый бит сохраняется. При сдвиге вправо: уходящий бит уходит, не влияя на оставшиеся биты, а на освободившееся место знакового бита устанавливается бит, соответствующий знаку.

Рис. 8 – Арифметические сдвиги вправо и влево.







Сейчас читают про: