ление следующей, 26-й команде, либо «обходит» коман ды с номерами 26, 27, 28 и 29, передавая управление команде с номером 30.
Другая особенность многих машин состоит в том, что с помощью небольшого числа команд (обычно двух) можно выполнить некоторую операцию над боль шой группой чисел. Такие операции называются г р у п- п о в ы м и. Они позволяют,- в частности, переносить груп пы (массивы) информации из одного. запоминающего устройства в другое или из одной части запоминающе го устройства в другую. Такие групповые операции на зываются групповыми передачами, или операциями об мена между запоминающими устройствами.
Рассмотренные особенности построения программ работы машины позволяют резко сократить количество команд, необходимых для решения задачи.
Машина может быть построена по одно-, двух-, трех- и четырехадресной системе команд. Чаще всего ис пользуются одноадресные и трехадресные системы. Под а д р е с о м понимают номер ячейки запоминающего уст ройства, в котором хранится одно число или команда.
Рассмотрим сначала т р е х а д р е с н у ю с и с т е м у команд, так как она в наибольшей степени соответству ет естественному процессу выполнения арифметических операций. Команда этой системы состоит из четырех групп чисел и содержит указания: из каких ячеек запо минающего устройства взять исходные числа (адреса 1-го и 2-го числа), какую операцию над этими числами провести (вид операции записывается в виде условного
кода) и в какую |
ячейку ЗУ |
поместить результат (ад |
||
рес результата). Например: |
|
|
||
Код операции |
Адрес |
Адрес |
Адрес |
|
1-го числа |
2-го числа |
результата |
||
|
||||
05 |
101 |
102 |
560 |
|
м |
а |
Ъ |
С |
|
Команду, приведенную выше в качестве примера, сле дует прочитать так: число, находящееся в ячейке ЗУ с
50
номером «а» (например, 101), умножить (условным ко
дом операции умножения в данном |
примере является |
|
число 05) на число, |
находящееся в ячейке с номером |
|
«b » (например, 102), |
и результат |
поместить в ячейку, |
имеющую номер «с» |
(например, 560). По этой команде |
|
устройство управления посылает числа, хранящиеся в ячейках запоминающего устройства с номерами «а» и «Ь», в арифметическое устройство. ’’После , выполнения умножения устройство управления переносит результат из арифметического устройства в ячейку «с». Заметим, что в ячейках «а» и « b» сохраняются те же числа, кото рые были в них до считывания, а изменяется только со держимое ячейки «с».
Трехадресная команда не содержит указания о том, какая команда должна быть выполнена после данной. Поэтому если нет специальной команды условного или безусловного перехода, то при использовании трехад^ ресной системы. команды программы выполняются по следовательно, одна за другой, начиная с первой, пока не будет выполнена вся программа.
При о д н о а д р ес н о й с и с т е м е команда состоит из двух групп чисел: адреса одного числа и кода опе рации.
В общем случае для выполнения одной арифметиче ской операции требуется три одноадресные команды. Так, например, при одноадресной системе ,для сумми рования двух чисел необходимо извлечь из запоминаю щего устройства первое число и послать его в сумматор арифметического устройства (операция посылки в сум матор— ПС). Затем нужно извлечь из ЗУ второе число й также послать его в сумматор, где оно будет просум мировано с первым числом и сохранено до следующей команды (операция сложения — Сл). Номера ячеек, из которых выбираются числа, указаны в первой и второй командах. Результат суммирования посылается в ту ячейку, адрес которой указан в третьей команде (опе рация посылки — ПЯ) •
4* |
51 |
К |
ПС |
Адрес |
|
1-го числа |
|||
|
|
||
К+1 |
Сл |
Адрес |
|
2-го числа |
|||
|
|
||
К+2 |
ПЯ |
Адрес |
|
|
|
результата |
Нетрудно заметить, что не всегда выполнение ариф метической операции требует трех одноадресных команд. Например, для последовательного суммирования групп из п чисел с посылкой конечного результата в запоми нающее устройство потребуется п •+■1 одноадресных команд, так как частные суммы не отсылаются каждый раз в ЗУ, а остаются в сумматоре и к ним с каждой но вой командой посылки прибавляется новое число. Та ким образом, одноадресные команды оказываются вы годными для выполнения таких групповых операций, в результате которых образуется одно число.
Д в у х а д р е с н а я команда содержит три группы чисел, представляющих собою адреса двух исходных чи сел, участвующих в операции, и код операции.
Результат данной операции остается в накапливаю щем сумматоре, и для его отсылки в накопитель требу ется новая команда, состоящая только из одного адре са (второй адрес команды остается свободным) и услов ного кода операции отсылки.
Чаще двухадресная команда кроме двух адресов и кода операции имеет также указатель порядка исполь зования адресов. В зависимости от значения этого ука зателя каждый из адресов может быть использован как для считывания, так и для записи или для того и друго го одновременно. Например, по двухадресной команде может быть выполнена операция сложения ( 0 = Сл ) двух чисел, стоящих в ячейках «а» и «Ь», с записью ре зультата в ячейку «Ь» (или в ячейку «а»). При другом значении указателя может быть выполнена пересылка числа из ячейки «а» в ячейку «Ь» (или наоборот) без выполнения каких-либо действий в арифметическом устройстве.
52
Код |
Адрес |
Адрес |
Указатель |
|
операции |
1-го числа |
2-го числа |
||
|
||||
е |
а |
Ь |
|
В приведенных одно-, двух- и трехадресных систе мах команды программы выполняются последовательно, в порядке возрастания их номеров. Это до некоторой степени ограничивает свободу программиста и в случае необходимости изменения порядка, что встречается до вольно часто, требует применения специальных команд. Однако переходы с одного участка программы на дру гой могут быть осуществлены и иначе, а именно, путем использования ч е т ы р е х а д р е с н о й с и с т е м ы команд, содержащей пять групп чисел, из которых четыре совпадают с группами, имеющимися .в трехадресной команде, а пятая представляет собой адрес команды, ко торая должна быть выполнена вслед за данной.
Код |
Адрес |
Адрес |
Адрес |
Адрес |
|
следующей |
|||||
операции |
1-го числа |
2-го числа |
результата |
||
команды |
|||||
|
|
|
|
-Четырехадресная система позволяет осуществить так называемое свободное выполнение программы, при котором последовательность выполнения команд может быть какой угодно. Заметим, что четырехадресная си стема предоставляет больше возможностей для програм мирования задач, но оборудование машины при этом ис пользуется хуже, чем при одно-, двухили трехадресиой системе. Поэтому такие машины не получили рас пространения. •
При решении расчетных задач, содержащих большое количество последовательно выполняющихся арифмети ческих операций, лучше других используются одноад ресные машины. При этом, хотя программы содержат несколько большее число команд, чем трехадресные про граммы, составленное для решения тех же задач, ис пользование памяти для хранения команд лучше, так как сами команды короче.
53
Для решения задач, связанных с сортировкой и пе рераспределением чисел в памяти, более удобны двух адресные системы, позволяющие по одной команде (бо лее короткой, чем трехадресная) переслать число из од ной ячейки в другую. В одноадресной машине для это го требуется две команды.
В большинстве машин команды хранятся в том же запоминающем устройстве, что и числа. Это дает воз можность выполнять операции не только над числами, но и над командами. Для этого достаточно вместо адре сов чисел указывать адреса команд, служащих для по лучения новых команд. Результаты таких операций ста новятся новыми командами, которые в дальнейшем вы полняются. Поэтому программы могут сами себя пре образовывать в зависимости от получаемых результатов. Способность преобразовывать команды чрезвычайно сильно расширяет возможности электронных цифровых машин.
Для уяснения сущности программирования рассмот рим два примера (с использованием трехадресной и од ноадресной систем команд).
П р и м е р |
1. Для трехадресной машины. |
|
|
С о с т а в л е н и е п р о г р а м м ы д л я в ы п о л н е |
|||
ния на м а ш и н е г р у п п о в о й |
о п е р а ц и и . |
Такая |
|
программа может быть частью |
более сложной |
про |
|
граммы. |
|
|
|
Допустим, |
что требуется умножить п чисел |
ах, ..., |
|
ап, размещенных в последовательных ячейках запоми нающего устройства, на некоторое постоянное число Ь. Можно легко составить программу, содержащую я трех адресных команд умножения, и с помощью ее решить за дачу. Однако при программировании более сложных за дач такой путь приведет к тому, что программа будет содержать чрезмерно большое количество команд, для записи которых понадобится очень много ячеек ЗУ. Ис пользуем для сокращения, количества команд цикличе скую программу, позволяющую многократно выполнять' одну и ту же операцию (в данном случае умножение). Запишем эту команду, предположив, что она находится в ячейке запоминающего устройства:
54