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

книги из ГПНТБ / Дроздов Е.А. Многопрограммные цифровые вычислительные машины

.pdf
Скачиваний:
22
Добавлен:
25.10.2023
Размер:
15.96 Mб
Скачать

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

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

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

лучила название поля.

Количество этих ячеек

определяет

дли­

ну поля.

Поэтому операции над целыми

числами

различной

раз­

рядности

называются

о п е р а ц и я м и

н а д

п о л я м и п е р е ­

м е н н о й

длины.

 

 

относятся не только

Следует заметить, что к таким операциям

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

§ 2.3. Машинные коды чисел

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

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

При естественной форме представления чисел, по абсолютной величине меньших единицы, сразу за знаковым разрядом (вправо от запятой) следуют старшие разряды мантиссы. Например, двоич­ ные числа + 0,1101 и —0,0111 при закодированных знаках будут

40

иметь соответственно вид: 0.’ 1101 и 1,’ОШ * В 32-разрядной сетке машины второе число будет размещено, как показано на рис. 2.1, а.

Целое положительное двоичное число +10110111 при фиксиро­ вании запятой справа в той же разрядной сетке будет располагать­ ся, как изображено на рис. 2 .1, б.

Для полулогарифмической формы представления помимо раз­ ряда для изображения знака мантиссы необходим знаковый раз-

Знак

"П I I I I I I I I

 

0

г

а

 

 

 

 

1

0

1 1 1

0

0

 

0

 

0

 

 

 

 

 

 

0

1 1 I I

1 I

 

I

 

I

 

I

 

I

Рис. 2.1. Примеры машинных ко­

1 2 3 4 5 6 7 3 9

 

 

31

дов дробного (а)

и целого (б)

Знак

 

 

 

 

а

 

 

 

 

 

чисел,

представленных в естест­

 

 

 

 

 

 

 

 

 

 

 

венной форме со знаками

 

т

г т

'I----------1

I

 

I

I

 

'I

"I Г

I I

 

 

 

 

0

О 0

• *

0 10

1 1 0

111

 

 

 

 

—1,-1. I___ I

I

 

I

 

I

 

I

I I

I I

 

 

 

 

О 1

г

23 24 25262728293031

 

 

 

 

ряд для изображения знака порядка.

Например,

двоичные числа

+ 0,1011

10_ои и 0,1001

10+|01

в полулогарифмической

форме с

закодированными знаками

в общем случае будут

иметь

соответ­

ственно вид:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Знаки чисел (мантисс)

 

Порядки

Мантиссы

 

 

 

 

0.

 

 

 

 

 

 

 

1 .0 1 1

’1 0 1 1

 

 

 

 

1.

 

 

 

 

 

 

 

0 .1 0 1

’10 0 1

 

 

 

 

4

 

 

 

 

 

 

 

т

 

 

 

 

 

 

 

\

 

 

 

 

 

 

 

 

 

 

Знаковые разряды

Для удобства выполнения операций над порядками они обычно кодируются не так, как показано в данном примере. Если для раз­ мещения кодов порядков р в разрядной сетке отводится <7 + 1 раз­ рядов, то отрицательные и положительные порядки представля­ ются увеличенными на 2«, т. е. р * = р + 2 ч . В результате порядки в диапазоне

1

( 2. 11)

оказываются выраженными в виде

j

j

0 < / ? " < 27+1 — 1

(2.12)

(на числовой оси смещенными на вправо).

 

Предположим, что <7+ 1 = 7 . Тогда

все порядки в диапазоне от

—1000000 до +0111111 (—64=+63)

в смещенном

виде согласно

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

41

(2 .12) будут кодироваться положительными числами от 0 0 0 0 0 0 0 ’ до 111111Г. Коды отрицательных порядков будут иметь цифру 0 в старшем разряде 7-разрядного двоичного кода, положительных — цифру 1; нулевому порядку будет соответствовать код 1000000’. Во

избежание путаницы

смещенный порядок называют х а р а к т е ­

р и с т и к о й числа.

Так как все характеристики представляются

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

Сучетом вышеизложенного число, например, —32756 в форме

сплавающей запятой в виде 32-разрядного двоичного кода может быть представлено, как показано на рис. 2.2. Мантисса изображе-

днак

числа

I

I I I I I I Г*т | I | I | I I Г"1 I Г-| I г-----

1 1 0 0 0 1 0 1 0 1 1 1 11 11 11 1 1 0 1 0 0 • • • 0

I i i i i i i i i i

I I 1

i i i I i i i 11. i l

31

0 1 2 3 4 5 6 7 8

11 12

1516

1920

2324

Характеристика

 

Мантисса

 

 

Рис. 2.2. Пример машинного кода числа

в форме с плаваю,

 

щей запятой

 

 

 

на нормализованной в шестнадцатеричной системе счисления, ха­ рактеристика р* = 5+ 26. Весь код на рис. 2.2 в шестнадцатеричной системе счисления можно записать как С5 7FF400.

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

образования

прямого кода [Л]цр

правильной двоичной

дроби

Л = ± 0 ,

имеет вид

 

 

I

А,

если А ^ 0,

(2.13)

 

И ]пр = )1 _

д

если A < Q

Например:

А= +0,101011 [Л]пр = 0’.10Ю11;

Л= -0,011011 -> [Л]пр= 1 — (—0,011011) = Г.ОПОИ.

Прямой код [Лц]пр целого числа Al1 = ат_^ат_2. . .а ха0 полу­

чается по формуле

 

 

| я (0) -ф Лц,

если Лц

0,

1 10я-1 - Л ц,

если Лц<

(2.14)

0,

где 10 — два; я — количество позиций в разрядной сетке;

42

« {0} — «-разрядный код нуля;

 

Лц< 1 0 л-1- 1 , т. е. / « < « - 1.

 

Например: в разрядной сетке с « = 5

 

Л“ =

+101 [Лц]пр =

00000 +

101 = 0.0101’;

Лц =

—110-^- [Лц]пр=

104 — (— 110) = 1.0110’.

Из (2ЛЗ) и (2.14)

следует, что в обоих случаях + 0 и —0 в прямом

коде изображаются как

 

 

Л =

+ 0 ,0 0 0 ... 0

[Л]пр =

О’.ООО... 0,

Л =

- 0 ,0 0 0 ... 0

[Л]пр =

l’.OOO... 0

и

 

 

 

 

л ц =

+ 0 0 0 0 ... О

[Лц]пр =

0.000... О’,

л ц =

- 0 0 0 0 ... О

[лц]пр =

1.0 0 0 ... О’.

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

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

Формулы для образования дополнительного и обратного кодов отрицательных двоичных чисел |Л |< 1 имеют вид

Дополнительный код

Обратный код

[Л]доп = 10 +

Л,

[Л ]обр = Ю -10 -г + Д (2.15)

где Л = — 0, а - ^ - г й - з ...

а_/,

 

10 — два.

 

 

Например: А = —0,1011, тогда

И ]доп = Ю + (-0,1011) = Г.0101; [Л]о6р = 10 - 0,0001 +

+ (-0,1011) = 1’.0Ю0.

Для целых двоичных чисел, представляемых в «-разрядной сет­ ке, дополнения берутся соответственно до 10п или 10"—1. Поэтому для целых чисел

Дополнительный код

Обратный код

 

[Дц]доп=10', + Дц>

[Лц]обр= 1 0 п- 1 + Л ц,

(2.16)

где 10 — два.

43

Например: Лц=1011, п — 6, тогда

И д о п =

1000000 + ( - 1 0 1 1 ) = 1.10101'

и

 

и ц]обр =

п и п + ( - 1 0 1 1 ) = 1.1оюо’.

Таким образом, правила образования дополнительного и обрат­ ного кодов состоят в следующем:

— для образования дополнительного кода отрицательного двоичного числа необходимо в знаковом разряде поставить

единицу *, во всех цифровых

разрядах единицы заменить нуля­

ми, а нули — единицами, и к

младшему разряду прибавить еди­

ницу;

 

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

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

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

нахождения дополнительного и обратного кодов.

>

Замена вычитания двоичных чисел А\—Аг (или

в прямых ко­

дах Hi]np—ИгЬр) сложением с дополнениями

[Лi]np + [—Л2]доп

или [Лi]np+(—Лг]обр позволяет оперировать со знаковыми разряда­ ми так же, как и с цифровыми. При этом знаковые разряды скла­ дываются так же, как и значащие разряды числа, а перенос из старшего значащего разряда обычным порядком подсуммируется к значению суммы знаковых разрядов. Однако правила учета пе­ реносов (если они возникают) из знакового разряда суммы и, сле­ довательно, получение правильного результата для дополнитель­ ного и обратного кодов различны:

при использовании дополнительного кода единица переноса из знакового разряда не учитывается;

при использовании обратного кода единица переноса из зна­

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

* При переводе из прямого машинного кода эта единица в знаковом разря­ де уже имеется и она сохраняется.

44

Пример 2.4. Сложить с использованием дополнительного и обратного кодов числа At = +0,1011 и Л2 = —0,0101.

Hi]nP=

ОМОН

Milnp =

ОМОН

И 2]доп =

1 М0 1 1

И 2]обр =

1М010

Мх]пр + Иг]доп =

ж О’.ОПО =

\Ajr-Л2]пр. Циклический

O’.OIOI

 

Т

перенос

— > +1

 

 

 

Единица переноса

1]пр Н~ [^2]обр — О’.ОПО — [j4j—^ г]пр"

из знакового разряда

 

 

не учитывается

 

 

Так как Л i> Л2, то результат в прямом коде

[Л] — Ла]пр = О’.ОНО, откуда At — ,42 =+0,0110.

Пример 2.5. Сложить с использованием дополнительного и обратного кодов

числа Л1= + 0 , 0 1 1 1 и Л2 = 0 ,1 0 1 1 .

И .]пр=

0 ’.0 1 1 1

И ,]пр=

 

1доп =

Г-0 101

[Л2]обр =

+

0 ’ .0 1 1 1

1 ’.0 1 0 0

[■^1]пр+[-^2]доп= 1M100= [j4i — >12]доп- Hi]np+[-^2]o6p= l ’-lOl 1 = [j4t—Л2]06р.

Так как Ai<A2, то результат получился соответственно в дополнительном и

обратном кодах. Пользуясь правилами преобразования в прямой код, находим И ,-Л 2]„р=Г.0Ю0 и Л,—Л2= —0,0100.

Выполняя операции над числами |Л |< 1 с использованием об­ ратного кода необходимо помнить, что слагаемые должны иметь одинаковое количество цифровых разрядов. Если это требование не выполняется, то результат сложения с применением обратных кодо% оказывается искаженным. В связи с этим до перевода сла­ гаемых в обратные коды необходимо выравнять количества цифро­ вых разрядов их прямых кодов. Выравнивание производится при­ писыванием справа соответствующего количества нулей к прямому коду слагаемого, имеющего меньшее количество разрядов. В маши­ нах это условие выполняется автоматически.

При использовании обратного кода следует иметь также в виду, что в этом случае при алгебраическом сложении всегда возникает отрицательный нуль Г.111...1, соответствующий —0,000... 0. То же самое имеет, место и при действиях с целыми числами. Это об­ стоятельство необходимо учитывать, например, при сравнении с положительным нулем, не являющимся результатом арифметиче­ ских операций.

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

45

Пример 2.6. Сложить с использованием дополнительного и обратного кодов

+1011011 и ^ 2 = —111 1.

К] пр= 0.101101Г

+К ] доп = + Ы110001’

К ] пр + К Ц]доп= Ж0.1001100’ = [Л“-Л 2ц] пр.

К ] „ р =

0 .1 0 1 1 0 1 Г

К ц]обр= + 1 .1 1 1 0 0 0 0 -

—0.1001011-

I-------

>+ 1

И"]пр + И ]о б Р =

0 .1 0 0 1 1 0 0 - = [Л«—Л^]пр;

Л“ — Л" =

+1001100.

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

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

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

Выход результата операции за допустимые пределы представ­ ления чисел приведет к ошибкам в последующих вычислениях, если не принять надлежащие меры. Поэтому случаи переполнения дол­ жны немедленно обнаруживаться. Для этого в машинах приме­ няют так называемые м о д и ф и ц и р о в а н н ы е прямой, допол­ нительный и обратный коды, которые отличаются от рассмотрен­ ных. выше простых кодов тем, что знаки чисел изображаются не одним разрядом, а двумя. Например, для Л==—0,1011 модифици­ рованные коды будут иметь вид [Л]“р= 11.’1011; [Д]д0П= ll.’OlOl

[Л]«р = 1Г.0100, а для А = +0,0110 — [Л]“р = 00’.0110.

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

Признаком переполнения разрядной сетки в модифицирован­ ных кодах служит либо появление в знаковом разряде суммы со-

46

четаний цифр 01 при сложении полбжйтельных чисел ( п о л о ж и ­

т е л ь н о е п е р е п о л н е н и е ) ,

либо 10 при сложении отрица­

тельных чисел ( о т р и ц а т е л ь н о е

п е р е п о л н е н и е ) . Посколь­

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

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

Тетрады

—г-

^

1

к

1

-1-----

 

 

 

<\_

 

л

3н

1

 

2

3

 

 

 

1 1 1 1

 

..1 1 1 1 1 1 1 - 1_

__ i4 i 1

0 1 2 3 4 5 6 7 8 9

1213

 

Л

 

 

 

 

а

 

 

 

 

 

Тетрады

 

 

 

 

О 1 2 3 4

 

 

 

 

 

 

Рис.

2.3.

Примеры

размещения

в

разрядной

сетке двоично-десятичных чисел со знаками:

о — с

одноразрядным

кодом

знака; б — с

четырехраз­

 

 

 

рядным кодом знака

 

 

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

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

■В многопрограммных ЦВМ с десятичной арифметикой находит применение кодирование знаков 4-разрядньтми двоичными кодами. В этом случае код знака десятичного числа в двоично-десятичном изображении обычно размещается справа, как показано на

рис. 2.3,6. Знаки «+ » и «—», например,

кодируются следующим

образом:

 

 

 

1010 ------------1101h ----- ;

1011

-

1110 —

h;

1100-----h

1111 — +.

47

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

 

 

 

Т а б л и ц а 2.5

 

Естественный

Код с избытком

Код с избытком

Десятичная цифра

двоично-десятичный

3

6

 

код

 

 

 

0

0 0 0 0

ООН

ОНО

1

0 0 0 1

0 1 0 0

0 1 1 1

2

0 0 1 0

0 1 0 1

1 0 0 0

3

ООП

ОНО

100 1

4

0 1 0 0

0 1 1 1

1 0 1 0

5

0 1 0 1

1 0 0 0

1 0 1 1

6

ОНО

1001

1 1 0 0

7

0 1 1 1

1 0 1 0

1 1 0 1

8

1 0 0 0

101 1

1 1 1 0

9

1001

1 1 0 0

1 1 1 1

Если при сложении десятичных цифр получается результат, больший десяти, то необходимо единицу переноса передать в сле­ дующий десятичный разряд. Наиболее просто это можно сделать, представив либо цифры обоих слагаемых в коде с избытком три, либо цифры одного из слагаемых в коде с избытком шесть (см. табл. 2.5). Если при выполнении сложения с применением таких кодов возникает перенос в следующую тетраду, то результат в дан­ ном разряде получается в естественном двоично-десятичном коде. Если в каких-либо тетрадах переносы не возникли, то для получе­ ния истинного результата из кодов этих тетрад необходимо вы­ честь избытки 6. Вычитание числа 6 (ОНО) можно заменить при­ бавлением его дополнения до 24, т. е. 1010.

Пример 2.7. Сложить числа 7 и 18.

Двоично-десятичные коды этих чисел, представленные одинаковым количе­ ством двоичных разрядов, будут иметь вид 0000 0111 и 0001 1000, Представим первое число в коде с избытком 6 :

0000 0111

ОНО оно ОНО 1101

48

В результате сложения этого кода со вторым числом получим

ОНО

1101

+ 0001

1000

1000 0101

1J

Так как возник перенос п только из первой тетрады, то необходимо скорректи* ровать вторую тетраду, вычтя из нее 6 (прибавив по mod 16 дополнение 1 0 1 0 ). Таким образом, истинный результат

1000 0101

+1010 0000

Ж0010 0101,

т. е. равен десятичному числу 25.

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

§2.4. Арифметические операции над двоичными числами

сфиксированной запятой

Чи с л а , у ч а с т в у ю щ и е в о п е р а ц и я х , — п р а в и л ь н ы е д р о б и

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

Сложение и вычитание. При выполнении этих операций по командам СЛОЖИТЬ и ВЫЧЕСТЬ операнды из запоминающего устройства посылаются в арифметическое устройство. Чтобы све­ сти процесс выполнения команды ВЫЧЕСТЬ к алгебраическому сложению, знак кода вычитаемого, поступающего в арифметиче-

3-821

49

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