Конструкции средней сложности
Как замечено выше, микрооперации и двоичные выражения составляют группу конструкций средней сложности.
Микрооперации
В Ф-языке используется десять типов микроопераций. К первому типу относится микрооперация установки, она предназначена для задания начального значения слову, части слова, отдельному разряду. Структура этой и всех других операций включает в себя три части: левую (ЛЧ), среднюю и правую (ПЧ) части. Структуру можно показать следующим образом: ЛЧ: = ПЧ. Средняя часть является знаком присваивания, левая часть есть та информационная единица (слово, фрагмент слова, отдельный разряд), которой и надлежит присвоить первоначальное значение. Естественно, что правая часть должна представлять собой какую-либо константу. Особенностью рассматриваемой операции является то, что правая часть есть константа. Например, записи А(1: 3):=000, В1(1:32):=10101010101010101010101010101010, В(5):=1 являются выражениями микроопераций установки в 1, 2 и 3 разрядах слова А нулевых значений, во всех разрядах слова В1 значения 1010…1010, в 5-м разряде слова В единичного значения. Если установка касается какого-либо типового узла с памятью, то нулевая константа в правой части означает обнуление или "сброс" содержимого узла. Не следует путать запись микрооперации с записью того, что слово, часть слова, разряд слова имеют конкретное значение. Например, запись А (1:3) = 101 не является микрооперацией, она означает, что у первых трех разрядов слова А имеется значение 101. На первоначальных этапах освоения микроопераций следует отражать первоначальное значение (до выполнения микрооперации) и значение после выполнения микрооперации. Применительно к слову А выполнение микрооперации установки можно отразить следующим образом:
до: А (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.
Девятый тип микроопераций составляет группу микроопераций сложения (сложения, вычитания и циклического сложения). Микрооперации данной группы предназначены для описания работы сумматора при сложении, вычитании и циклическом сложении. Последняя микрооперация требует равенства исходных слов. Единица переноса из старшего разряда передается для сложения в младший разряд. Вне Ф-языка такая микрооперация называется операцией контрольного сложения. Для контроля правильности записи и считывания слов файла применительно к дискам все слова складываются по правилу контрольного сложения, получающаяся контрольная сумма добавляется в конце файла. При считывании снова подсчитывается контрольная сумма, которая сравнивается с имеющейся такой суммой в конце файла. Если суммы совпадают, то ошибок при считывании нет, в противном случае считывание повторяется установленное число раз до совпадения сумм. Пусть, например, имеется микрооперация G(1:6):= А(1:6) + В(1:6) и А = 100110, В = 100111, G= 010101, тогда после выполнения данной микро-операции будет G(1:6) = 001110. Для первых двух микроопераций левое слово должно иметь лишний разряд по сравнению с наиболее длинным словом правой части. В Ф–языке принято применять дополнительные коды для сложения и вычитания. При получении кода слова слева у слова добавляется знаковый разряд, коды выравниваются по длине за счет доопределения значениями знаковых разрядов. Пусть, например, имеются микрооперации С(1:7):= А(1:6) + В (1:6), D(1:7):= А(1:6) - В(1:6), E(1:7):= В(1:6) - А(1:6) и А = 100110, В = 100111, С= 010101, D= 101010, E= 1010101, тогда после выполнения данных микроопераций будет C(1:7) = 1001101, D(1:7) = 1111111, E(1:7)= 0000001. Наконец, к десятой группе относятся так называемые комбинированные микрооперации. В правой части таких микроопераций разрешается иметь две, три обычные микрооперации. Например, получение обратного кода отрицательного слова В описывается именно комбинированной микрооперацией: В (1:6):= В(1).ù В (2:6), Видно, что знаковый разряд слова остается без изменения, а значащая часть проинвертирована. Нетрудно заметить, что выше уже имелись комбинированные микрооперации.
Двоичные выражения
В Ф-языке имеются двоичные выражения, которые относятся к конструкциям средней сложности. Двоичные выражения отличаются от микроопераций тем, что в правой части у них задействовано более трех микроопераций и могут использоваться так называемые условные выражения, основанные чаще всего на проверке отношений. Двоичные выражения делятся на двоичные простые (неусловные) и двоичные условные выражения. Из последующего будет ясно, что двоичные условные выражения не следует отождествлять с чисто условными выражениями.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|