Контрольная работа: Микропрограммирование операций ЭВМ
Сдвиги делятся на логические и арифметические.
Логический сдвиг выполняется над логической комбинацией, в которой нет знака. Значения всех разрядов комбинации перемещаются вправо либо влево на указанное количество разрядов. "Выталкиваемые" разряды теряются, а оказавшиеся свободными разряды доопределяются. При отсутствии особых указаний доопределение осуществляется нулями. Возможен так называемый циклический сдвиг, когда "выталкиваемые" значения разрядов фиксируются в освобождающихся разрядах.
При арифметическом сдвиге знак остается на своем месте, перемещаются значения только значащих разрядов.
Вид сдвига оформляется нужной записью микрооперации.
Ключевое слово R(k) соответствует сдвигу вправо на k разрядов, ключевое слово L(k) – сдвигу влево на kразрядов.
Пусть, например, имеются микрооперации
А(1 : 6):= R(2)А(1 : 6),
В(1 : 6):= L(2)В(1 : 6)
и А = 100101, В = 011011, тогда после выполнения данных микроопераций сдвига на два разряда слова А вправо и слова В влево будет А(1 : 6) = 001001, В = 101100. Видно, что освобождающиеся разряды доопределены нулями.
Циклический сдвиг дополнительно оформляется на основе составления, "выталкиваемые" разряды слева добавляются справа, а "выталкиваемые" разряды справа добавляются слева.
Выше рассмотренные примеры сдвигов слов А и В при циклических сдвигах будут записаны следующим образом:
А(1 : 6):= А(5 : 6). (R(2)А(1 : 6)),
В(1 : 6):= (L(2)В(1 : 6)).В(1 : 2).
Пусть, как и прежде А = 100101, В = 011011, тогда после выполнения микроопераций циклического сдвига будет А(1 : 6) = 011001, В = 101101. Видно, что освобождающиеся разряды доопределены значениями "вытолкнутых " разрядов.
Арифметические сдвиги имеют определенные особенности в зависимости от применяемых специальных машинных кодов. При сдвиге вправо свободные разряды слева доопределяются значениями знакового разряда независимо от применяемого кода, при сдвиге влево – нулями для дополнительного кода и значениями знакового разряда для обратного кода. Это рассматривается в курсе "Дискретная математика".
Например, арифметический сдвиг слова С(1 : 8) = 10011001 вправо на 3 разряда в любом коде должен быть записан так:
С(1 : 8):= С(1). С(1). С(1). С(1). (R(3)С(2 : 8)).
Видно, что знак у слова является отрицательным. После сдвига слова С будет С = 11110011.
При сдвиге влево на один разряд для обратного кода микрооперация будет иметь вид:
С(1 : 8):= С(1).((L(1)С(3 : 8)).С(1)).
Если как и прежде С = 10011001, то после сдвига будет С = 10110011.
При сдвиге влево на один разряд для дополнительного кода микрооперация будет иметь вид:
С(1 : 8):= С(1).((L(1)С(3 : 8)).0).
В дополнительном коде С = 10011010 (имеется лишняя единица для младшего разряда), тогда после указанного сдвига будет С =10110100. Видно, что дополнительный код отличается от обратного кода лишней единицей для младшего разряда.
К восьмому типу микроопераций относится микрооперация сравнения (на самом деле эта микрооперация является микрооперацией несравнения). В отличие от всех предыдущих микроопераций она имеет два вида результата.
Первый из них представляет собой сложение по модулю два исходных слов. Поскольку микрооперация сравнения – логическая микрооперация, то длины слов должны быть одинаковыми. Если хотя бы в одном разряде получится единица, то тогда это будет означать несравнение слов, в противном случае исходные слова совпадают.
Пусть, например, имеется микрооперация
С(1:6):= А(1:6) Å В (1:6)
и А = 100110, В = 000111, С= 010101, тогда после выполнения данной микрооперации будет C(1:6) = 100001, это говорит о несравнении слов А и В.