Умножение в дополнительных кодах с применением коррекции

П.С. Довгий, В.И. Поляков

АРИФМЕТИЧЕСКИЕ ОСНОВЫ ЭВМ

Учебно-методическое пособие

По выполнению домашних заданий

По дисциплине

"Дискретная математика"

Санкт- Петербург

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ, МЕХАНИКИ И ОПТИКИ

Довгий П.С., Поляков В.И.

АРИФМЕТИЧЕСКИЕ ОСНОВЫ ЭВМ

Учебно-методическое пособие

по выполнению домашних заданий по дисциплине

"Дискретная математика"

Санкт- Петербург

Довгий П.С., Поляков В.И. Арифметические основы ЭВМ. Учебно-методическое пособие по выполнению домашних заданий по дисциплине "Дискретная математика". – СПб: СПбГУ ИТМО, 2010. – 56 с.

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

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

Пособие предназначено для использования в учебном процессе при подготовке бакалавров и магистров по направлению 230100.68 “ИНФОРМАТИКА И ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА”, а также инженеров по специальности 230101.65 “ВЫЧИСЛИТЕЛЬНЫЕ МАШИНЫ, КОМПЛЕКСЫ, СИСТЕМЫ И СЕТИ” и аспирантов.

Рекомендовано Советом факультета Компьютерных технологий и управления 15 сентября 2009 г., протокол №2

СПбГУ ИТМО стал победителем конкурса инновационных образовательных программ вузов России на 2007-2008 годы и успешно реализовал инновационную образовательную программу «Инновационная система подготовки специалистов нового поколения в области информационных и оптических технологий», что позволило выйти на качественно новый уровень подготовки выпускников и удовлетворять возрастающий спрос на специалистов в информационной, оптической и других высокотехнологичных отраслях науки. Реализация этой программы создала основу формирования программы дальнейшего развития вуза до 2015 года, включая внедрение современной модели образования.

Ó Санкт-Петербургский государственный университет информационных технологий, механики и оптики, 2010

Ó П.С.Довгий, В.И. Поляков, 2010

ВВЕДЕНИЕ

История систем счисления восходит к античному периоду развития математики. Высшим достижением древней арифметики является открытие позиционного принципа представления чисел. Первой из известных систем счисления, основанных на позиционном принципе, была вавилонская 60-ричная система счисления, возникшая в Древнем Вавилоне примерно во 2-м тысячелетии до новой эры.

В обыденной жизни для кодирования числовой информации используется десятичная система счисления с основанием 10. Предшественницей десятичной системы счисления является Индусская десятичная система, возникшая примерно в 8-м столетии нашей эры. Известный французский математик Лаплас выразил свое восхищение позиционным принципом и десятичной системой в следующих словах: "Мысль выражать все числа 9 знаками, придавая им, кроме значения по форме, еще значение по месту, настолько проста, что именно из-за этой простоты трудно понять, насколько она удивительна…".

В цифровых устройствах обработки информации используется двоичная система счисления с основанием 2. Современная двоичная система была полностью описана Лейбницом в XVII веке в работе «Explication de l’Arithmétique Binaire». В системе счисления Лейбница были использованы цифры 0 и 1, как и в современной двоичной системе. В 1854 английский математик Джордж Буль опубликовал знаковую работу «An investigation of the laws of thougt» ("Исследование законов мышления"), описывающую алгебраические системы применительно к логике, которая в настоящее время известна как Булева алгебра или алгебра логики. Его логическому исчислению было суждено сыграть важную роль в разработке современных цифровых электронных схем. В 1937 Клод Шеннон представил в Массачусетском технологическом институте кандидатскую диссертацию «Символический анализ релейных и переключательных схем», в которой булева алгебра и двоичная арифметика были использованы применительно к электронным реле и переключателям. На диссертации Шеннона по существу основана вся современная цифровая техника. В ноябре 1937 Джордж Штибиц создал на базе реле компьютер «Model K», который выполнял двоичное сложение. В конце 1938 Bell Labs развернула исследовательскую программу во главе со Штибицом. Созданный под его руководством компьютер, завершённый 8 января 1940, умел выполнять операции с комплексными числами. Во время демонстрации на конференции American Mathematical Society в Дармутском колледже 11 сентября 1940 Штибиц продемонстрировал возможность посылки команд удалённому калькулятору комплексных чисел по телефонной линии с использованием телетайпа. Это была первая попытка использования удалённой вычислительной машины посредством телефонной линии. Среди участников конференции были Джон фон Нейман (праотец современной архитектуры компьютеров, Джон Мокли (один из создателей первого в мире электронного компьютера ENIAC) и Норберт Винер (основоположник кибернетики и теории искусственного интеллекта), впоследствии писавшие об этом в своих мемуарах.

Задание 1 Представление ЦЕЛЫХ чисел и чисел с плавающей запятой в РАЗЛИЧНЫХ форматах

1. Заданное число А представить в двоично-кодированной форме:

а) в упакованном формате (BCD);

б) в неупакованном формате (ASCII).

2. Заданные число А и число –A представить в виде целого числа в форме с фиксированной запятой в формате WORD (16-битный формат).

3. Заданные числа A и B представить в форме с плавающей запятой в формате Ф1.

4. Заданные числа A и B представить в форме с плавающей запятой в формате Ф2.

5. Заданные числа A и B представить в форме с плавающей запятой в формате Ф3.

6. Найти значения чисел Y и Z по их заданным шестнадцатеричным представлениям R и S в форме с плавающей запятой в формате Ф1.

7. Найти значения чисел V и W по их заданным шестнадцатеричным представлениям R и S в форме с плавающей запятой в формате Ф2.

8. Найти значения чисел T и Q по их заданным шестнадцатеричным представлениям R и S в форме с плавающей запятой в формате Ф3.

При выполнении п.п. 3–5 задания для дробного числа B в целях увеличения точности его представления произвести симметричное округление мантиссы (округление к ближайшему).

Варианты задания приведены в табл.1 (десятичные числа A и B) и в табл.2 (шестнадцатеричные числа R и S) приложения 1.

1.1. Представление чисел В ДВОИЧНО-КОДИРОВАННОЙ ФОРМЕ

Десятичные числа представляются в ЭВМ в двоично-кодированной форме, при этом каждая десятичная цифра кодируется с помощью четверки двоичных разрядов (двоичной тетрады):

десятичная цифра двоичная тетрада   десятичная цифра двоичная тетрада
 
 
 
 
 

Десятичные числа представляются с использованием либо упакованного (РАСK), либо неупакованного (UNPACK) формата.

В упакованном формате в каждом байте числа кодируются две цифры, в неупакованном – одна.

Для кодирования десятичных цифр используется в основном естественный двоичный код, обычно называемый кодом “8421” (по весам разрядов двоичной тетрады).

Частным случаем неупакованного формата является код ASCII (American Standard Code for Interchangе Information), используемый в ПК. В этом коде десятичная цифра представляется в младшей тетраде байта, а старшая тетрада принимает стандартное значение 0011.

Упакованный формат обычно называют BCD-форматом (или BCD-числом – Binary Coded Decimal).

Пример: А=395.

a) в упакованном формате

0000 0011   1001 0101
  9 5

б) В ASCII-формате код цифры помещается в младшую тетраду байта (в младший полубайт). Старшая тетрада байта имеет стандартное значение 0011.

0011.0011 0011.1001 0011.0101

3 9 5

1.2. Представление целых чисел в форме с фиксированной запятой

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

Пример. A = 250

1.2.1. Заданное десятичное число A переводится в двоичную систему счисления:

(250)10 = (11111010)2.

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

В шестнадцатеричной системе счисления: (250)10 = (FA)16.

Дополнительный код положительного числа совпадает с его прямым кодом.

1.2.2. Для представления отрицательного числа в дополнительном коде производится инвертирование цифровых разрядов прямого кода (получение обратного кода числа) с добавлением единицы в младший разряд. В знаковый разряд числа заносится единица (знак “–”).

[–A]пр = 1.000 0000 1111 1010 – прямой код,

[–A]об = 1.111 1111 0000 0101 – обратный код,

+ 1

[–A]доп = 1.111 1111 0000 0110 – дополнительный код.

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

Полученное представление числа в дополнительном коде записывается в формате:

1.3. ОСОБЕННОСТИ ПредставлениЯ чисел

с плавающей запятой

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

,

где signA – знак числа А (0 – для положительных, 1 – для отрицательных),

МА – мантисса числа А,

S – основание порядка,

РА – порядок числа А.

Основными особенностями представления чисел с плавающей запятой в современных ЭВМ являются:

1. В качестве основания порядка в современных ЭВМ используются S=2 (двоичное представление мантиссы) и S=16 (шестнадцатеричное представление мантиссы). Основание 2 используется персональных компьютерах, а 16 – в компьютерах типа Мэйн Фрейм. Порядок числа представляет собой целое число со знаком.

2. Преимущественное использование так называемых нормализованных чисел.

Число с плавающей запятой называется нормализованным, если старшая цифра его мантиссы является значащей (не ноль).

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

ХА = РА + d,

где ХА – характеристика числа А, d– смещение порядка.

Существует 2 подхода к выбору величины смещения:

1) Величина смещения равна весу старшего разряда смещенного порядка (характеристики).

2) Величина смещения равна весу старшего разряда смещения порядка, уменьшенного на 1.

Первый подход используется в основном в компьютерах типа Мэйн Фрейм, второй в ПК.

В дальнейшем формат, используемый в компьютерах типа Мэйн Фрейм будем называть форматом Ф1; формат, который раньше использовался в ЭВМ семейства VAX – форматом Ф2 (представление чисел в этом формате логически понятно, и он приводится исключительно в учебных целях); формат, используемый в персональных компьютерах (стандарт IEEE-754) – форматом Ф3. Данный стандарт разработан ассоциацией IEEE (Institute of Electrical and Electronics Engineers) и используется для представления действительных чисел (чисел с плавающей точкой) в двоичном коде. Это самый используемый стандарт для вычислений с плавающей точкой, он используется многими микропроцессорами и логическими устройствами, а также программными средствами.

Полное название стандарта в ассоциации IEEE: IEEE Standard for Binary Floating-Point Arithmetic (IEEE стандарт для двоичной арифметики с плавающей точкой.В августе 2008 года ассоциация IEEE выпустила стандарт ANSI/IEEE Std 754-2008 (ANSI: American National Standards Institute– Американский национальный институт стандартов).

4. Формат чисел может быть коротким (32 бита), длинным (64 бита) и расширенным (128 бит). В домашнем задании используется только короткий (32 бита) формат.

1.4. Представление чисел с плавающей запятой

В ФОРМАТЕ Ф1

Для представления числа в форме с плавающей запятой определяются его мантисса и порядок. В связи с тем, что в формате Ф1 в качестве основания порядка используется число 16, для представления мантиссы удобнее использовать исходное число в шестнадцатеричной системе счисления. Для определения мантиссы и порядка производится перемещение запятой в шестнадцатеричном числе влево или вправо таким образом, чтобы она установилась перед старшей значащей цифрой. Полученное дробное число представляет мантиссу числа с плавающей запятой. Модуль порядка определяется количеством шестнадцатеричных цифр, на которое была перенесена запятая. Знак порядка определяется направлением, в котором переносилась запятая. При перенесении запятой влево порядок положителен, вправо – отрицателен.

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

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

По значению порядка определяется характеристика (смещенный порядок) числа путем сложения порядка со смещением (для формата Ф1 величина смещения равна 64), после чего двоичные значения знака, характеристики и мантиссы числа записываются в формат.

1.4.1. Представим в формате Ф1 число А=250.

Для определения мантиссы и порядка числа A в его шестнадцатеричном представлении запятая переносится влево на две шестнадцатеричные цифры:

Характеристика числа A: XA = PA + 64 = (66)10 = (1000010)2.

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

При записи числа в формате шестнадцатеричная мантисса представляется в двоичной системе счисления. Младшие разряды мантиссы заполняются нулями. Представление числа A в формате Ф1 имеет вид:

Старшая тетрада мантиссы нормализованного числа может содержать от одного до трех старших нулей. Например, число

(1E8,5)16 = (0,1E85)16 ´ 163 представляется в виде

и содержит в старшей тетраде мантиссы три нуля.

1.4.2. Представим в формате Ф1 число B = 0,0025. Переведем число В в шестнадцатеричную систему счисления. При переводе необходимо получить шесть цифр, не считая старших нулей.

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

B = (0,0025)10 = (0,00A3D70A3)16.

Дополнительная цифра числа, равная (3)16 = (0011)2, содержит в старшем двоичном разряде ноль и поэтому не изменяет значения предыдущей цифры, равной (A)16, при округлении числа.

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

Для определения мантиссы и порядка числа B запятая в его шестнадцатеричном представлении переносится вправо на две цифры, что определяет порядок числа, равный (–2):

B = (0,00A3D70A)16 = (0,A3D70A)16 ´ 16–2.

Характеристика числа B: XB = PB + 64 = –2 + 64 = 62 = (0111110)2.

Для получения двоичного значения характеристики, соответствующей отрицательному порядку, можно использовать следующее правило: в старший разряд характеристики записывается ноль, а в шести ее младших разрядах представляется дополнительный код порядка (дополнение до 64)

000010 – прямой код порядка,

111110 – дополнительный код порядка,

0111110 – характеристика.

Представление числа B в формате Ф1 имеет вид:

1.5. Представление чисел с плавающей запятой

в ФОРМАТЕ Ф2

Для представления чисел в форме с плавающей запятой в формате Ф2 используется их двоичная запись, так как в этом формате основание порядка S = 2. Для определения мантиссы и порядка запятая переносится влево или вправо в двоичном числе до установления перед старшей единицей. Модуль порядка определяется количеством двоичных цифр (разрядов), на которое переносится запятая.

Характеристика (смещенный порядок) определяется путем сложения порядка со смещением, величина которого в формате Ф2 равна 128 (в отличие от формата Ф1 в формате Ф2 под характеристику отводится 8 двоичных разрядов).

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

1.5.1. Определение мантиссы и порядка числа A:

Характеристика числа A:

Число A представляется в формате Ф2 в виде

1.5.2. Для определения мантиссы и порядка числа B запятая в его двоичном представлении переносится вправо на 8 двоичных разрядов, что определяет порядок числа, равный (–8).

Характеристика числа B:

Представление числа Bв формате Ф2 имеет вид:

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

Например, шестнадцатеричная мантисса (0,1A90BC7)16 будет представлена в формате Ф1 в виде

а в формате Ф2 - в виде

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

1.6. Представление чисел с плавающей запятой

в ФОРМАТЕ Ф3

Представление чисел в формате Ф3 во многом аналогично их представлению в формате Ф2. Основными отличиями являются:

1) величина смещения равна 127 (в формате Ф2 – 128);

2) старшая единица мантиссы нормализованного числа является единицей целой части мантиссы, т.е. запятая в мантиссе фиксируется после старшей единицы (в формате Ф2 запятая в мантиссе фиксируется перед старшей единицей).

1.6.1. Определение мантиссы и порядка числа A:

Смещенный порядок числа А:

XA = PA + 127 = 134 = (10000110)2.

Число A представляется в формате Ф3 в виде

Следует отметить, что:

а) в отличие от представления чисел в форматах Ф1 и Ф2 в Ф3 не принято называть смещенный порядок характеристикой;

б) по аналогии с представлением чисел в формате Ф2 в Ф3 используется скрытый разряд (единица целой части мантиссы в формате не представляется);

в) представление числа в формате Ф3 отличается от представления в Ф2 только значением смещенного порядка (его величина уменьшается на 2).

1.6.2. Определение мантиссы и порядка числа В:

Смещенный порядок числа В:

XB = PB + 127 = 118 = (01110110)2.

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

0001001 – прямой код порядка,

1110110 – обратный код порядка,

01110110 – смещенный порядок.

Представление числа B в формате Ф3 имеет вид:

1.7. Определение значения числа с плавающей запятой по его представлению в формате Ф1

R= C318FC00, S = 3E600000

1.6.1. Для определения значения числа Yпроизводится наложение его шестнадцатеричного представления R на разрядную сетку формата Ф1:

Из этого представления видно, что число Y – отрицательное (в знаковом разряде числа – единица).

Определим порядок числа Y по его характеристике:

PY = XY – 64 = 3.

Представим число Yс помощью мантиссы и порядка:

Y = – (0,18FC)16 ´ 163.

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

Y= – (18F,C)16.

Переведем число Y из шестнадцатеричной в десятичную систему счисления с использованием весов разрядов:

Y= – (1 ´ 162 + 8 ´ 161 + 15 ´ 160 + 12 ´ 16–1) =

= – (256 + 128 +15 + 0,75) = –399,75.

1.7.2. Для определения значения числа Zпроизводится наложение его шестнадцатеричного представления S на разрядную сетку:

Порядок числа Z:

PZ = XZ – 64 = 62 – 64 = –2.

Значение числа Z:

Z= (0,6)16 ´ 16–2 = (0,006)16 = 6/163 = 6/212 = 3/211 =

= (3/2) ´ (1/210) = (3/2) ´ (1/1024) » 1,5 ´ 10-3.

При переводе дробных чисел из двоичной системы счисления в десятичную можно считать: 2-10 » 10 -3.

1.8. Определение значения числа с плавающей запятой по его представлению в формате Ф2

1.8.1. Представление числа V в формате Ф2 имеет вид:

Порядок числа V:

PV = XV – 128 = 134 – 128 = 6.

Значение числа V в нормальной форме:

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

Для приведения числа Vк естественной форме запятая в его мантиссе переносятся вправо на 6 двоичных разрядов:

V= – (100110,00111111)2.

Перевод числа Vиз двоичной системы в десятичную:

а) целая часть:

(100110)2

= 25 + 22 + 21 = 32 + 4 + 2 = 38;

б) дробная часть:

первый способ перевода:

(0,00111111)2 = 2-3 + 2-4 + 2-5 + 2-6 + 2-7 + 2-8 =

= 1/8 + 1/16 + 1/32 + 1/64 + 1/128 + 1/256 = 63/256 » 0,246;

второй способ перевода:

(0,00111111)2 = (111111)2 ´ 2-8 = 63 ´ (1/256) » 0,246;

третий способ перевода:

(0,0011111)2 = (0,01)2 – (0,00000001)2 = 1/4 – 1/256 »

» 0,25 – 0,004 = 0,246.

Значение числа V:

V » –38,246.

1.8.2. Представление числа Wв формате:

Порядок числа W:

PW = XW – 128 = 124 – 128 = –4.

Число W в нормальной форме:

W = (0,111)2 ´ 2–4.

Число W в естественной форме получается переносом запятой в мантиссе влево на четыре двоичных разряда:

W = (0,0000111)2.

Значение числа W:

W= (0,0000111)2 = (111)2 ´ 2–7 = 7 / 128 » 0,0547.

1.9. Определение значения числа с Плавающей запятой по его представлению в формате Ф3

1.9.1. Представление числа Т в формате Ф3 имеет тот же вид, что и для числа V в формате Ф2 (п. 1.8.1).

Порядок числа Т:

PT = XT – 127 = 134 – 127 = 7.

Значение числа Тв двоичной системе счисления:

Перевод числа Тиз двоичной системы счисления в десятичную:

а) целая часть:

(10011000)2 = 27 + 24 + 23 = 128 + 16 + 8 = 152.

б) дробная часть:

(0,111111)2 = 1 – (0,000001)2 = 1 – 1 / 64 » 0,984.

Значение числа T:

Т» –152,984.

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

1.9.2. Представление числа Q в формате Ф3 имеет тот же вид, что и для числа в Ф2 (п.1.8.2.).

Порядок числа Q:

PQ = XQ – 127 = 124 – 127 = –3.

Значение числа Q:

Q= (1,11)2 ´ 2-3 = (0,00111)2 = (111)2 ´ 2-5 = 7 / 32 » 0,219.

Задание 2 Сложение ЦЕЛЫХ чисел

Сложение целых чисел выполняется в байтном формате.

1. Для заданных чисел А и В выполнить операцию знакового сложения со всеми комбинациями знаков операндов (4 примера).

Для каждого примера:

а) Проставить межразрядные переносы, возникающие при сложении.

б) Дать знаковую интерпретацию операндов и результата. При получении отрицательного результата предварительно преобразовать его из дополнительного кода в прямой.

в) Дать беззнаковую интерпретацию операндов и результата. При получении неверного результата пояснить причину его возникновения.

г) Показать значения арифметических флагов для каждого из примеров.

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

3. Сохранив операнд В, подобрать такое значение операнда А, чтобы при сложении положительных операндов имело место переполнение формата, а при сложении отрицательных операндов (таких же по модулю, как и положительных) результат операции был бы корректным. Выполнить два примера, для которых сделать то же, что и в п.1 и дать необходимые пояснения.

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

Арифметические флаги формируются в основном арифметическими командами, определяя результат арифметических операций (точнее, они являются признаками результата). Кроме того, на арифметические флаги оказывают влияние логические команды и команды сдвигов. К арифметическим флагам относятся:

CF – Carry Flag (флаг переноса). В нем фиксируется перенос из старшего разряда при сложении и заем в старший разряд при вычитании. При умножении значение флага CF определяет возможность (CF=0) или невозможность (CF=1) представления результата (произведения) в том же формате, что и сомножители.

С помощью флага переноса фиксируется переполнение при сложении беззнаковых чисел.

PF – Parity Flag – флаг паритета (четности). Он устанавливается при наличии четного числа единиц в младшем байте результата, в противном случае – сбрасывается. Этот флаг используется как аппаратная поддержка контроля по четности (нечетности).

AF – Аuxiliary Carry Flag (флаг вспомогательного переноса). В этом флаге фиксируется межтетрадный перенос при сложении и межтетрадный заем при вычитании. Значение этого флага используется командами десятичной и ASCII-коррекции сложения и вычитания.

ZF – Zero Flag (флаг нуля). Он устанавливается при нулевом результате операции, в противном случае - сбрасывается.

SF – Sign Flag (флаг знака). В него копируется старший (крайний левый) бит результата, интерпретируемый как знак.

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

Варианты заданий приведены в табл. 3 приложения 1.

ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ

ai – значение i –го разряда 1-го слагаемого, bi – значение i –го разряда 2-го слагаемого, pi-1 –перенос из (i-1)-го разряда в i –йразряд, Si – сумма i-го разряда, pi – перенос из i –горазряда в (i+1)-й разряд ai bi pi-1 si pi

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

Напомним, что диапазон представления чисел в байтном формате выглядит следующим образом:

       
   

- целых знаковых: -128 =- 27 ≤ АЦЗН ≤ 27 – 1=127

1.0000000   0.1111111

- целых беззнаковых: 0 ≤ АЦБЗН ≤ 28 – 1 = 255

2.1. А = 57, В = 49

А В
  6 0   6 0
- А - В
  6 0   6 0

1) А>0, В>0

Знаковая Беззнаковая

интерпретация интерпретация

ЗИ БзИ

AПК = 0.0 1 1 1 0 0 1 57 57

ВПК = + 0.0 1 1 0 0 0 1 + 49 + 49

СПК = 0.1 1 0 1 0 1 0 106 106

Установка флагов:

СF = 0 - флаг переноса (отсутствие переноса из старшего разряда);

SF = 0 - флаг знака (положительный результата);

ZF = 0 - флаг нуля (отсутствие нулевого результата);

AF = 0 - флаг дополнительного переноса (отсутствие межтетрадного переноса);

PF = 1 - флаг паритета (число единиц четно);

OF = 0 - флаг переполнения (переполнение для знаковых чисел отсутствует).

2) A<0, B>0

ЗИ БзИ

AДК= 1.1 0 0 0 1 1 1 –57 199

ВПК = + 0.0 1 1 0 0 0 1 + 49 + 49

СДК = 1.1 1 1 1 0 0 0 248

СПК = 1.0 0 0 1 0 0 0 –8

СF = 0; SF = 1; ZF = 0; AF = 0; PF = 0; OF = 0.

3) А>0, В<0

ЗИБзИ

AПК = 0.0 1 1 1 0 0 1 57 57

ВДК = + 1.1 0 0 1 1 1 1 +–49 + 207

СПК = 0.0 0 0 1 0 0 0 8 8?

CF=1; SF=0; ZF=0; AF=1; PF=0; OF=0.

Для БзИ результат неверен вследствие возникающего переноса из старшего разряда. Вес этого переноса составляет 256 (8+256 = 264 = =57+207).

4) А<0, В<0

ЗИБзИ

AДК = 1.1 0 0 0 1 1 1 –57 199

ВДК =+ 1.1 0 0 1 1 1 1 +–49 +207

СДК = 1.0 0 1 0 1 1 0 150 ?

СПК = 1.1 1 0 1 0 1 0 –106

CF=1; SF=1; ZF=0; AF=1; PF=1; OF=0.

Для БзИ результат неверен вследствие возникающего переноса из старшего разряда. Вес этого переноса составляет 256 (150+256 = = 406 = 199+207).

2.2.Правило для подбора операнда В выглядит следующим образом:

А + В > 128, значит 128 – А < В ≤ 127.

А = 57 (неизменно), В = 96 (подбираем)

  6 0   6 0

.

1) А > 0, В > 0

ЗИ БзИ

АПК= 0.0 1 1 1 0 0 1 57 57

ВПК= + 0.1 1 0 0 0 0 0 + 96 + 96

СДК= 1.0 0 1 1 0 0 1 153

СПК= 1.1 1 0 0 1 1 1 -103?

CF = 0; SF = 1; ZF = 0; AF = 0; PF = 1; OF = 1.

Для знакового сложения результат является некорректным вследствие переполнения формата.

О наличии переполнения можно судить по двум фактам:

- Сравнение знаков операндов и результата. Если знаки операндов одинаковы, а знак суммы отличается от них – фиксируется переполнение.

- Сравнение переносов из старшего цифрового разряда в знаковый и из знакового разряда за пределы формата. Переполнение возникает, если один из переносов есть, а второго нет.

2) А< 0, В < 0

ЗИ БзИ

АДК= 1.1 0 0 0 1 1 1 -57 199

ВДК= + 1.0 1 0 0 0 0 0 + -96 + 160

СПК= 0.1 1 0 0 1 1 1 +103? 103?

CF = 1; SF = 0; ZF = 0; AF = 0; PF = 0; OF = 1.

Для ЗИ результат неверен вследствие возникающего переполнения (см. выше), для БзИ результат неверен вследствие возникающего переноса из старшего разряда.

2.3. Значение числаВфиксируем (В = 49), а значениеА определяется в соответствии с условием А + В = 128, по которой при сложении положительных чисел будет фиксироваться переполнение, а при сложении отрицательных - не будет. А = 79.

  6 0   6 0

1) А > 0, B > 0

ЗИ БзИ

А ПК = 0. 1 0 0 1 1 1 1 79 79

В ПК= + 0. 0 1 1 0 0 0 1 + 49 + 49

С ДК= 1. 0 0 0 0 0 0 0 -128? 128

CF = 0; SF = 1; ZF = 0; AF = 1; PF = 0; OF = 1.

Для ЗИ результат неверен вследствие возникающего переполнения (см. выше).

2) A < 0, B < 0

ЗИ БзИ

А ДК= 1. 0 1 1 0 0 0 1 - 79 177

В ДК= +1.1 0 0 1 1 1 1 + - 49 + 207

С ПК= 1. 0 0 0 0 0 0 0 -128 128?

CF = 1; SF = 1; ZF = 0; AF = 1; PF = 0; OF = 0.

Для БзИ результат неверен вследствие возникающего переноса из старшего разряда, результат ЗИ корректен.

Задание 3 Вычитание целых чисел

Вычитание целых знаковых чисел производится в байтном формате.

Выполнить те же пункты, что и в задании 2, применительно к операции вычитания, в пунктах 2 и 3 переполнение имеет место при разных знаках операндов.

Варианты заданий приведены в табл.3 приложения 1.

ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ

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

В каждом разряде вычитание реализуется в соответствии со следующей таблицей:

ai – значение разряда уменьшаемого, bi – значение разряда вычитаемого, zi-1 – значение заема из i-го разряда в (i-1)-й предыдущий младший разряд, r i – значение разности в i-ом разряде, zi – значение заема из предыдущего (i+1)-го старшего разряда в i-й разряд. 3.1.А = 67, В = 51 ai bi zi-1 ri zi

А = (67)10 = (1000011)2

В = (51)10 = (110011)2

1) А > 0, B > 0

ЗИ БзИ

АПК= _ 0.1 0 0 0 0 1 1 _ 67 _ 67

ВПК= 0.0 1 1 0 0 1 15151

СПК= 0.0 0 1 0 0 0 0 16 16

CF = 0; SF = 0; ZF = 0; AF = 0; PF = 0; OF = 0.

2) А < 0, В > 0

ЗИ БзИ

АДК= _ 1.0 1 1 1 1 0 1 _- 67 _189

ВПК= 0.0 1 1 0 0 1 1+5151

СДК= 1.0 0 0 1 0 1 0 138

СПК= 1.1 1 1 0 1 1 0 - 118

CF = 0; SF = 1; ZF = 0; AF = 0; PF = 0; OF = 0.

3) А > 0, B< 0

ЗИ БзИ

АПК= _ 0. 1 0 0 0 0 1 1 _ 67 _ 67

ВДК= 1. 1 0 0 1 1 0 1- 51205

СПК= 0. 1 1 1 0 1 1 0 118 118 ?

CF = 1; SF = 0; ZF = 0; AF = 1; PF = 0; OF = 0.

Для БзИ результат неверен вследствие возникающего заема из разряда за пределами формата.

4) А < 0, B< 0

ЗИ БзИ

АДК= _ 1.0 1 1 1 1 0 1 _ - 67 _ 189

ВДК= 1.1 0 0 1 1 0 1- 51205

СДК= 1.1 1 1 0 0 0 0 240 ?

СПК= 1.0 0 1 0 0 0 0 -16

CF = 1; SF = 1; ZF = 0; AF = 0; PF = 1; OF = 0.

Для БзИ результат неверен вследствие возникающего заема из разряда за пределами формата.

3.2.Правило для подбора операнда В выглядит следующим образом:

А + В > 128, значит 128 – А < В < 127

А = 67 (неизменно), В = 64 (подбираем)

1) А < 0, В> 0

ЗИ БзИ

АДК= _ 1.0 1 1 1 1 0 1 _ - 67 _ 189

ВПК= 0.1 0 0 0 0 0 06464

СПК= 0.1 1 1 1 1 0 1 125? 125

CF = 0; SF = 0; ZF = 0; AF = 0; PF = 1; OF = 1.

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

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

- несовпадение заемов в два старшие разряда (один из них присутствует, а другой нет).

2) А > 0, В < 0

ЗИ БзИ

АПК= _ 0.1 0 0 0 0 1 1 _ 67 _ 67

ВДК= 1.1 0 0 0 0 0 0 - 64192

СДК= 1.0 0 0 0 0 1 1 131 ?

СПК= 1.1 1 1 1 1 0 1 -125?

CF = 1; SF = 1; ZF = 0; AF = 0; PF = 0; OF = 1.

Для ЗИ результат некорректен вследствие возникающего переполнения, для БзИ результат некорректен из-за возникающего переноса из старшего разряда.

3.3. Значение числа В фиксируем (В = 51), а значение А определяется из условия А + В = 128, благодаря которой при вычитании из положительного числа отрицательного будет фиксироваться переполнение, а при вычитании из отрицательного числа положительного не будет. А = 77.

1) А > 0, B < 0

ЗИ БзИ

АПК =_ 0.1 0 0 1 1 0 1 _ 77 _ 77

ВДК = 1.1 0 0 1 1 0 1- 51205

СДК = 1.0 0 0 0 0 0 0 128?

СПК = 1.0 0 0 0 0 0 0 - 128?

CF = 1; SF = 1; ZF = 0; AF = 0; PF = 0; OF = 1.

Результат БзИ некорректен вследствие возникающего заема из разряда за пределами формата; для ЗИ результат некорректен из-за переполнения.

2) А < 0, B > 0

ЗИ БзИ

АДК _ 1.0 1 1 0 0 1 1 _ -77 _ 179

ВПК 0.0 1 1 0 0 1 15151

СДК 1.0 0 0 0 0 0 0 128

СПК 1.0 0 0 0 0 0 0 - 128

CF = 0; SF = 1; ZF = 0; AF = 0; PF = 0; OF = 0.

Результаты ЗИ и БзИ корректны.

Задание 4 Умножение целых чисел

1. В разрядной сетке длиной в один байт (один разряд знаковый и семь – цифровых) выполнить операцию умножения заданных целых чисел A и B со всеми комбинациями знаков, используя метод умножения в дополнительных кодах с применением коррекции. При выполнении операции использовать способ умножения с поразрядным анализом множителя, начиная от его младших разрядов со сдвигом суммы частных произведений (СЧП) вправо. Для представления произведения использовать удвоенную разрядную сетку (16 двоичных разрядов: один – знаковый и 15 – цифровых). Результаты представить в десятичной системе счисления и проверить их правильность.

2. В той же разрядной сетке, что и в п.1, выполнить операцию умножения заданных целых чисел A и B со всеми комбинациями знаков, используя метод умножения в дополнительных кодах без коррекции. Результаты представить в десятичной системе счисления и проверить их правильность.

Варианты заданий приведены в табл.4 приложения 1.

Основные положения. Использование метода умножения в дополнительных кодах базируется на представлении отрицательных операндов и участии их в операции в дополнительном коде. В отличие от метода умножения в прямых кодах не требуется выполнять преобразование отрицательных операндов из дополнительного кода в прямой, а отрицательного результата – из прямого кода в дополнительный. Результат операции получается в коде, зависящем от знака, т.е. положительный – в прямом, а отрицательный – в дополнительном. Знаковые разряды операндов участвуют в операции умножения точно так же, как и цифровые. Это означает, что в сложении с СЧП вступают все разряды множимого, включая знаковый, и в анализе разрядов множителя с целью определения последующих действий над СЧП участвует знаковый разряд, т.е. на него производится умножение, как и на любой цифровой.

Умножение в дополнительных кодах с применением коррекции

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

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

Пример 1. A = 15, B = 13.

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

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

[+A]пр = 0.1111; [–A]доп= 1.0001;

[+B]пр= 0.1101; [–B]доп

Наши рекомендации