
книги из ГПНТБ / Михельсон В.С. Элементы вычислительной математики учебное пособие для электроприборостроительных техникумов
.pdfтак как
(0 ,00111111001)2 = 1 — (0 , 11000000111)2.
Итак,
(0 , 10101010111)2 — |
( 0 , 1110101)2 = |
— ( 0 , 00111111001)2 |
или |
|
|
1367 |
117 |
505 |
2048 |
128 |
2048 |
Наряду с дополнительными кодами в некоторых вычислительных машинах для вычитания положительных двоичных чисел пользуют ся обратными кодами. Обратный код двоичного отрицательного чис
ла N, |
который обозначается через (jV)„6p, получается, если: |
1) |
в знаковом разряде поставить единицу; |
2) во всех других разрядах заменить единицы нулями, а нули — единицами.
Например, если
Л7 = — 0 , 110010110010100,
то
(N)обр = 1001101001101011.
При алгебраическом сложении двоичных чисел нужно положи тельные числа записать в прямом коде, а отрицательные — в обрат ном и произвести арифметическое сложение их кодов, включая зна ковые разряды. Если возникнет единица переноса в знаковом разря де, то эта единица прибавляется к младшему разряду суммы кодов. Положительный результат получается в прямом коде (в этом случае в знаковом разряде результата стоит нуль), а отрицательный резуль тат— в обратном коде (в этом случае в знаковом разряде резуль тата стоит единица).
Например, если
п
190
(Д^Опр = 01011101101 и (Л'2)обр= 10110100000,
Сложим (;V,)„P и (N2)обр:
1 11111 —единицы переноса
, |
01011101101 |
слагаемые |
+ |
10110100000 |
|
100010001101 . |
|
Так как в знаковом разряде получается перенос единицы, то для нахождения кода суммы Mi и <V2 нужно эту единицу прибавить к младшему разряду получившегося кода, тогда
. 00010001101
+__________ 1_
00010001110 .
Полученный код и является кодом суммы Mi + M2. Так как в зна ковом разряде стоит ноль, то этот код является прямым. Итак, (Ni +
+ M2)ni) = 00010001110 и
N!-\- N2 ~ (0,0010001110)2= ~ Т ~ ■
Дополнительный и обратный коды отрицательного двоичного числа N связаны между собой следующим соотношением:
(^)доп = (ЛОобр + 2“ " .
где п — число разрядов в числе N.
Перевод прямых кодов отрицательных чисел, записанных в дво ичной системе счисления, производится автоматически самой маши ной перед тем, как она начнет выполнять команду сложения или вы читания. Если результат алгебраического сложения является отрица тельным и получается в виде обратного или дополнительного кода, то машина автоматически переводит этот код в прямой и только после этого задает результат в ячейки памяти запоминающего уст ройства.
До сих пор мы рассматривали алгебраическое сложение чисел с фиксированной запятой. В машинах с плавающей запятой выпол нение арифметических операций усложняется тем, что, кроме выпол-
191
нения операций с мантиссами чисел, приходится выполнять арифме тические операции с порядками этих чисел. Прежде чем производить алгебраическое сложение, машина должна произвести выравнивание порядков. Для этого к меньшему порядку прибавляется единица, сле ва к соответствующей мантиссе добавляется нуль, а последняя спра ва цифра отбрасывается. Таким образом, после прибавления к по рядку единицы происходит сдвиг мантиссы на один разряд вправо.
Такое прибавление единиц к меньшему порядку и сдвиг мантис сы происходят до тех пор, пока меньший порядок не станет равным большему. Сумме присваивается этот общий порядок.
Пр и м е р . Путь Nt= 343 и N2 = —11; в десятичной системе счис ления нормализованные формы этих чисел имеют вид
Ni — 0,343-103 и N 2= —0,11-102.
В двоичной системе счисления нормализованные формы этих чи сел запишутся следующим образом:
М = (0,101010111)2 .(Ю),<1001>* .
И
м , = (—0, 1011)2 • (Ю)о(100Ч
поэтому в двоичной системе счисления мантиссы и порядки чисел
Ni и Л'г будут соответственно mi = 0,101010111 и pi = 1001, т2 ——0,1011
и р2= 100 |
вычислить Л^ + Л'г, нужно сначала |
выравнять |
порядки. |
||||
Чтобы |
|||||||
Так как Pi—р2—(101)2, то нужно слева |
к дробной части |
мантиссы |
|||||
N2 дописать пять нулей (так как (1012=5), т. е. сделать сдвиг ман |
|||||||
тиссы на 5 |
разрядов вправо. Тогда |
получаем для N2 мантиссу т2 = |
|||||
= —0,000001011 и порядок р2=1001. |
|
|
_ |
|
|||
Это значит, что порядок N\ + N2 |
будет р ~ р 1 = р2 =М 0 \, а мантис |
||||||
са rrii+ m2. |
Сложение этих двух мантисс в вычислительной машине |
||||||
происходит |
как |
с_ числами с фиксированной |
запятой: |
(m1),ip = |
|||
=0101010111 |
и |
( т 2)обР = 1111110100, |
поэтому |
(»ii)np+(ш2)прр= |
|||
= 10101001011. |
Так как в знаковом |
разряде произошел перенос еди |
ницы, то написанная слева единица должна быть прибавлена к млад шему разряду получившегося кода, тогда получаем
. 0101001011
+ ____________1_
0101001100.
192
В знаковом разряде стоит нуль, поэтому полученный код является
прямым кодом числа mi + m2, т. е. мантисса N t+N2 равна 0,101001100. Итак, получаем
N1 + N 2 = (0,101001 ЮО)2.2(10ш>2
или
Ад + Nt = |
332 |
-25 = 332. |
Умножение чисел с фиксированной запятой сводится к много кратному сложению с последующим сдвигом вправо получающихся промежуточных сумм.
|
51 |
\ |
/ |
58 |
\ |
— — |
I . I — |
] = |
|||
( |
64 |
/ |
\ |
64 |
) |
= (—0,110011)г • (0,11101)2- Вычисление этого произведения |
|
состоит |
из двух этапов: вычисления модуля произведения и вычисления зна ка произведения.
Эти два сомножителя находятся в запоминающем устройстве машины в прямом коде: 1110011000000 и 0111010000000.
Вычисление модуля произведения этих двух чисел сводится к следующему.
1.Начиная с низшего разряда второго сомножителя, машина находит первый разряд, в котором находится единица. Это восьмой разряд.
2.Код первого сомножителя передается в арифметическое уст ройство с нулем в знаковом разряде; в нем появляется код
0110011000000.
3.Этот код сдвигается вправо на один разряд; теперь появляет ся код 0011001100000.
4.Рассматривается следующий девятый разряд кода второго сомножителя. Так как в этом разряде стоит 0, то код первого сом ножителя в арифметическое устройство не прибавляется.
5.Код, находящийся в арифметическом устройстве, сдвигается на один разряд вправо и станет равным 0001100110000.
6.Рассматривается десятый разряд кода второго сомножителя. Так как в этом разряде находится единица, код первого сомножи теля с нулем в знаковом разряде передается в арифметическое уст ройство, в нем происходит сложение находящегося там кода с посту пившим в него кодом первого сомножителя. В результате появляется код 0111111110000=0001100110000+0110011000000.
7.Код, находящийся в арифметическом устройстве, сдвигается
еще на один разряд вправо и становится равным 0011111111000.
13— 44 0 |
193 |
8. Рассматривается одиннадцатый разряд второго сомножителя. Так как в этом разряде стоит единица, то код первого сомножителя опять передается в арифметическое устройство, в котором появля ется число
1010010111000 = 0011111111000 + 0110011000000.
9.В арифметическом устройстве происходит сдвиг находящегося
внем кода на один разряд вправо и в нем появляется код
0101001011100.
10.В двенадцатом разряде второго сомножителя находится еди
ница, поэтому в арифметическое устройство еще раз передается код первого сомножителя и в нем появляется код
1011100011100 = 0101001011100 -|~ 0110011000000.
11. Полученный код сдвигается на один разряд вправо и стано вится равным 0101110001110.
Это и есть прямой код произведения. В знаковом разряде у это го кода стоит 0. Цифра знакового разряда прямого кода произве дения определяется сложением цифры знаковых разрядов прямы кодов сомножителей по следующему правилу:
Действия с цифра ми знакового разря да
Действия со зна ками сомножителей
0 + 0= 0 ,1 + 0 = 1 ,0 + 1 = 1 ,1+ 1=0
(+ )•(+ ) |
= |
(+)> |
( - ) • ( + ) = ( - ) ; |
( + ) • ( - ) |
= |
( - ) . |
( - ) • ( - ) = (+ ) |
При сложении цифр знаковых разрядов нужно помнить, что 1+ 1=0, 1. е. если в знаковых разрядах двух прямых кодов сомно жителей стоят единицы, то в знаковом разряде прямого кода про изведения машина ставит 0, а единица переноса отбрасывается. На основании этого правила в знаковый разряд кода полученного про изведения ставится единица. Окончательно получаем
(Л+)пр = 1101110001110. Поэтому М = (— 0,101110001110)2 или
194
При умножении чисел с плавающей запятой мантиссы сомно жителей перемножаются как числа с фиксированной запятой. Поряд ки алгебраически складываютоя, образуя порядок произведения. Полученный результат может быть нормализован, если пользоваться специальной командой умножения.
Итак, при сложении и вычитании отрицательные числа задаются в арифметическом устройстве машины в виде обратных или допол нительных кодов, при умножении и при делении — в виде прямых кодов. В запоминающих устройствах числа хранятся в прямом коде. Так как с порядками чисел происходит только сложение или вычи
тание, то в некоторых |
машинах (например, БЭСМ) коды отрица |
|||
тельных |
порядков |
хранятся в виде дополнительных кодов. |
||
Во |
многих машинах |
операция деления заменяется умножением |
||
^так |
как —— = а• |
■По числу b машина автоматически вычис- |
||
ляет |
|
1 |
|
|
число ——, которое затем множится на а. |
||||
|
|
о |
способы выполнения арифметических операций |
|
Рассмотренные |
в электронной вычислительной машине показывают, что способ пред ставления чисел с плавающей запятой позволяет получить большую точность вычислений, чем при помощи чисел с фиксированной за пятой.
§ 4. Структура чисел и команд в электронной вычислительной машине
Числа, записанные в десятичной системе счисления, поступают в электронную вычислительную машину и хранятся в ней в виде ко дов — последовательностей единиц и нулей. При помощи кодов в вычислительную машину задаются не только числа, но и указания, над какими числами какие нужно производить операции.
Большинство электронных цифровых машин имеют несколько различных видов запоминающих устройств. Это магнитные ленты, магнитные барабаны, ферритовые запоминающие устройства. Не смотря на различия в конструкции, все запоминающие устройства состоят из большого числа однотипных элементов. Каждый такой элемент предназначен для хранения одного числового кода, который может быть или числом, или командой. Он называется ячейкой па мяти. В разных вычислительных машинах можно вводить и хранить числа двоичной системы счисления с различным числом двоичных знаков. Число двоичных цифр, которые имеют числа, хранящиеся в
13 |
195 |
машине, называется разрядностью этой машины. В каждой ячейке памяти хранится один код, у которого число двоичных цифр равно разрядности машины. Например, в каждой ячейке памяти машины БЭСМ хранятся 39-разрядные коды, а в машине «Минск-1» — 31-раз- рядные. Каждая ячейка имеет свой номер, причем ячейки различных запоминающих устройств одной и той же машины имеют различные номера. Эти номера называются адресами ячеек. Выборка из какойнибудь ячейки памяти хранящегося в ней кода или же передача в ячейку памяти какого-либо кода называется обращением к памяти по данному адресу.
Как уже говорилось, код, который состоит из набора единиц и нулей и хранится в какой-либо ячейке памяти, изображает или от дельное число, или указание о той операции, которую должна вы полнить машина. Во втором случае этот код называется командой. В команде могут указываться: одна элементарная операция, которую должна выполнить машина; адреса ячеек, в которых находятся чис ла, над которыми нужно выполнить эту элементарную операцию, и адрес ячейки, куда машина должна задать результат выполнения этой операции. Различные электронные вычислительные машины вы полняют различные элементарные операции, причем элементарные операции, выполняемые одной машиной, могут отличаться от элемен тарных операций, выполняемых другой. Количество и характер этих операций, выполняемых данной машиной, зависят от ее конструкции. Каждой элементарной операции присваивается некоторый номер, на зываемый кодом операции. Таким образом, если какой-нибудь код является командой, то его цифры можно разбить на две части. Пер вую часть образует код операции. Вторая часть называется адрес ной частью команды. Эта часть команды состоит из нескольких групп, каждая из которых выражает отдельный адрес ячейки памяти. Если в состав команды входит один адрес, то команда называется одно адресной, а машина, выполняющая эту команду, — одноадресной. Если же команда содержит два, три или четыре адреса, то она назы вается соответственно двухадресной, трехадресной, четырехадресной.
В команде не указывают сами числа, над которыми нужно вы полнить элементарную операцию, а указывают адреса ячеек памя ти, в которых они находятся. Это делается для того, чтобы состав ленные команды можно было использовать не только при решении одной заданной задачи с определенными числовыми коэффициентами, но и для решения той же задачи при любых других коэффициентах. В зависимости от того, какие коэффициенты заранее заданы в этих ячейках, машина выполнит вычисление с этими числами. Последо вательность команд образует программу работы машины. Эта прог
196
рамма в виде двоичных чисел задается в машину и хранится в запо минающем устройстве так же, как исходные числа.
Машины с естественным и принудительным порядком выполне ния команд. В машинах с естественным порядком выполнения ко манд все команды задаются в определенных ячейках памяти, име ющих последовательные номера. После того как машина выполнит команду, находящуюся в ячейке с определенным номером, она начи нает выполнять команду, которая находится в ячейке с номером на единицу больше. Только после выполнения так называемых команд условного перехода машина начинает выполнять команду, которая не находится в следующей по порядку ячейке.
Но существуют машины, в которых после выполнения одной ко манды может выполняться команда, находящаяся в любой ячейке памяти. В командах таких машин приходится еще указывать адрес ячейки, в которой находится команда, выполняющаяся вслед за дан ной. Такие машины получили название машин с принудительным по рядком выполнения команд.
Например, четырехадресная команда |
|
|||
0567 |
2451 |
4200 |
5477 |
04 |
для машины с принудительным порядком выполнения команд, у ко торой код операции 04 соответствует делению, означает: «взять дели мое из ячейки с адресом 0567, взять делитель из ячейки с адресом 2451, частное записать в ячейку с адресом 4200 и перейти к выпол нению команды, хранящейся в ячейке с адресом 5477».
Машины с естественным порядком выполнения команд могут быть одноадресными, двухадресными и трехадресными. В одноадрес ной машине «Урал-4» имеется сумматор, в котором выполняются арифметические операции над числами. Результат может оставаться в сумматоре. В сумматор также можно переносить по одному числу из любой ячейки памяти.
Таким образом, сложение двух чисел, находящихся в определен ных ячейках, и запись суммы в определенной ячейке сводятся:
1)к передаче в сумматор первого слагаемого из заданной
ячейки;
2)к передаче из определенной ячейки второго слагаемого в сум матор и сложению двух имеющихся в нем чисел;
3)к записи полученного в сумматоре результата в заданной ячейке запоминающего устройства.
197
Для выполнения этих трех элементарных операций нужно за дать машине три команды. Пусть мы хотим сложить числа, находя щиеся в ячейках с адресами 0675 и 2057, а результат сложения за дать в ячейку с номером 1760 (все адреса ячеек записываются для удобства в восьмеричной системе счисления). Код первой элемен тарной операции для машины «Урал-4» равен 42, второй — 41 и тре тий— 56. Эти три команды имеют следующий вид:
42 0675
41 2057
56 1760
Код любой команды одноадресной машины состоит из кода опе рации и одного адреса и имеет вид
аА
где а и А — два восьмеричных числа: а — код операции, А — адрес ячейки запоминающего устройства.
В двухадресной машине «Минск-1» можно после выполнения сложения автоматически записать результат в одной из ячеек, в ко торых находились слагаемые. Пусть, например, мы хотим сложить два числа, находящиеся в ячейках запоминающего устройства с но мерами 1540 и 2206, а полученный результат задать в запоминаю щее устройство и одновременно отпечатать. Для этого предусмотре на специальная операция с кодом, равным 40. Поэтому искомая ко манда будет иметь вид (числа восьмеричные)
40 1540 2206
Отметим, что любое число, записанное в какой-нибудь ячейке, гасит ся (стирается) только в том случае, когда в эту ячейку задают новое
т
число. При передаче числа из любой ячейки в другую или в арифме тическое устройство равное ему число остается в этой ячейке.
В общем виде код команды двухадресной машины состоит из кода операции и двух адресов. Такой код имеет вид
а А В
где а — код операции, а числа А и В являются адресами.
В трехадресной машине арифметические операции производятся над двумя числами, адреса ячеек которых указываются в команде. После выполнения операции результат автоматически записывается в ячейку, адрес которой также указывается в команде. Сложим, на пример, два числа, находящиеся в ячейках с номерами 0077 и 0306. Пусть мы хотим, чтобы результат записался в ячейке с номером 0111. Обозначим код операции сложения через 01. Код соответствующей трехадресной команды, состоящей из кода операции и трех адресов, имеет вид
01 077 0306 0111
Наибольшее распространение получили одноадресные и трехацресные машины с естественным порядком выполнения команд.
Структура чисел и команд в электронной вычислительной ма шине. Электронная вычислительная машина производит вычисле ния с числами, записанными в двоичной системе счисления. Перевод чисел из десятичной системы в двоичную осуществляет сама маши на. Но чтобы задать цифры вводимого числа в машину, нужно за писать каждую цифру при помощи двоичных знаков. Любую из де сяти цифр (0, 1, 2, 3, 4, 5, 6, 7, 8 и 9) можно записать при помощи
четырех двоичных цифр следующим образом: 1— 0001, 2 |
— 0010, |
3 |
— |
|
ООП, 4 — 0100, 5 — 0101, |
6 — 0110, 7 — 0111, 8 — 1000 и |
цифру |
9 |
— |
1001. Эти четверки цифр, |
заменяющие одну десятичную цифру, |
на |
зываются тетрадами. После замены в десятичном числе его цифр тетрадами получающееся число остается десятичным, но цифры его уже записаны при помощи двоичных знаков. Такая форма записи десятичных чисел называется двоично-десятичной формой. Например,
двоично-десятичной |
формой |
числа |
310419 |
будет |
число |
001100010000 0100 00011001. Запись десятичных |
чисел в двоично |
десятичной форме происходит автоматически. Чтобы задать числа в машину, их предварительно нужно пробить на перфокарту или
199