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

книги из ГПНТБ / Бирюков Н.Е. Основы электронной вычислительной техники

.pdf
Скачиваний:
11
Добавлен:
29.10.2023
Размер:
8.36 Mб
Скачать

Г Л А В А 8

ЭЛЕМЕНТЫ ПРОЕРАММИРОВАНИЯ

§ 42. ОБЩИЕ СВЕДЕНИЯ О ПРОГРАММИРОВАНИИ

Процесс решения ЭЦВМ любой математической задачи заклю­ чается в выполнении в строго определенной последовательности арифметических н логических операций, или в выполнении гак на­ зываемого алгоритма решения задачи.

Алгоритмом называется последовательность арифметических и логических операций, с помощью которых решаются математиче­ ские задачи численным методом.

Разработанные в настоящее время численные методы позво­ ляют свести решение любых математических задач к выполнению четырех арифметических действий (сложение, вычитание, умноже­ ние и деление). Поэтому цифровые машины могут решать прак­ тически любые математические задачи.

Например, дифференцирование и интегрирование по определе­ нию являются предельными значениями разностей и суммы беско­ нечно малых величин.

При дифференцировании

df П) lim

d x

Лл' ->О

При интегрировании

* \ f ( x ) d x =

A v )

f i x ,

Лл-

lim A /(a )Ax.

л.г >0

Применение численных методов

решения дифференциальных

..

dv

уравнении можно рассмотреть на примере выражения ~ ^ г = У-

Приведение уравнения к виду, удобному для решения числен­ ным методом, называется алгоритмом решения уравнения. Алго­ ритмом этого дифференциального уравнения будет выражение

у —а ■ех .

140

Этот алгоритм решается довольно сложно и дает только при­ ближенный ответ в виде численного значения для любых задан­ ных начальных условий.

Чтобы численно решить дифференциальное уравнение — у,

необходимо дифференциалы d заменить небольшими конечными

приращениями Л, т. е.

необходимо заменить

, тогда -=^ = V,

откуда Ау = уАх. Теперь можно вычислить приращение у , пользуясь заданным приращением х. Однако точность вычисления будет определяться величиной приращения. Чем больше величина при­ ращения Ах, тем меньше точность вычислений. В этом и заклю­ чается причина возникновения погрешности. Поэтому численные методы иногда называют приближенными.

Вели начальные условия обозначены х0 и //0, то последующие значения будут обозначены Х\ и у\, х2 и у2 и т. д. Величины X; и у\ могут выть найдены, если заданы начальные условия. Возьмем на­ чальные условия х0 = 0; г/0=1; Ах = 0,01,

тогда

Ау0= t/0Ax =1-0,01= 0,01,

откуда

х1= Хо—)—Ах = 0-г 0,01 = 0,01;

У\ = Уо+ Ауо= 1“Т‘0,01= 1,01.

Точно так же можно найти х2 и у2.

А//[ = г/,Ах= 1,01 -0,01=0,0101,

У2=г/1 + Аг/, = 1,01+0,0101 = 1,0201,

х2 = Х! + Ах = 0,01+0,01 =0,02.

После десяти таких подсчетов получим приближенное значение

х10 = 0,Ю-ух0= 1,1046.

Это означает, что е"-1= 1,1046. Точное же значение е0-1= 1,1052.

Если уменьшить

приращение

х в десять раз, т. е. взять

Ах = 0,001, то после

100 подсчетов

получим точное значение t/j00

в пределах четвертого знака х}00 = 0,Ю и у1т = 1,1052.

Таким образом, точность вычислений определяется величиной приращения. Выбрав величину приращения достаточно малой, можно получить требуемую точность вычислений.

Из приведенного примера видно, что даже сравнительно про­ стое дифференциальное уравнение' численным методом решается довольно сложно и выполняется с применением большого количе­ ства арифметических операций. При решении сложных дифферен­

циальных уравнений численным методом может возникнуть такое большое количество арифметических операций, что практически решение этих уравнении будет невозможно осуществить.

141

Современные электронные цифровые вычислительные машины выполняют десятки и сотни тысяч арифметических операций в се­ кунду. Сложность и громоздкость численного метода из-за боль­ шого количества выполняемых арифметических операций для ЭЦВМ практически никакого значения не имеет. Поэтому ЭЦВМ находят широкое применение, они решают самые разнообразные математические задачи.

Для реализации какого-либо принятого алгоритма предвари­ тельно составляется программа работы машины.

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

Программа вычислений есть развернутый алгоритм решаемой

задачи. v

§ 43. СТРУКТУРА КОМАНД, ПРИМЕНЯЕМЫХ В ЭЦВМ

Команда содержит указания о том, какую операцию и над ка­ кими числами нужно произвести. Каждая команда представляет собой последовательность электрических импульсов, условно раз­ деленных на несколько групп. Первая группа импульсов обозна­ чает код операции, производимой над числами в арифметическом устройстве (сложение, вычитание, умножение и т. д.). Так как ко­ личество операций вычислений в общем не очень велико (20—50), то число двоичных импульсов в этой группе обычно не превышает шести, что может обеспечить выполнение 64 различных операций

(26= 64).

Остальные группы импульсов — это коды адресов чисел, кото­ рые необходимо передать из запоминающего устройства в ариф­ метическое устройство для выполнения над ними операции, ука­ занной в группе «код операции» — ко.

Следовательно, команда для выполнения счетной операции должна состоять из кода операции и указания, из каких ячеек за­ поминающего устройства нужно взять исходные числа и куда по­ слать результат вычислений. В большинстве цифровых машин команды кодируются в двоично-восьмеричном коде и размешаются в одной ячейке запоминающего устройства. Поэтому номер ячейки ЗУ есть одновременно номер команды.

Вид программы определяется характером решаемой задачи, количеством используемых в машине команд, а также типом адресности машины. Под адресностью ЭЦВМ понимают количе­ ство адресов, содержащихся в команде. В соответствии с этим раз­ личают одно-, двух-, трех- и четырехадресные команды и машины. Так как команда является кодом, то одной из характеристик ма­ шины является ее адресный код.

Рассмотрим более подробно структуру команд, применяемых в цифровых машинах различных типов.

Трехадресная команда имеет вид 01 0435 0254 0132. Здесь пер­ вая группа цифр -код операции, последующие три группы цифр—

142

адреса. Пусть 01 — код операции сложения. Тогда данная команда имеет следующее содержание: «взять число из ячейки № 0435, сло­ жить с числом, хранящимся в ячейке № 0254, и результат сложения записать в ячейку № 0132».

Трехадресная команда по сравнению с другими больше всего соответствует логике выполнения арифметических и логических операций. При использовании таких команд большинство операций выполняется однообразно, благодаря чему значительно упро­ щается методика составления программ и система управления ра­ ботой машины.

Четырехадресная команда соответствует выполнению операции деления с остатком, трехадресная — всем остальным арифметиче­ ским действиям. Четвертый адрес в четырехадресной, команде мо­ жет быть адресом остатка или адресом команды, которая должна выполняться при следующей операции.

Однако при обоих способах использования четвертого адреса преимущества четырехадресной команды невелики, поэтому такие команды применяются редко.

Двухадресная команда имеет вид 01 0275 0341. Такая команда означает: «число, хранящееся в ячейке № 0275, сложить с числом, записанным в ячейке № 0341, результат сложения занести в ячейку

№ 0341».

Двухадресная команда применяется очень часто, т. к. в боль­ шинстве случаев одно из двух чисел, над которыми производится действие, оказывается ненужным для дальнейших вычислений и его можно «стереть», а по адресу «стертого» числа записать ре­ зультат операции.

Это уменьшает количество разрядов в разрядной сетке ЗУ, предназначенного для записи адресов команд программы вычис­ лений.

Одноадресная команда содержит один адрес и один код опера­ ции. Она применяется преимущественно в малых универсальных и специализированных машинах, в которых арифметические устрой­ ства имеют накапливающие сумматоры, выполняющие часть функ­ ций ЗУ.

В одноадресной машине для выполнения одной элементарной операции требуется не одна, а три команды.

Первая команда 02 0324 означает: «число, хранящееся в ячейке № 0324, перенести в сумматор» (02 — код операции переноса).

Вторая команда 01 0254 означает: «число, записанное в ячейке № 0254, прибавить к содержимому сумматора, результат сложения оставить в сумматоре».

Третья команда 16 0173 означает: «содержимое сумматора за­ нести в ячейку № 0173» (16— код операции переноса из регистра сумматора в ячейку памяти машины).

Из приведенного примера видно, что программа одной и той же задачи в одноадресной машине должна содержать большее число команд, чем в тре-хадресной пли двухадресной машине.

143

Взависимости от конструкции ЭЦВМ разделяются на машины

споследовательным (естественным) и принудительным порядком выполнения команд.

Вмашинах с последовательным выполнением команд после вы­ полнения к-й команды (т. е. команды, хранящейся в к-й ячейке

ЗУ) выполняется (/с+1)-я команда, (д-{-2)-я и т. д.

В этих машинах процесс выполнения команды, адрес которой в виде числа находится на счетчике команд, осуществляется при­ бавлением к этому числу единицы. Поэтому в следующем цикле выбирается очередная команда, затем следующая и т. д.

Известно, что каждая команда вычислительного назначения должна содержать код выполняемой операции и адреса ячеек, над кодами которых должна быть выполнена эта операция н в которые должен быть отослан результат вычислений. Для составления команд не обязательно знать число, над которым производится операция, достаточно в команде указать помер ячейки, т. е. адрес, в которую оно было помещено в процессе ввода или в результате выполнения какой-либо предыдущей операции.

Таким образом, не зная заранее результатов предшествующих вычислений, можно составлять команды для выполнения операций над ними, указывая в адресах номера ячеек, в которые эти резуль­ таты отсылаются для хранения (что облегчает процесс программи­ рования) .

Поскольку в адресах команд указываются не числа, а лишь их номера, число двоичных разрядов, необходимых для кодировки адресов команд, может быть небольшим при небольшой емкости оперативного ЗУ.

Так, для кодировки каждого адреса /Ц и Л2 в двухадресной ЭЦВМ «Минск-1» отводится по 10 двоичных разрядов, что дает возможность находить 1024 ячеек ЗУ (210= 1024).

В машинах с принудительным порядком выполнения

команд,

r каждой команде указывается

адрес ячейки, хранящей

следую­

щую команду. В таких машинах

обычно

применяются

четырех­

адресные команды.

 

 

 

 

Принудительный порядок выполнения

команд

осуществляется

в машинах, имеющих запоминающие устройства

периодического

действия (линии задержки, магнитные барабаны, магнитные лен­ ты). При принудительном способе выполнения команд программи­ рование усложняется, поэтому в настоящее время наибольшее рас­ пространение получил последовательный порядок выполнения команд.

Команда передачи управления

Последовательное перечисление элементарных вычислительных операций, необходимых для решения задачи, привело бы к про­ граммам огромной длины, одно лишь составление которых зани­ мало бы много времени. Кроме того, такая программа чрезмерно

144

загрузила бы ячейки ЗУ. Поэтому задача программирования — составление таких программ, по которым при сравнительно не­ большом числе команд может быть выполнено большое количе­ ство отдельных вычислений. Это может быть осуществлено за счет многократного использования одних и тех же команд.

Как правило, почти все сложные математические задачи обла­ дают свойством повторять те или иные расчетные этапы. Поэтому в математических задачах, решение которых может быть расчле­ нено на повторяемые вычислительные этапы, одна команда или группа команд может быть использована многократно. Для реше­ ния большинства задач количество команд может быть во много раз меньше количества команд, необходимых для их последова­ тельного решения. Это осуществляется по специальному сигналу «признак — результат», который вырабатывается в арифметиче­ ском устройстве и называется командой передачи управления.

Приведем несколько команд, осуществляющих операцию пере­ дачи управления в разных машинах.

1. Команда передачи управления в зависимости от сравнения

двух чисел с учетом знаков (<ф записывается

<

« 2

СО <3

Это значит: сравнить число, находящееся в ячейке а ь с числом, находящимся в ячейке а2, и, если первое из них больше второго, перейти к выполнению следующей команды программы, а если пер­ вое меньше второго или равно ему, перейти к выполнению коман­ ды, номер которой указан в третьем адресе а3.

2. Команда передачи управления в зависимости от равенства

двух чисел ( = ) записывается:

a-i

а2

ай

Это зна­

чит: сравнить число, находящееся в ячейке аь с числом, находя­ щимся в ячейке а2, и если эти числа равны, передать управление команде, указанной в третьем адресе а3, в случае их неравенства перейти к выполнению следующей команды.

3.Команда передачи управления по признаку. В некоторых ма­

шинах при выполнении арифметических и логических операций в зависимости от результата вычислений вырабатывается признак, который сохраняется до следующей команды и используется, если команда является командой передачи управления. Таким призна­ ком может служить, например, знак минус, полученный в резуль­

тате

выполнения

сложения или вычитания. Например, в ЭЦВМ

«Минск-1» команда условной

передачи управления записывается

так:

34

«1

2 . Код

операции 34 означает следующее.

Если результат предыдущих действий положительный, то управление передается по первому адресу команды. Если резуль­ тат предыдущих действий отрицательный, то управление пере­ дается по второму адресу. Передача управления по первому или второму адресу называется операцией условной передачи управ­ ления.

10—Зак 1246

145

Если в первом п во втором адресах поместить помер следую­ щей команды, то команда передачи управления будет осуществлять операцию безусловной передачи управления.

Таким образом, для использования операции передачи управ­ ления по признаку в виде операции условного перехода необхо­ димо предусмотреть выработку соответствующего признака непо­ средственно в предыдущей команде.

Если же эта операция выполняется как операция безусловного перехода, то безразлично, вырабатывается признак в предыдущей команде или нет.

§ 44. СИСТЕМА КОМАНД, ПРИМЕНЯЕМЫХ В ЭЦВМ

Система команд, применяемых в современных универсальных цифровых электронных вычислительных машинах, значительна по объему и содержит несколько десятков различных команд.

Чтобы уяснить принципы программирования, рассмотрим основные наиболее характерные команды двухадресной машины

«Минск-1».

Для записи команд введем следующие условные обозначения: а\ — адрес ячейки первого числа;

<Oi> — содержимое ячейки адреса ал\ а2— адрес ячейки второго числа;

<о 2> — содержимое ячейки адреса о2; См — обозначение сумматора;

<С.и> — содержимое сумматора См.

Команды программы, т. е. код операции и адреса, записы­ ваются обычно в двоично-восьмеричной системе счисления.

Операция сложения. Код операции при сложении записывается

-КО, где К может принимать значения от 0 до 7, т. е.

операция

сложения выполняется в нескольких модификациях.

 

Команда +00

< o i> + < a 2>

«2 читается так: содержимое

ячейки о.1 сложить с содержимым

ячейки о2 и результат

оставить

в ячейке а2.

 

 

 

Команда -(-10

< o 2> + < o i> - >

См читается: содержимое ячей­

ки а2 сложить с содержимым ячейки а\ — результат оставить в сум­ маторе См.

Команда +20 <См>-\-<аi> -> а2 читается так: к содержи­ мому сумматора прибавить содержимое ячейки ор — результат на­ править в ячейку Ог-

Команда -(-30 <См> + <O i> -> См читается: к содержимому сумматора прибавить содержимое ячейки ар — результат оставить в сумматоре.

Команда +40 < а2> + < а {> -> а2 читается: содержимое ячей­ ки а2 сложить с содержимым ячейки аг— результат направить в ячейку о2, после чего произвести печатание результата в восьме­ ричной системе счисления.

146

Команда +50 [<а2>] + [<«!>] -> См читается: модуль ячей­ ки а2 сложить с модулем ячейки щ, результат оставить в сумма­ торе.

Команда +60 [<См>] + [ < ai>] -> См читается: модуль со­ держимого сумматора сложить с модулем содержимого ячейки а\ — результат оставить в сумматоре.

Операция вычитания, деления и умножения выполняется с теми же модификациями, что и операция сложения. Различие состав­

ляет только запись кода операции, например:

 

а)

код операции при вычитании + к1\

 

б)

код операции при делении +к2\

 

в)

код операции при умножении +кЗ\

 

г) код операции при циклическом сложении —к()\

д)

код операции при сравнении, т. е. сложении по модулю —к1.

Во всех этих операциях к может принимать значения от 0 до 7.

Коды операций без модификаций:

 

 

а)

код операции умножения с удвоенной точностью — 03;

б)

код операции

сдвига — 07.

"(По этой

команде содержимое

ячейки а2 сдвигается

влево или

вправо на

п разрядов в зависи­

мости от знака п. При п > 0 — влево, при

п < 0 — вправо. Кон­

станта п хранится в ячейке а\);

 

+24 — выполняется

в)

код операции

безусловного перехода

команда по адресу аь а результат записывается по адресу а2\

г)

код операции условного перехода +-34 — очередная команда

выполняется по адресу а ь если результат предыдущего действия положительный, и по адресу а2, если результат предыдущего дей­ ствия отрицательный;

д)

код операции останова машины по адресу щ — 37;

е)

код операции останова по адресам О] и а2— 47.

§ 45. ЭЛЕМЕНТАРНОЕ ПРОГРАММИРОВАНИЕ

Решению задачи на ЭЦВМ предшествует подготовительная ра­ бота, которая обычно состоит из двух частей:

1.Выбора численного метода решения задачи.

2.Составления программы решения задачи.

Вэтом параграфе рассмотрим только метод составления эле­ ментарных программ решения задачи, т. е. программирование.

Программирование включает в себя следующие основные этапы решения задачи в ЭЦВМ:

1.Составление программы решения задачи.

2.Распределение ячеек запоминающего устройства между числовыми исходными данными, командами, промежуточными и

окончательными результатами.

Таким образом, для составления программы необходимо знать адреса исходных данных, адреса промежуточных и окончатель­ ных результатов чисел, а также количество и адреса команд про­ граммы.

10*

147

При программировании память машины обычно делят на две части:

одна предназначена для записи команд программы, другая — для записи исходных данных, промежуточных и окончательных ре­ зультатов.

Для удобства при составлении программы, когда производится запись номеров ячеек, обычно пользуются буквенно-численными обозначениями адресов.

Например, при нумерации ячеек, в которых размешаются команды программы, будем обозначать так: № + 1, №-{-2, № + 3 . . . — номера ячеек, хранящих исходные и вспомогательные числа а ьа2<3з- ■• -ап. Ячейки, в которых хранятся промежуточные результаты вычислений, так называемые «рабочие ячейки»,

обозначим 61,62^3- • •

п — номера ячеек с результатами реше­

ния— СьС2Сз. . • .сп.

Такие обозначения позволяют при програм­

мировании составлять программы до размещения соответствую­ щего материала по конкретным ячейкам памяти, когда число ячеек, необходимое для размещения команд, промежуточных или окончательных результатов и других данных еще неизвестно, а так­ же неизвестны номера свободных ячеек ЗУ.

После того, как программа

будет полностью составлена, бук­

вам а, в, с придают конкретное числовое значение, номера

ячеек

записывают числами (в восьмеричной системе счисления)

и эти

исходные данные записывают

на специальном бланке, с которого

их переносят на перфоленты

или перфокарты п затем

вводят

в машину.

 

 

При программировании простейших задач по заданным фор­ мулам, прежде всего, необходимо выбрать определенный порядок действий, т. е. разложить вычисления на последовательность эле­ ментарных операций. При этом нужно стремиться к возможному уменьшению числа элементарных операций путем тождественного преобразования формул. Для реализации элементарных операций необходимо иметь в соответствующих ячейках запоминающего устройства числа, входящие в эти операции.

В целях экономии ячеек ЗУ результаты промежуточных вычис­ лений следует помещать в ячейках ЗУ, содержащих ранее исполь­ зованные результаты, которые не понадобятся в дальнейших вы­ числениях. Как указывалось, программа решения задачи на ма­ шине представляет собой определенную последовательность команд. Сама же команда записывается следующим образом.

Т а б л и ц а 11

 

К о д

А

д р е с

а

Р е з у л ь т а т

к о м а н д ы

о п е р а ц и и

п е р в ы й

в т о р о й

т р е т и й

 

 

 

 

31

13

а

а

ь

т ■ т = от2

148

Предположим, в ячейке а находится число т. Тогда запись команды означает, что число т, находящееся в ячейке а, необхо­ димо умножить само на себя, а результат поместить в ячейку Ь.

Рассмотрим примеры составления программ для решения не­ сложных алгебраических зависимостей.

П р и м е р 1.

Вычисление дробно-линейной функции:

с.х -; d

Вычисление функции у будем производить в следующей после­

довательности элементарных

операций: 1) А\ — ах\

2) A=Ai + b\

3) Ву = сх\ 4) B = Bi + d.

 

 

 

Исходные данные а, Ъ, с, d, х разместим соответственно в ячей­

ках запоминающего устройства аь а2, о3, а4) as.

 

выпол­

При вычислениях каждая

из элементарных операций

няется отдельной командой.

 

двух-

и трех­

Как уже упоминалось, команды бывают одно-,

адресными. Трехадресная команда по сравнению с другими больше всего соответствует логике выполнения арифметической или логи­ ческой операции.

В ЭЦВМ с трехадресными командами вычисления произво­ дятся с использованием трех адресов в каждой команде. По пер­ вому и второму адресу записываются исходные данные>вычисле­ ний, по третьему адресу обычно записываются результаты проме­ жуточных и окончательных вычислений. Если в качестве третьих рабочих ячеек использовать ячейки с номерами Ьи Ь2, Ь$ . . то вычисления функции у с применением трехадресных команд про­ водятся в последовательности, показанной в табл. 12.

ко м а н д

+ 1

--2

+ 3

'■4

№•■ 5

№-■ 6 № - ;- 7

В ы п о л -

 

А д р е с а

 

НЯСМ<1и

т р е т и й

о п е р а ц и я

п е р в ы й

в т о р о й

X

«1

«5

ц

 

ь \

 

к

X

а 3

«5

!>■>

 

Ьо

<h

Ьч

 

h

ь..

h

п

Ц

о с т а н о в .

 

 

Т а б л и ц а 12

Ре з у л ь т а т

вы ч и с л е н и й

А г

 

а х

 

А*.

1! s*.

о*

/5 3 =

СХ

 

 

=

 

d

У

 

А

 

 

/>>

 

Л

/7 — п е ч а т а н и е р е з у л ь т а т о в в ы ч и с л е н и й , н а х о д я щ и х с я п о а д р е с у Ь\.

После составления основной программы, буквенные обозначе­ ния номеров ячеек заменяют числовыми, проставляя реальные но­ мера ячеек памяти вычислительной машины.

Эта задача решается, примерно таким же способом и в ЭЦВМ с двухадресными командами:

149

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