Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги из ГПНТБ / Караваев, Н. И. Электронные цифровые вычислительные машины и программирование учеб. пособие

.pdf
Скачиваний:
5
Добавлен:
20.10.2023
Размер:
8.52 Mб
Скачать

- 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 случае, если для организации цикла в цикле не пред­ ставляется возможным использование двух регистров модифика­ ции, то для этих целей можно использовать один регистр мо-

Соседние файлы в папке книги из ГПНТБ