
книги из ГПНТБ / Сафонов, С. Ф. Вычислительная техника в инженерных и экономических расчетах (конспект лекций)
.pdfПри выделении кодовых частей чисел и команд в программи ровании часто используется операция поразрядного логического умножения, которая представляет собой частный случай пересе чения множеств (множества единиц и нулей) и определяется таб лицей:
1 П 1 = I
1 П 0 = О
ОП 1 = О 0 п о = О
Эта операция носит название «конъюнкция».
Покажем на примере выделение этой операцией части разря дов двоичных наборов. Пусть, скажем, требуется выделить пять последовательных правых разрядов двоичного набора
1001010110110.
Если этот набор подразрядно логически умножить на констан ту выделения 0000000011111
1001010110110
П0000000011111
0...010110,
то в результате получится требуемое.
Логическое сложение — это операция объединения множеств. Множество всех элементов универсального множества Р, принадлежащих или множеству Л, или множеству В, или им обоим, где Л и В — два произвольных множества, называется объединением или суммой множеств А и В, обозначается симво
лом Л и В и читается Л или В.
Заштрихованная на рис. 15 область изображает Л и В. Пусть Л, В и С — какие-либо'три множества. Множество всех
элементов, принадлежащих хотя бы одному из этих трех мно жеств, называется объединением Л или В, или С, обозначается символом Л В и С и читается «Л или В или С» (на рис. 15 за штрихованная область изображает Л и В). Подобным же обра зом объединением любых множеств А,, Л2..., Лп называется мно жество всех элементов, принадлежащих хотя бы одному из них: это множество обозначается через А хи Л2 и Л3и -..Ап-
В программировании операция поразрядного логического сло жения используется для формирования кодовых частей или всего кода чисел и команд. Поразрядное логическое сложение опреде ляется таблицей:
, |
1 U |
1 = |
1 |
|
|
1 и 0 |
= |
1 |
|
|
О и |
1 |
= |
1 |
|
о и |
0 |
= 0 |
40
Эта операция называется <гдизъюнкция».
Покажем на примере формирование кодов этой операцией. Пусть, скажем, требуется образовать единицы в пятом, седьмом и десятом разрядах формируемого двоичного набора
00111000101.
Причем образовать заранее, не зная о том, есть ли уже в фор мируемом коде единицы в формируемых разрядах или их там
Рис. |
14. |
Заштрихованной |
Рис. 15. Заштрихованной об |
ластью |
на |
рисунке обозначено |
ластью обозначено объединение |
пересечение |
множеств А и В |
множеств А и В |
нет.- Искажать другие разряды формируемого числа запрещено. Если формируемый набор поразрядно логически сложить с
константой формирования 01001010000:
„00111000101
и01001010000
01111010101
то получится, что и требовалось. '
Равнозначность или сравнение чисел. Равнозначность двух двоичных кодов можно определять, пользуясь операцией пораз рядного сложения двоичных наборов по модулю два.
Напомним, что при сложении по модулю берется лишь оста ток ог деления полученной обычным путем суммы на модуль (з данном случае на модуль 2).
Таблица поразрядного сложения но модулю два
1®1 — 0
1 0 0 |
— 1 |
0 0 1 |
= 1 |
0 0 0 |
= 0, |
где символ 0 обозначает сложение по модулю два.
Покажем на примерах сравнение двух двоичных чисел опера ции сложения по модулю два,
Сравнить два числа. Будем считать, что эти числа нам как будто неизвестны (ведь в примере мы должны смоделировать «неразумную» ЭВМ, которая выполняет все действия лишь с по мощью формальных правил)-. Итак, сравнить двоичные числа
0010101 и 0000101
0010101
00000101
0010000
41
В результате получено число, не равное нулю, которое и явля ется критерием сравнимости двоичных чисел, определяемым опе рацией поразрядного сложения по модулю два.
Если бы сравнивались одинаковые числа, то
0001011 ■ ©0001011
0000000’
т. е. результат, равный нулю, является критерием сравнимости двух чисел.
Рассмотрим машинные логические операции ЭВМ «Наири» Они приведены в табл. IV.
Простейшие примеры использования команд с логическими операциями.
Выделить первый адрес команды из 12 ячейки, записанной в модификации Я.
В модификации Я первый адрес в команде всегда размещает ся с 12 по 25 разряд. Взгляните на внутренний код модификации Я (рис. 16).
Рис, 16. Разбиение разрядной сетки ЭВМ «Наири» для записи команд в модификации «Н»
Выделить первый адрес команды из 12 ячейки можно опера цией поразрядного логического умножения с помощью констан ты выделения 000000000001111111111111100000000000.
Пусть такая константа уже образована в памяти машины в 13 ячейке,.тогда команда
Л 13 Я 12
выделит первый адрес команды из 12 ячейки в фиксированную
ячейку а2. |
, |
Еще пример. Сделать то же, но в предположении, что коман |
|
да, из которой |
требуется выделить первый адрес, находится в |
ячейке о2 и записана также в модификации Я
Л, 13 Я 100.
В100 ячейке после выполнения этой команды окажется выделен ным первый адрес команды.
'Пример на использование операции логического сложения. Образовать в 26 разряде команды, находящейся в 12 ячейке
ОЗУ, единицу, т. е. образовать в этой команде признак формиро42
вания команды (единица в 26 разряде внутреннего кода коман ды обозначает признак формирования команды).
Используем для этого формирующую константу
00000000001000000000000000000000000.
Пусть эта константа находится в 13 ячейке.
Можно просто сложить формируемую команду с этой констан той. Это сработает верно только в том случае, если в формируе мой команде в 26 разряде находится ноль. Однако будем счи тать, что это нам заранее неизвестно. Операция логического сло жения всегда верно сработает независимо от того, есть уже еди ница в 26 разряде формируемой команды или нет. Вот команда, выполняющая необходимое действие:
/ 13 Я 12.
Результат, т. е. формируемая команда с образованным призна ком формирования, образуется в ячейке а2.
Пример на сравнение двух чисел. Сравнить два числа из 25 и 50 ячеек. Если числа сравнимы, отпечатать единицу:
М 25 Н 50 Пт 1 Я =.
Последняя команда сработает лишь в том случае, если перед этим в а2 образуется результат, равный нулю, но это произойдет лишь тогда, когда числа в 25 и 60 ячейках равны, потому что операция М производит сложение чисел, по модулю два-
Машинные операции над кодами. Это операция передачи чи сла, операции сдвигов и нормализация чисел. Сдвиг чисел — это сдвиг разрядов внутреннего двоичного кода числа. Например, сдвиг вправо на три разряда
000110...0 000000110. . . 0.
Буквой Д, поставленной в степени обобщенного изображения адреса (табл. IV), обозначается форма представления числа в виде длинного, которое, напомним, всегда в машине размещаем ся в двух последовательных ячейках: целая часть — в предыду щей, дробная — в последующей. При сдвиге числа целая и дроб ная части сдвигаются на одинаковое количество разрядов. Коли чество сдвигов указывается первым адресом.
Пример. Сдвинуть длинное число из 100 ячейки на пять раз рядов влево
Г 5 Я 100,
после чего в 100 ячейке и 101 двоичные наборы поочередно сдви нутся на пять разрядов.
Команду с операцией Г и Л нельзя использовать в модифика ции «левый параметр». Дело в том, что в модификации Л первый адрес есть, собственно, уже число (как и в модификациях Я и К), обрабатываемое операцией команды. Но это число, взятое
43
машиной из команды в модификации Л, всегда перед выполнени ем операции автоматически сдвигается влево на 11 разрядов. Лишь после этого над ним выполняется операция, так что первый адрес в модификации Л дает слишком большое число, чтобы им можно было указывать сдвиги длинных чисел.
Только что сказанное относится к арифметическому и логиче скому сдвигу (табл. IV).
Операция «а» называется арифметическим сдвигом лишь по тому, что при этом сдвиге двоичные коды чисел автоматически корректируются в отношении знака числа. Если сдвигать вправо отрицательные числа, например, число 5/8 (десятичное число'...
5/8 равно двоичному коду — 00,101= —(1/2-{-0/4+1/8), которое во внутреннем коде изобразится двоичным модифицированным дополнительным кодом (м. д. к.):
—.00.1010...0.
инверсия
11.0101...1
11,0110...0 (м. д. к.),
то по мере сдвигов вправо машиной будут автоматически добав ляться единички слева. Это и есть сдвиг отрицательного числа без его дополнительного искажения. Если, например, сдвинуть на два разряда влево м. д. к. числа 5/8, то получим сдвинутый код
11,110110...0, а это есть отрицательное число «00,001010...0». (Пе реведем сдвинутое число 11,110110...0, записанное в. м. д. к. в бо лее наглядную нормальную двоичную форму:
11,110110...0
инверсия 00,0010010...0
________+ 1.
— 00,001010...0. Е1ормальная форма, т в.
для перехода от м. д. к. числа к нормальной форме следует взять м. д. к. от м. д. к. и присвоить результату знак минус).
Итак, последняя нормальная форма действительно сдвинута на два разряда вправо, при этом арифметическая форма числа не исказилась.
Рассмотрим теперь логический сдвиг или сдвиг влево. Опера ция «6> может искажать число, поэтому она не называется «арифметическим сдвигом». Вот как производится логический сдриг числа 00,10010...0 на пять разрядов влево:
00,10010...0 =10,000...0,
т. е. из положительного числа левым сдвигом получено отрица тельное двоичное число.
Пример использования операции. Сдвинуть число из 100 ячей ки на 11 разрядов влево
6 11 П 100.
44
Нормализация чисел. Нормализовать число в форме с фикси рованной запятой означает придвинуть первую значащую цифру непосредственно к запятой. Например, ненормализованное число 00,00110...О в нормализованном виде будет иметь образ 00,110...0, что и выполняет операция Н. Количество сдвигов, возникших при нормализации, посылается в ячейку а2, а нормализованное чи сло — в ячейку о2. . . .
■ Операция передачи числа. Это широко используемая в про1раммах операция одинаково хорошо пересылает числа в разных формах и команды, т. е. работа операции П не зависит от формы представления числа.
В том случае, если пересылается содержимое а2, т- е. исполь зуется операция Пи в первом адресе (он как бы лишний в этом случае) обычно записывается ноль. Например
Л, О Л 22 или rh О- Н 22.
В обоих случаях выполнится одно и то же действие.
Операции управления. Для понимания работы операций уп равления рассмотрим, вначале, как производится выборка и ис полнение команд в ЭВМ «Наири».
Перед запуском машины в прохождение программы в счетчик команд — один из блоков устройства управления — заносится микропрограммой (программой, управляющей работой машины) число, равное номеру ячейки памяти (адрес), в которой находит ся первая исполняемая команда программы, и при готовности машины к работе программист кнопкой пуска или набором соот ветствующего кода на телетайпе запускает ЭВМ. По содержимо му счетчика команд (СЧК) на исполнительный орган устройства управления (регистр команд) из памяти выбирается указанная первая команда, а в СЧК автоматически добавляется единица (ЭВМ уже приготовилась к выполнению следующей команды). Исполнительный орган настраивает ЭВМ на выполнение опера ции и на выбор информации, подлежащей обработке из адресов, указанных в команде. После выполнения этой первой команды через небольшое время, потребное на анализ команды и на под готовку блоков машины к выполнению операции команды, выпол няется и эта команда и т. д.
Такое последовательное выполнение команд называется есте ственным, а ЭВМ с таким характером исполнения команд назы вается машиной с естественным ходом выполнения команд. Од нако если вы команда выбиралась из устройств памяти только так, то невозможно было бы выполнять разветвления в програм мах, потому что программы выполнялись бы строго команда за командой от начала и до конца и невозможно было бы создание «творческих» программ. Поэтому в современных ЭВМ с естест венным ходом выполнения команд существуют команды (опера ции),могущие осуществлять переходы в любое место программы.
45
Это команды передач управления. Такие команды приведены в таблице IV.
Рассмотрим их. Команда перехода без возврата состоит из операции И и обозначает передачу управления в адрес, указан ный в команде в форме обобщенного адреса.
Пример. Передать управление из 200 ячейки 300 ячейке
200 И 300 П.
Команда находится в 200 ячейке, или, другими словами, пере дает управление из 200 ячейки. Если записать команду в виде
200 И 300 Н,
то она передавала бы управление из 200 ячейки в ячейку, адрес которой определяло бы уже содержимое 300 ячейки. Ведь в по следнем примере команда записана в модификации Н, а это все гда означает для «Наири», что информация для операции берет ся из адресов, указанных в команде. Для последнего случая мо жно было бы сказать, что с помощью содержимого 300 ячейки мы управляем передачами управления в различные ячейки, но мера в которых при каждом переходе всегда равны содержимо му 300 ячейки. Второй адрес в командах с операцией И не ис пользуется.
Операция И выполняется так: на СЧК заносится информация, записанная с помощью первого адреса в команде, следователь но, ЭВМ после этого начнет выполнять команду, указанную пер вым адресом.
Команда перехода с возвратом. Очень часто в программиро вании приходится стыковать между собой различные «куски» программ — подпрограмм, составляющих основную программу. Такие куски представляют собой иногда вполне самостоятельные программы, иногда составленные даже разными программиста ми, и носят название «блоков». В виде таких блоков могут быть использованы и стандартные программы, т. е. программы, исполь зуемые многократно для вычисления распространенных алгорит мов, например, по вычислению тригонометрических функций. Воз никает проблема обращения к таким блокам с возвратом после их прохождения в то место, откуда происходило обращение. Та кое действие легко выполняется в системе команд ЭВМ «Наири» с помощью операции //,.
Покажем ее работу на примере. Пусть требуется из 200 ячей ки обратиться к подпрограмме, начинающейся с 600 ячейки, с последующим возвратом на продолжение предыдущей програм мы в 201 ячейку. Пусть в подпрограмме, начинающейся в 600 ячейке, последняя команда находится в 900 ячейке. Вот переход с возвратом:
200 Hi 600 К 901
201 .................
46
Команда работает как бы дважды. Первый этап. Вначале она перенесет содержимое СЧК (в момент выполнения команды на СЧК будет находиться число 201) в указанную вторым адресом ячейку 901, в которой появится число 201 в форме целого. После этого команда Иi 600 К 901 добавит к содержимому 901 ячейки код И О П, в результате чего получится И 201 Я. На этом кон чается первый этап работы команды перехода с возвратом.
Второй этап. Команда передает управление ячейке 600 так же, как это делалось при рассмотрении операции Я. Изобразим работу команды перехода с возвратом схемой, приведенной на рис. 17.
Вот простой программный прием, выполняемый этой коман дой. Пусть требуется вычислить выражение
У = У А ,
если значение А размещено в форме с плавающей запятой в 12 ячейке, результат отправить в 12 ячейку. Это действие можно вы полнить так:
29 КП 12 Я 12
30 КП 12 Я 12.
Но это же можно сделать и по-другому, чтобы избежать одно образия:
29КП 12 Я 12
30 Их 29 Я 30.
После извлечения корня команда Их 29 Я 30 сотрет себя и за пишет на своем месте: Я 31 Я, ^ потом передаст управление на втврое извлечение корня. Очевидно, третьего извлечения корня уже не произойдет, потому что во второй раз команда Я 31 П просто передаст управление в 31 ячейку на продолжение ниже расположенной программы.
Переход по ключу. Выполняется операцией Я3. Она срабаты вает только в том случае, если на пульте сигнализации нажата клавиша «Ключ».
47
Операцию хорошо применять, например, при выполнении длинных итерационных программ на машине, когда интересно время от времени узнавать сходимость итеративного процесса, т. е. степень приближения итеративного процесса к конечному результату вычисления. Для этого достаточно в программе ите ративного алгоритма разместить команду с операцией Я3, кото рая передаст управление программе вывода на печать интересуе мых результатов вычислений. Если нажать на пульте сигнализа ции клавишу «Ключ», то машина начнет выводить ту информа цию, по которой предусмотрительный программист теперь может судить о сходимости процесса при тех или иных исходных данных.
Команда безотносительного перехода. Безотносительная пе редача управления вверх по программе выполняется с помощью операции ех. В основу идеи безотносительной передачи управле ния положен принцип перехода не по номеру (не по адресу), а по количеству ячеек, отделяющих место перехода от места, к кото рому переходят.
Пусть требуется безотносительно передать управление коман де, расположенной на 20 ячеек выше, начиная счет с той ячейки, откуда передается управление, и кончая включительно той ячей кой, которой передается управление. Это можно сделать коман дой
100 щ 16364 Я.
В момент выполнения команды на СЧК уже будет находиться адрес следующей команды число 101. Адрес 16364 в модифика ции Я есть само используемое операцией число. Число 16364 при бавится к содержимому СЧК, как это показано в табл. IV, т. е- 16364+101. Но максимальное число, которое СЧК еще может со держать, равно 16383, на большее ему не хватает разрядов. Но тогда сложение в СЧК произойдет по модулю 16384:
16364+101=81 (mod 16384),
т. е. управление передается, как и было задано, на 20 команд выше:
100 — 20 = 81
(счет ведется, начиная с 100 ячейки).
Легко сообразить, что если бы команда е{ 16364 Я была за писана в ОЗУ не в 100, а, предположим, в 200 ячеек выше, считая с 200 ячейки, то все равно управление передалось бы на 20 ячеек выше. Действительно,
16364+201=481 (mod 16384).
Вот простое правило вычисления константы — адреса коман ды безотносительной передачи управления вверх по программе (показываем это на какой-то абстрактной программе):
100 Я 12 Я 13
101 УП 11 Я 11
48
102 СП 11 Я 13
103 е, 16380 Я.
Следует отсчитать количество ячеек программы, начиная с коман ды безотносительной передачи управления и кончая (включи тельно) командой, которой передается управление, и это количе ство (для данного примера 4) вычесть из числа 16384. Резуль тат и будет константой — адресом безотносительной передачи уп равления в команде такой передачи. Это же можно сделать и по формуле
А = 16384—(Nx—Я2 + 1),
где A'i —значение адреса, откуда передается управление; N2— значение адреса, куда передается управление; Л — первый адрес команды с операцией ех.
Безотносительная передача управления вниз по программе, В этом случае первый адрес команды перехода вычисляется
проще. Покажем это на примере какой-то программы
100 в\ |
2 П |
||
101 Я |
0 |
Я 11 |
|
102 |
В |
1 |
Я 11 |
103 |
С 12 |
Я 140. |
При исполнении команды ех 2 Я к содержимому СЧК (на нем в этот момент будет находиться число 101) прибавится число 2 (первый адрес команды ех 2 П), в результате на СЧК образует ся число 103, и машина перейдет к выполнению команды из 103 ячейки. Отсюда следует, что при*записи приведенной программы в ОЗУ, начиная не с 100 ячейки, а с какой-то иной, передача уп равления все равно будет выполняться через две ячейки вниз. Вот простое правило получения константы—адреса для безотно сительной передачи управления вниз:
необходимо отсчитать количество команд, размещенных ме жду командами, от которой и к которой передается управление. Результат есть константа — адрес команды безотносительной пе редачи управления вниз по программе. Для нашего примера эта константа равна двум. Это же можно сделать и по формуле
A = N i— N-,— 1.
Безотносительный переход с возвратом. Совместное использо вание операций ех и е позволяет в программах выполнять безот носительный переход с возвратом. Прежде чем показать это при мером, рассмотрим, как выполняется операция е, например, в программе
100 е2 Я 11
101 ... .
4-3657 |
49 |