до: А (1:3) = 101, после: А (1:3) = 000.
Ко второму типу относится микрооперация передачи, особенностью этой микрооперации является то, что и правая часть есть слово. Данная микрооперация обеспечивает замену значения левого слова на значение правого слова.
Левое и правое слова могут иметь разные длины (nl ,np), через nl ,np обозначены количества разрядов в левом и правом словах соответственно.
Возможны три случая отношения между nl, np:
nl = np,
nl < np,
3)nl > np.
В первом случае проблем по согласованию длин нет, значение правого слова оказывается в левом слове.
Во втором случае у правого слова имеются лишние разряды, требуется
отбрасывание определенных разрядов правого слова, в Ф-языке установлено, что отбрасывать нужно с левой стороны.
Пусть, например, имеются микрооперация А(1:3):= В(1:6), а также А(1:3) = 110, В(1:6) = 101001, тогда после выполнения данной микрооперации будет А(1:3) = 001. Значение 101 в старших разрядах слова В отброшено.
В третьем случае у левого слова имеются лишние разряды, требуется доопределить лишние разряды указанного слова. Доопределяются левые лишние разряды нулями.
Пусть, например, имеются микрооперация В(1:6):= А(1:3), а также А(1:3) = 110, В(1:6) = 101001, тогда после выполнения данной микрооперации будет В(1:6) = 000110. Видно, что левые три разряда левого слова имеют значение 0.
Микрооперация передачи описывает работу цепей связи между узлами компьютера.
Микрооперация третьего типа – это микрооперация инверсии, особенностью этой микрооперации является то, что в обеих частях используется одно и тоже слово. Данная микрооперация обеспечивает замену значения левого слова на инверсное значение этого слова.
При рассматриваемой микрооперации проблем по согласованию длин нет.
Пусть, например, имеются микрооперация В (1:6):= ù В (1:6), кстати, при записи микрооперации инверсии необязательно указывать разряды слова. Также пусть В (1:6) = 101001, тогда после выполнения данной микрооперации будет В (1:6) = 010110. Видно, что все первоначальные значения разрядов слова В приняли инверсные значения.
Важность использования данной микрооперации очевидна, без нее не обойтись при получении машинных кодов, машинной реализации операций над двоичными числами.
К четвертому типу микроопераций относится группа микроопераций, включающая в себя конъюнкцию и дизъюнкцию. Данные микрооперации требуют одинаковой длины всех слов, задействованных в микрооперациях.
Пусть, например, имеются микрооперации
С(1:6):= А(1:6) /\ В (1:6),
D(1:6):= А(1:6) \/ В(1:6)
и А = 100110, В = 000111, С = 010101, D = 101010, тогда после выполнения данных микроопераций будет C(1:6) = 000110, D= 100111.
Поскольку в компьютерах арифметические операции выполняются на основе логических микроопераций, то важность использования рассматриваемых микроопераций очевидна, без них практически ничего реализовать не удается.
Микрооперация пятого типа – микрооперация составления, она предназначена для формирования так называемого составного слова на основе других слов, их фрагментов и констант.
Например, результирующее слово, соответствующее результату любой операции с "плавающей" точкой, как раз и получается на основе составления слова из слов, представляющих мантиссу и порядок.
Знаком микрооперации составления является знак ".".
Очевидно, что при составлении возникает проблема согласования длин левой и правой частей микрооперации. Разрешается она точно также, как и при передачах.
Пусть, например, имеются микрооперации
С(1:6):= А(1:3) . В (1:3),
D(1:6):= А(1:3) . Е(1:4),
F(1:8):= B(1:3) . A(1:3),
G(1:5):= А(1:3) . 010,
и А = 100, В = 011, E = 1101, С = 010101, D = 101010, F =00110011, G = 10001, тогда после выполнения данных микроопераций будет C(1:6) = 100011, D= 001101, F = 00011100 и G= 00010.
К шестому типу относятся группа микроопераций счета, они описывают работу счетчиков прямого и обратного счета. При прямом счете содержимое счетчика увеличивается на единицу, а при обратном – уменьшается на единицу.
Особенностью этой микрооперации является то, что в обеих частях используется одно и тоже слово. Обычно его имя начинается с ключевого слова СТ. Кроме того, в правой части применяется константа, равная 1.
Никаких проблем при счете не возникает, так как счетчик прямого счета после достижения максимального значения и подачи единицы переходит в нулевое состояние, а счетчик обратного счета при достижении нулевого состояния и подачи единицы – в максимальное состояние.
Пусть, например, имеются микрооперации
СТА(1 : 6):= СТА(1 : 6) + 1,
СТВ(1 : 6):= СТВ(1 : 6) - 1
и СТА = 100100, СТВ = 011011, тогда после выполнения данных микроопераций будет CТА(1 : 6) = 100101, СТВ = 011010.
Особой необходимости при микрооперации счета указывать длину слова нет.
Седьмую группу микроопераций составляют микрооперации сдвигов. Особенностью этих микроопераций является то, что в обеих частях используется одно и тоже слово.
Сдвиги делятся на логические и арифметические.
Логический сдвиг выполняется над логической комбинацией, в которой нет знака. Значения всех разрядов комбинации перемещаются вправо либо влево на указанное количество разрядов. "Выталкиваемые" разряды теряются, а оказавшиеся свободными разряды доопределяются. При отсутствии особых указаний доопределение осуществляется нулями. Возможен так называемый циклический сдвиг, когда "выталкиваемые" значения разрядов фиксируются в освобождающихся разрядах.
При арифметическом сдвиге знак остается на своем месте, перемещаются значения только значащих разрядов.
Вид сдвига оформляется нужной записью микрооперации.
Ключевое слово 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, это говорит о несравнении слов А и В.
Если будет А = 100110, В = 100110, С= 010101, тогда после выполнения
данной микрооперации будет C(1:6) = 000000, что говорит о сравнении слов А и В.
Второй вид результата является однобитовым, он представляет собой логическую сумму разрядов результата первого вида. Ясно, что при нулевом результате первого вида однобитовый результат также будет равен 0, в противном случае – 1.
Для ранее получающегося результата C(1:6) = 100001 однобитовый результат С(1) = 1 (не путать с первым разрядом слова С), а для - результата C(1:6) = 000000 однобитовый результат С(1) = 0.
Девятый тип микроопераций составляет группу микроопераций сложения (сложения, вычитания и циклического сложения).
Микрооперации данной группы предназначены для описания работы сумматора при сложении, вычитании и циклическом сложении.
Последняя микрооперация требует равенства исходных слов. Единица переноса из старшего разряда передается для сложения в младший разряд. Вне Ф-языка такая микрооперация называется операцией контрольного сложения. Для контроля правильности записи и считывания слов файла применительно к дискам все слова складываются по правилу контрольного сложения, получающаяся контрольная сумма добавляется в конце файла. При считывании снова подсчитывается контрольная сумма, которая сравнивается с имеющейся такой суммой в конце файла. Если суммы совпадают, то ошибок при считывании нет, в противном случае считывание повторяется установленное число раз до совпадения сумм.