Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итоговый УМП1_оконч070206.doc
Скачиваний:
17
Добавлен:
23.11.2019
Размер:
8.8 Mб
Скачать

Операции над машинными кодами чисел

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

Здесь показаны правила сложения двоичных цифр ai, bi одноименных раз­рядов с учетом возможных переносов из предыдущего разряда pi-1.

Подобные таблицы можно было бы построить для любой другой ариф­метической и логической операции (вычитание, умножение и т.д.), но имен­но данные этой таблицы положены в основу выполнения любой операции ЭВМ. Под знак чисел отводится специальный знаковый разряд. Знак «+» кодируется двоичным нулем, а знак «-» - единицей. Действия над прямыми кодами двоичных чисел при выполнении операций создают большие трудно­сти, связанные с необходимостью учета значений знаковых разрядов:

Таблица 1.4

Значения разрядов

двоичных чисел и переноса

а , b и pi-1

Разряд

суммы

Si

Перенос в следующий разряд

Рi

ai

bi

pi-1

0

0

0

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

0

1

1

0

0

1

0

1

0

1

0

1

1

1

0

0

1

1

1

1

1

1

• во-первых, приходится отдельно обрабатывать значащие разряды чисел и разряды знака;

• во-вторых, значение разряда знака влияет на алгоритм выполнения опе­рации (сложение может заменяться вычитанием и наоборот).

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

Сложение (вычитание). Операция вычитания приводится к операции сложения путем преобразования чисел в обратный или дополнительный код. Пусть числа А ≥ 0 и В ≥ 0, тогда операция алгебраического сложения выпол­няется в соответствии с табл. 1.5.

Таблица 1.5

Требуемая операция

Необходимое

преобразование

А+В

А-В

-А+В

-А-В

А+В

А+(-В)

(-А)+В

(-А)+(-В)

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

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

2. Знаковые разряды чисел участвуют в сложении так же, как и значащие.

3. Необходимые преобразования кодов (п.1.2.) производятся с измене­нием знаков чисел. Приписанные незначащие нули изменяют свое значение при преобразованиях по общему правилу.

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

Пример 1.17. Сложить два числа А10=7 и В10=16

А2 = +111;

В2 = +10000.

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

[A2]пк = [A2]oк = [A2]дк = 0.00111;

[В2]пк = [В2]ок = [В2]дк = 0.10000.

Сложение в обратном или дополнительном коде дает один и тот же результат 0.00111

+

0.10000

С (2) = 0.10111

С(10) = +23.

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

Пример 1.18. Сложить два числа А10 =+ 16 и В10= -7 в ОК и ДК.

В соответствии с табл. 1.5 должна быть реализована зависимость А+(-В), в кото­рой второе слагаемое преобразуется с учетом знака

[A2]пк = 0.10000 = 0.10000 [А2]ок = 0.10000 [А2]дк = 0.10000;

[B2]пк = 1.00111 = 1.00111 [В2]ок = 1.11000 [В2]дк = 1.11001.

Сложение в OK Сложение в ДК

2]ок = 0.10000 [A2] = 0.10000

+[В2]ок = 1.11000 +[B2] = 1.11001

1 0.01000 10.01001

+ 1

0.01001

C2 = 0.01001 C2 = 0.01001

C10 = +9 C10 = +9

При сложении чисел в ОК и ДК были получены переносы в знаковый разряд и из знакового разряда. В случае ОК перенос из знакового разряда требует дополнительного прибавления единицы младшего разряда (см.п.4 правил). В случае ДК этот перенос игнорируется.

Пример 1.19. Сложить два числа А10 =- 16 и В10= +7 в ОК и ДК.

В соответствии с табл. 1.5 должна быть реализована зависимость

(-А)+В, в кото­рой первое слагаемое преобразуется с учетом знака

[A2]пк = -10000 = 1.10000 [А2]ок = 1.01111 [А2]дк = 1.10000;

[B2]пк = + 00111= 0.00111 [В2]ок = 0.00111 [В2]дк = 0.00111.

Сложение в OK Сложение в ДК

2]ок = 1.01111 [A2] = 1.10000

+[В2]ок = 0.00111 +[B2] = 0.00111

1.10110 1.10111

При сложении чисел в ОК и ДК были получены отрицательные результаты («1» в знаковом разряде). Для перевода обратного кода отрицательного числа в прямой необходимо инвертировать значащие разряды, а знаковый разряд оставить без изменения. А для перевода дополнительного кода отрицательного числа в прямой код необходимо инвертировать значащие разряды и прибавить единицу к младшему разряда.

т.о. имеем в ПК из ОК 1.01001, а в ПК из ДК 1.01000

+ 1

т.е. [С2]пк = 1.01001 [С2]пк = 1.01001

C10 = -9 C10 = -9

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

Пример 1.20. Умножить два числа А10 = +7 В10 = -5.

Перемножим эти числа, представленные прямыми двоичными кодами, так же, как это делается в десятичной системе.

[A2]п = 0.111 - множимое (операнд 1 – ОП1);

[В2]п = 0.101 - множитель (операнд 2 – ОП2»);

000 - обнуление регистра частичных сумм (РЧС);

+ 111 – мл. разряд ОП2 равен «1», поэтому к РЧС +ОП1;

1 такт  = 111 – результирующее значение РЧС;

 0111 – сдвиг РЧС вправо на один разряд;

2 такт  = 00111 –очередной разряд ОП2=«0», поэтому только сдвиг;

+ 111 - очередной разряд ОП2 равен «1», поэтому к РЧС +ОП1;

3 такт = 100011 - результирующее значение РЧС;

 100011 - сдвиг РЧС вправо на один разряд.

Знак произведения определяется путем сложения по «модулю 2» знаков сомножителей ( 0  0 = 0).

[С2]пк = 0.100011. Таким образом, С10 = + 35.

Нетрудно видеть, что произведение получается путем сложения част­ных произведений, представляющих собой разряды множимого, сдвинутые влево в соответствии с позициями разрядов множителя. Частные произведе­ния, полученные умножением на нуль, игнорируются. Важной особенностью операции умножения n-разрядных сомножителей является увеличение раз­рядности произведения до п+п=2п. Знак произведения формируется путем сложения по модулю "2" знаковых разрядов сомножителей. Возможные переносы из знако­вого разряда игнорируются.

Деление. Операция деления, как и в десятичной арифметике, является обратной операции умножения. Эта операция также приводится к последовательности операций сложения и сдвига.

Отметим, что делимое перед операцией деления должно быть приведено к 2n-разрядной сетке. Только в этом случае при делении на n-разрядный делитель получается n-разрядное частное.

Знак частного формируется также путем сложения по «модулю 2» знаковых разрядов делимого и делителя, как это делалось при умножении.

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

Признаками переполнения являются:

  • наличие переноса из значащих разрядов в знаковый и отсутствие переноса из знакового разряда («положительное» переполнение);

  • наличие переноса из знакового разряда и отсутствие переноса из значащих в знаковый разряд («отрицательное» переполнение).

Пример 1.21. Сложить 2 числа: А=+5 и В=+6 в четырехразрядной сетке (с учетом знакового разряда).

Сложение в OK Сложение в ДК

2]ок = 0.101 [A2] = 0.101

+[В2]ок = 0.110 +[B2] = 0.110

1.011 1.011

C2 = 1.100 C2 = 0.101

C10 = -4 ???(вместо +11)! C10 = -5 ??? (вместо +11)!

Пример 1.22.

Сложить 2 числа: А=-5 и В=-6 в четырехразрядной сетке (с учетом знакового разряда).

Сложение в OK Сложение в ДК

2]ок = 1.010 [A2] = 1.011

+[В2]ок = 1.011 +[B2] = 1.100

10.101 10.111

1

0.110

C2 = 0.110 С2 = 0.111

C10 = +6 ??? (вместо -11)! C10 = +7 ??? (вместо -11)!

Как видно из примеров, при сложении положительных чисел получается отрицательный результат и наоборот. Это объясняется тем, что в трех значащих разрядах максимальное число по модулю может быть семь, а в примерах необходимо записать соответственно С=+11 и С=-11.