Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Конструкции средней сложности

 

Как замечено выше, микрооперации и двоичные выражения составляют группу конструкций средней сложности.

 

Микрооперации

 

В Ф-языке используется десять типов микроопераций. К первому типу

относится микрооперация установки, она предназначена для задания начального значения слову, части слова, отдельному разряду.

Структура этой и всех других операций включает в себя три части: левую (ЛЧ), среднюю и правую (ПЧ) части. Структуру можно показать следующим образом:

ЛЧ: = ПЧ.

Средняя часть является знаком присваивания, левая часть есть та информационная единица (слово, фрагмент слова, отдельный разряд), которой и надлежит присвоить первоначальное значение.

Естественно, что правая часть должна представлять собой какую-либо константу.

Особенностью рассматриваемой операции является то, что правая часть есть константа.

Например, записи

 А(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 Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...