книги из ГПНТБ / Караваев, Н. И. Электронные цифровые вычислительные машины и программирование учеб. пособие
.pdf- 2 0 0 -
Для того чтобы эта программа была выполнена машиной, каждое число и каждая команда этой программы должны нахо дится в ОЗУ в своей ячейке в строгом соответствии с распре делением памяти. Числа и команды размещаются по заданным ячейкам памяти в результате их ввода в машину.
Для тога, чтобы машина начала выполнять программу, нуж но передать управление первой команде программы, размещён ной в ячейке 20036. Для этого адрес ячейки 20036 необходи мо занести в счётчик номеров команд. Эту операцию можно про делать с пульта управления машины.
После запуска машины на выполнение программы машина пос ледовательно выполняет команду за командой программы и пос ле выполнения команды, хранящейся в ячейке 20047, останав ливается с высвечиванием на цифровой индикации содержимого регистра сумматора.
После выполнения программы результат находится в ячейке 20036 и при необходимости может быть использован в дальней ших вычислениях.
При составлении программ решения задач на СЭцВМ-1 можно использовать константы, хранящиеся в ячейках ДЗУ.
Так,для определения модуля числа, находящегося в регист ре сумматора, достаточно выполнение команды вида 03 0 14000.
В ячейке 14000 находится восьмеричная константа |
+77777777777, |
называемая машинной единицей. |
|
Изменение знака числа, находящегося в регистре |
суммато |
ра, может быть осуществлено по команде 30 0 14102. |
В ячейке |
14102 хранится константа - 0. |
|
В ходе программирования некоторых задач может потребо
ваться сдвиг числа влево или вправо |
на определённое количест |
во двоичных разрядов. В этом случае |
можно воспользоваться од |
ним из нижеприведенных вариантов организации сдвигов.
Сдвиг числа вправо, то-есть сдвиг числа, находящегося в регистре сумматора, в сторону младших разрядов выполняется по команде вида 13 та А, причём в ячейке А + и- должна быть константа 2 - п , где п - количество разрядов сдвига. Так, на пример, для сдвига содержимого регистра сумматора на 6 раз-
- -401 |
- |
|
рядов вправо в одну из ячеек памяти необходимо поместить |
|
|
константу 2"^*, имеющую в восьмеричной системе счисления |
вид |
|
+ 01000000000. |
|
|
Сдвиг содержимого регистра |
сумматора влево, то-есть |
в |
сторону старших разрядов, может быть осуществлен по коман |
||
де 14та Л, если в ячейке А + |
i- находится число ^ " ^ . г д е |
^.-порядок сдвига. Например, для того чтобы число, находяще
еся в регистре сумматора, |
сдвинуть влево на шесть разрядов, |
|||
в ячейку необходимо поместить константу 2~"^, |
которая в вось |
|||
меричной системе |
счисления имеет вид + U00 000 |
00100. |
||
Как при сдвиге |
числа |
влево, так и при сдвиге числа впра |
||
во константа |
сдвига может |
находиться как в ячейке по адресу |
||
А + U , так |
и в регистре |
сумматора, причём, если эта кон |
||
станта будет отрицательна, то одновременно со сдвигом про |
||||
изойдет изменение |
знака сдвигаемого числа. |
|
||
В настоящем параграфе рассмотрен пример на составление |
||||
|
простейшей |
программы, Б которой |
^се команды |
от иачо.ча до конца выполняются подряд в порядке их следова ния. На практике такие программы встречаются редко. При ре шении большинства задач возникает необходимость выполнять либо одну, либо другую часть программы, а также выполнять некоторые части программ многократно. Варианты программиро вания таких задач и рассматриваются в следующих параграфах.
§7.5. П Р О Г Р А М М И Р О В А В РЛ335.ТВЛЛА1ЦЙАСЯ ЗйЯйСЛИТЕЛЬНЫл
ПРОЦЕССОВ
Вычислительный процесс, в котором возможны несколько на правлений вычислений, называется разветвляющимся, а програм мы, его реализующая разветвляющейся программой.
Выбор одного из направлений, зависящий от определённого условия, обеспечивается при составлении программы сугубо формально, сведением проверки выполнения сложного условия к простейшим:
-202 -
к>Линовлению равенства или неравенства двух величин, к установлению факта, что какая-либо величина больше или мень ше другой и т.д. Проверка выполнения таких условий осущест вляется с помощью либо арифметических,либо логических, либо специальных операций.
Разветвление вычислительного процесса в зависимости от полученных промежуточных результатов вычислений может быть осуществлено в двух, трёх и более направлениях с помощью ко манд условного перехода 11 m А и 22 rrv А.
Разветвление программы осуществляется с помощью предва рительной и исполнительной команд.
По предварительной команде выполняется такая операция,
которая |
обеспечивает получение сигнала |
Ч |
, причём |
значе |
ние Ц> - 0 определяет одно направление |
разветвления, |
а зна |
||
чение ч « |
1 - другое направление. |
|
|
|
Исполнительной командой является команда условной пере |
||||
дачи управления либо с кодом операции |
И , |
либо с кодом опе |
||
рации 22. |
|
|
|
|
Пример 1. Составить участок программы для суммирования |
||||
X и У, хранящихся соответственно в ячейках 20100 и 20101, и, |
||||
если результат больше или равен нулю, то поместить его в |
||||
ячейку 20102 и перейти к продолжению программы, если |
же ре |
|||
зультат меньше нуля, то управление передать ячейке 20104. |
||||
Так как неизвестны истинные адреса |
ячеек, в которых |
должен быть расположен этот учвсток программы, то программу
напишем ь |
условных адресах, начиная с |
ячейки к + 1. |
||
К + |
1) |
12 0 20100 |
Вызов X на РгСм. |
|
К + |
2) |
01 0 20101 |
X + У, Ц> равно либо О.либо 1. |
|
г— К + 3) |
11.0 20104 |
При Ц> =» 1 переход к яч. 20104. |
||
L -K + 4) |
24 0 20102 |
Засылка Х+У в ячейку 20102. |
||
К + |
5) |
|
|
|
Пример 2. |
Составить участок программы для вычисления |
|||
X - У, хранящихся соответственно в ячейках 20100 и 201.01,и, |
||||
если результат |
меньше нуля, поместить |
его в ячейку 20102 и |
||
перейти к продолжению программы, иначе |
только перейти к про- |
- 203 -
должеюго программы.
Этот участок программы будет иметь вид:
Д + 1 ) |
12 0 20100 |
Вызов X на РгСм. |
|||||
К + 2) |
02 0 20101 |
X - |
У, |
Ч |
равно либо О, |
||
р=К + 3 ; |
22 О К + 5 |
либо |
1. |
|
|
||
|
|
|
|
||||
Ч ' " ' 1 |
+ |
4) |
24 0 20102 |
Засылка |
Х-У в яч. 20102. |
||
-К |
+ |
о) |
|
|
|
|
|
Разветвление процесса вычислений в трёх направлениях мол- |
|||||||
но показать на следующем примере. |
|
|
|
||||
Пример 3. |
Составить участок |
программы |
суммирования |
||||
X и У, хранящихся |
соответственно |
в ячейках |
20030 и 20031, |
и, если результат меньше нуля, то управление передать ячей ке 20040, если больше, то - 20050, а если результат равен нулю, то перейти к продолжению программы,
j'-^асток такой разветвляющейся программы представляет собой следующую последовательность команд:
|
|
К + 1) |
12 0 20030 |
|
|
|
К + 2) |
01 |
0 20031 |
|
= с |
г—К + 3) |
11 |
0 20040 |
4 |
I—К + 4) |
30 |
0 00000 |
|
|
|
|||
|
|
,—К + 5 ) |
Н О 20050 |
|
ч |
' с Ц с + 6) |
|
|
В случае появления необходимости обеспечения перехода от одного участка программы к другому независимо ни от ка ких условий /безусловно/ достаточно воспользоваться коман
дами, имеющими в |
своём составе один из кодов |
операций |
10 |
|||
или 20. |
|
|
|
|
|
|
Так, если после выполнения |
команды К + I |
- 1 необходимо |
||||
выполнить участок |
программы, |
начинающийся |
с |
команды |
К + П. |
|
и оканчивающийся |
командой К + j . , а затем |
вернуться |
к |
выпол |
нению прерванного участка программы, то достаточно в ячейку
К + I |
поместить |
команду 10 О К + И |
, |
а в ячейку |
К + \ + 1 - |
команду |
10 О К + |
I + 1. Схематично |
зто |
выглядит |
следующим |
образом: |
|
|
|
|
|
|
- |
204 |
- |
1 к +1 |
-2 |
|
|
|
к + |
l-{ |
. . . |
! |
|
к + u |
{о о к + п |
|
к + п |
|
|
|
|
|
к +rv+ i |
К + L + 2 |
|
|
|
|
|
|
|
|
• - • |
|
|
|
|
к + j - |
Если в ком&нде безусловного |
перехода признак модифика |
ции равен нулю, то-есть при выполнении команды не исполь зуется ни один регистр модификации, то в этой команде можно использовать либо код операции 10, либо 20. Выполнение этих операций в таком случае будет идентично.
|
Выполнение этих операций |
будет различно, если в коман |
|
де |
признак модификации не равен |
нулю. Порядок использования |
|
в |
этом случае кодов операций |
10 |
и 20 будет рассмотрен в |
&7.8.
§7.6. ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ ВЫЧИСЛИТЕЛЬНЫХ
ПРОЦЕССОВ
Задачи, в которых каждая последовательность операций используется только один раз, невыгодно решать на ЭЦВМ, так как время, необходимое для программирования такой зада чи, сравнимо со временем её решения вручную.
Поэтому |
для решения на |
ЭцВМ целесообразно программиро |
вать только |
такие вычислительные процессы, которые сводятся |
|
к многократному повторению |
вычислений по одним и тем же фор |
|
мулам, но с подстановкой в них ка.адый раз новых числовых |
||
значений исходных данных. |
|
|
Многократно повторяющийся учас....к такого вычислительного |
||
процесса поинято называть |
циклом, а подобные вычислительные |
- 205 |
- |
|
|
|
процессы - циклическими. |
|
|
|
|
Различают два вида циклических процессов. В одном |
слу |
|||
чае число повторений цикла |
п |
может быть |
известно |
зара |
нее; в другом - определяется |
самой машиной |
автоматически ? |
||
зависимости от требуемой точности вычислений. Последние |
||||
имеют место в задачах, решаемых |
методом последовательных |
приближений, поэтому такие вычислительные процессы принято называть итерационными.
Рассмотрим некоторые способы организации циклических вычислительных процессов, наиболее часто встречающихся в практике программирования на языке СЭЦВМ-1.
Как правило, при поограммировании циклов возникает необ ходимость в переадресации команд.
Переадресацией называется процесс изменения адресных частей, исполняющихся в цикле команд. Переадресация назы вается прямой, если адреса у команд с каждым повторением цикла изменяются от минимального значения к максимальному, и обратной - в противоположном случае. Величина, на которую изменяется адресная часть команды в каждом цикле, называет ся шагом переадресации.
Для упрощения переадресации в СЭЦВМ-1 введены три ре гистра модификации, основное назначение которых состоит ь обеспечении возможности модификации адресных частей команд путем прибавления к адресным частям команд со.,, литого ре гистра модификации. Если в каждом цикле изменять содержимое регистра модификации на величину шага переадресации, то бу дет изменяться на такую же величину и исполнительный адрес команды, образуемый как сумма содержимого регистра модифи кации и адресной части команды. Это и позволяет осуществить обработку различных данных одной и той же последовательностью команд.
Чтобы машина повторила цикл нужное число раз, кроме ко манд, осуществляющих непосредственно вычисления, записывают в программе команды, организующие цикл, и команды, по неко торым признакам определяющие, повторился ли цикл нужное чис ло раз или нет.
- 206 -
При организации цикла с прямой переадресацией на СЭЦВМ-1 командой, организующей цикл можно считать команду
засылки в один из трёх регистров модификации |
m |
|
числа |
||||||
/40000-п. W / й |
, |
где |
П |
- число |
повторений |
цикла, W -шаг |
|||
переадресации |
в цикле. В конце цикла должны быть |
записаны |
|||||||
в этом случае следующие команды: |
|
|
|
|
|
||||
|
|
21 |
т М |
|
|
|
|
|
|
|
|
11 |
0 |
К + 1 |
|
|
|
|
|
Команда 21 т М |
|
осуществляет |
прибавление |
к |
содержимому |
||||
регистра модификации |
гл. шага переадресации |
^ |
|
и |
выраба |
||||
тывает сигнал |
^ |
, |
по |
которому |
команда И |
0 |
К+1 |
передает |
|
управление либо первой |
команде цикла К + 1 на.повторение |
||||||||
/при up = 1 / , либо первой команде |
после выхода |
из |
цикла |
||||||
/когда произойдёт переполнение регистра модификации и if |
|||||||||
станет равным |
нулю/. |
|
|
|
|
|
|
|
Пример 1. Составить участок программы для вычисления сред него значения десяти величин, если исходные данные расположе
ны в следующих ячейках: |
|
|
|
|
|||
a t » |
(20101) |
; |
a g |
= |
(20103) |
; |
а3 - (20105) ; . . - |
. . . а 1 0 |
-(20123) |
; |
|
Ь,\ |
• (20124) . |
|
Для простоты предположим, что при суммировании заданных величин не возникает переполнения разрядной сетки; тогда программа будет иметь вид:
|
К + |
1) |
05 |
1 00000 |
Очистка |
1 г о |
РгМд. |
||
|
К + |
2) |
21 |
1 37756 |
Засылка |
в I |
й РгМд(40000-2 • l l ) a . |
||
|
К + |
3) |
12 0 20101 |
Вызов |
а1 |
на РгСм. |
|||
|
,—-К + 4) |
01 |
1 20125 |
а1 + |
а 2 |
+ |
|
||
I |
К + |
5) |
21 |
1 00002 |
37756 + 2= 37760 в I й РгМд. |
||||
|
=К + |
б) |
11 0 |
К + 4 |
Условный переход. |
||||
° I—-К + |
7) |
04 |
0 |
20124 |
0 , 1 - |
f a t . |
|
После выполнения этого участка программы результат о с таётся на регистре сумматора и может быть использован при дальнейших вычислениях.
- 207 -
Организацию цикла с обратной переадресацией можно осу ществить засылкой в один из регистров модификации га вось меричного числа Ы * /п. — i / , причём в конце цикла необходи мо ааписать следующие команды:
21ГП 40000 - М
22О К + 1 .
По команде 21 m чОООО - N будет происходить измене ние содержимого регистра модификации на величину шага пере
адресации |
и выработке сигнала |
. Пока происходит |
пере |
|||
полнение регистра |
модификации тп |
при-выполнении команды |
||||
с кодом |
операции |
2 1 , управление передаётся |
на начало |
цикла, |
||
так как |
щ * 0. |
Когда же цикл закончится, |
то ул;е не про |
|||
изойдет переполнения этого регистра модификации; значение |
||||||
Ч> станет |
равным единице и управление будет |
передано |
следую |
|||
щей после |
цикла команде. |
|
|
|
Пример 2. Для составления программы вк^сления значения
У по формуле |
|
У - С6 Х6 + С5 Х5 + С4Х* + С3 Х3 |
+ С2 Х2 + CjX + G0 |
преобразуем её по схеме Горнера. |
Тогда формула примет вид |
у * с 0 + х ф 1 + х (c 2 + х |
Сс3 + х Сс4 + х (с5+хсб)))).) |
Исходную информацию, представляющую собой правильные дроби,
разместим |
следующим образом: |
|
|
|
|
||||
(20200) |
= С 0 |
, |
(20201) |
- |
С 1 , |
(20202) |
-Gg, |
(20203) |
*С3 |
(20204) |
- С4 |
, |
(20205) |
* Gg, |
(20206) |
=СЦ , |
(20207) |
=Х. |
|
Восьмеричную константу |
tf'/rt |
- |
1 / , в нашем случае равную |
||||||
{•/б - 1/ - |
5 и предназначенную для засылки в регистр |
модифи |
|||||||
кации , поместим в ячейку 20177 в таком виде: |
00000000005. |
||||||||
Под программу |
отведём массив ячеек, начиная |
с ячейки 20041. |
Тогда, при отсутствии переполнения разрядной сетки в ходе выполнения арифметических операций, программа будет иметь вид:
|
|
|
|
- |
208 |
- |
|
20041) |
05 |
|
1 20177 |
В 1ый РгМд засылается 00005. |
|
|
20042) |
12 |
0 00000 |
Очистка РгСм. |
||
|
-20043) |
01 |
|
1 20201 |
+ Сб "+ С5 + ••• . |
|
п20044) |
-04 |
|
0 20207 |
(CgX + С 5 ) Х . . . . |
||
4 4 7 i |
20045) |
21 |
1 3777? |
В 1-м РгМд 37777 + 00005-00004. |
||
t=20046) |
22 |
|
0 20043 |
Условный переход. |
||
ф 1 ^ 2 0 0 4 7 ) |
01 |
|
0 20200 |
+ |
CQ . |
|
20050) 37 О 00000 |
Останов. |
После выполнения команды 20050 произойдет останов маши |
||
ны с |
высвечиванием на цифровой индикации результата вычис |
|
лений |
в восьмеричной системе |
счисления. |
Этой программой можно просчитать значение полинома боль шей степени. Для этого достаточно поместить соответствующую константу в ячейку 20177 и соответствующим образом разместить, исходные данные.
Почти в каждой циклической программе встречаются циклы, исполняющиеся внутри других циклов, так называемые циклы в циклах.
3 программах с циклами в циклах различаются соответствен но внутренние и внешние циклы. Каждый из этих циклов может быть внешним по отношению к своему внутреннему и внутренним по отношению к своим внешним циклам.
циклы в циклах сопровождаются переадресацией и во внут реннем и во внешних циклах. Организацию цикла в цикле рас смотрим на примере вычисления значения ранее рассмотренного полинома шестой степени по схеме Горнера, но для восьми зна чений аргумента.
Пример 3. Помимо ячеек, отведенных для размещения исход
ных данных |
|
в примере 2, выделим следующие ячейки |
для хране |
||
ния восьми |
|
значений аргумента и восьмеричной константы: |
|||
(20207) |
- |
Х г |
(20210) -Xg, (2021D = Xg, |
(20212) |
= Х4 , |
(20213) |
= Xg, |
(20214)- Xg, (20215)- Х ? , |
(2021 б) |
= Хд, |
|
(20176) |
- |
00000000007. |
|
|
В программе необходимо предусмотреть размещениеполучен ных результатов в следующие ячейки:
|
|
- |
209 - |
|
|
(20217)- У1 Р |
(20220)= |
У2 , |
(20221)= |
Уд, (20222)* |
У4 > |
(20223)= У0 , |
CiU224)- |
У6 , |
С;0225) = |
У ? , (20226)= |
Уд. |
Для организации внешнего цикла будем использовать вто рой регистр модификации, а для организации внутреннегопервый. Тогда программу цикла в цикле можно построить сле-
дующим образом
|
|
20041) |
05 2 20176 |
00007 посылается во 2иРгМд. |
||||||
|
—20042) |
05 |
1 20177 |
00005 посылается в 1иРгМд. |
||||||
! |
|
^0043) |
12 0 00000 |
Очистка |
РгСм. |
|
||||
|
г-20044) |
01 |
1 |
20201 |
|
- |
сб ... + с5 ... . |
|||
! |
|
20045) |
04 |
2 20207 |
|
( С 6 |
А 8 + |
С 5 ) Х . . . . |
||
! о |
|
|||||||||
1 ° |
20046) |
21 |
1 |
37777 |
00005 + 37777*4 |
посылается в Г |
||||
п 1 |
-20047) |
22 |
0 20044 |
РгМд . |
|
|
||||
•у 1 |
Условный переход. |
|||||||||
|
|
20050) |
01 |
0 |
20200 |
|
|
с 0 - |
|
|
|
|
20051) |
24 |
2 20217 |
|
+ |
|
|
||
i |
|
20052) |
21 |
2 |
37777 |
Уд посылается в ячейку 20226. |
||||
|
|
|
|
|
|
00007 + |
37777*00006 посылается |
|||
|
—20053) |
22 |
0 20042 |
во 2иРгМд. |
|
|||||
' — |
Условный переход. |
|||||||||
|
|
•НО 054) 37 |
0 00000 |
|||||||
|
|
Останов машины. |
|
|||||||
|
|
Экономичность циклических программ видна при сравнении |
||||||||
программы в примере 2 с программой в примере 3. |
||||||||||
|
|
Программа, |
приведенная |
в примере 3, |
больше программы |
|||||
примера 2 только |
на четыре |
команды. Однако это позволяет |
просчитывать не одно, а восемь значений полинома. Не труд но видеть, что такой программой можно просчитать и большее количество значений полинома, для этого необходимо изменить константу в ячейке 20176 и соответствующим образом размес тить значения аргумента.
3 случае, если для организации цикла в цикле не пред ставляется возможным использование двух регистров модифика ции, то для этих целей можно использовать один регистр мо-