Таблица истинности одноразрядного двоичного вычитателя имеет вид:
ai bi zi-1 ri zi
0 0 0 0 0
0 0 1 1 1
0 1 0 1 1
0 1 1 0 1
1 0 0 1 0
1 0 1 0 0
1 1 0 0 0
1 1 1 0 1
a i - i-й разряд уменьшаемого.
b i - i-й разряд вычитаемого.
z i-1 - заем из предыдущего разряда.
z i - заем в последующий разряд.
Примеры: n=6
зн. беззн.
A= -13 1.10011 -13 51
B= -28 1.00100 -28 36
-----------
C= 0.01111 15(15) 15(15)
A= -28 1.00100 -28 36
B= -13 1.10011 -13 51
-----------
C= 1.10001 -15(-15) 49?
Для беззнакового вычитания результат не корректный .Факт получения не корректного числа объясняется вычитанием из меньшего большего то есть результат должен быть отрицательным. О факте получения отрицательного беззнакового результата свидетельствует заем в старший разряд .Этот заем при выполнении вычитания фиксируется во флаге CF. Если от полученного результата взять дополнение то получается правильный результат равный 15. В связи с этим при наличии заема в старший разряд полученный результат можно интерпретировать как беззнаковый дополнительный код.
Переполнение при вычитании и способы его фиксации.
В операции знакового вычитания переполнение может иметь место только при различных знаках операндов.
Пример: n=6
зн. беззн.
A= -13 1.10011 -13 51
B= 24 0.11000 24 24
----------
C= 0.11011 27(-37) 27(27)
A= 24 0.10011 24 24
B= -13 1.10011 -13 51
-----------
C= 1.00101 -27? 37?
По аналогии со знаковым сложением фиксация переполнения при вычитании может реализоваться двумя способами:
1) Анализ знаков операндов и результата. Если знаки операндов разные и знак результата отличен от знака первого операнда то фиксируется переполнение.
2) Сравнение заемов в два старших разряда. Если один и только один из заемов имеет место то фиксируется переполнение. При наличии обоих заемов или их отсутствии результат вычитания является корректным.
В процессорах INTEL реализован второй способ в соответствии с которым осуществляется установка флага OF.
Сложение и вычитание чисел с плавающей запятой.
Пример:
А=0,527*103 Pa=3
B=0,923*102 Pb=2 B=0,0923*103
C=Ma+Mb=0.6193*103
Операция сложения чисел с плавающей запятой реализуется в виде последовательных этапов:
1) Сравнение порядков.
2) Выравнивание порядков.
3) Сложение мантисс.
4) Нормализация результата.
Некоторые этапы могут быть опущены при выполнении соответствующих условий для предыдущих этапов.
1) Сравнение порядков реализуется по средством вычитания. При этом в целях однозначности принято из Ра вычитать Рb при использовании смещенных порядков осуществляется вычитание характеристики как беззнаковых целых чисел. Естественно что разность характеристик имеет тоже значение что и разность порядков если при вычитании характеристик имеет место заем в старший разряд то результат вычитания отрицательный и представлен в дополнительном беззнаковом коде. Для второго этапа необходимо его преобразование в прямой код.
2) Этот этап опускается при равенстве порядков операндов то есть если: Xa-Xb=0
При выполнении этого этапа всегда операнд с меньшим порядком приводится к большему порядку. Это реализуется сдвигом мантиссы вправо на количество разрядов равное |Xa-Xb| .В данной трактовке понятие разряда зависит от основания порядка. Для ЕС ЭВМ при |Xa-Xb|=2 мантисса сдвигается на 2-а шестнадцатеричных разряда то есть на 8 двоичных. При сдвиге мантиссы операнда с меньшим порядком происходит потеря ее младших разрядов ,что приводит к уменьшению точности в общем случае.
При использовании в мантиссе скрытого старшего разряда при выполнении операций над мантиссой он должен быть восстановлен.
При большом модуле разности порядков может оказаться что мантисса с меньшим порядком полностью выйдет за пределы формата. Этот факт можно учесть для ускорения выполнения операций следующим образом на первом этапе |Xa-Xb| сравнивается с числом разрядов мантиссы и если он оказывается больше то операция завершается путем присвоения результату значения операнда с большим порядком.
3) При сложении мантисс на этом этапе необходимо учитывать что мантиссы операндов независимо от их знаков представлены в прямом коде в котором и реализуется их сложение. Для операндов с одинаковыми знаками осуществляется сложение мантисс в прямом коде с присвоением результату знака первого операнда.
Единственный момент возникающий при сложении мантисс в прямых кодах это возможность переполнения. Переполнение если оно имеет место устраняется на четвертом этапе. Для операндов с разными знаками сложение мантисс заменяют их вычитанием в принципе вместо прямого вычитания можно выполнить их сложение с представлением одной мантиссы в дополнительном коде. Факт выбора мантисс уменьшаемого и вычитаемого при прямом их вычитании или выбора мантиссы представляемой в дополнительном коде при их сложении определяется типом ЭВМ и в рамках одного типа зависит от модели. В принципе могут использоваться следующие подходы: a) Уменьшаемым является мантисса положительного операнда. б) Уменьшаемым является мантисса первого операнда. в) Уменьшаемым является мантисса операнда с большим порядком ,а при равенстве порядков мантисса первого операнда.
Как вычитание так и сложение мантисс как правило реализуется в беззнаковом варианте о знаке суммы следует судить по переносу ,а о знаке разности по заему .
Для каждого из трех способов сложения мантисс с разными знаками используется свой способ формирования знака результата(продумать какой).
Отрицательный результат будет получен в дополнительном коде и требует преобразования в прямой код.
4) Нормализация
Этот этап имеет место только при получении не нормализованного результата.
На предыдущем этапе может быть получен один из двух видов не нормализованного результата.
а) Результат денормализованый влево получается получается при сложении положительных или отрицательных операндов в случае переполнения.
Нормализация производится посредством сдвига мантиссы в право и увеличении порядка на единицу.
Если порядок результата равный порядку большего операнда был максимальным то увеличение на единицу даст особый случай "переполнение порядка".
б) Результат денормализованый вправо получается при сложении операндов с разными знаками при наличии в мантиссе результата старших нулей.
Нормализация производится сдвигом мантисса влево с целью удаления ведущих нулей .Этот сдвиг сопровождается уменьшением порядка что может повлечь "исчезновение порядка"(анти-переполнение).
Вычитание
Операция вычитания чисел с плавающей запятой сводится к сложению путем предварительного изменения знака второго операнда на противоположный.
В связи с тем, что мантисса числа представляется в прямом коде, при изменении знака числа меняется только знаковый разряд, а мантисса остается прежней.
Операция умножения целых чисел и
принципы ее реализации в ЭВМ
Основные положения двоичного умножения
А=13 x1101
В=11 1011
---------
1101
+ 1101
1101
-------------
10001111=(143)10
Другой метод:
x1101
1011
--------
1101
+ 1101
1101
------------------
10001111=(143)10
1. Умножение двоичных чисел (как и десятичных) состоит в последовательном умножении множимого на отдельные разряды множителя с суммированием результатов умножения. Результат умножения множимого на один разряд множителя принято называть частичным произведением. Результат умножения двух чисел представляет собой сумму всех частных произведений.
2. Каждое частное произведение либо совпадает с множимым, либо равно 0.
3. Формируемые частные произведения должны быть определенным образом сдвинуты друг относительно друга для их последующего суммирования.
4. Частные произведения можно формировать как начиная от младших, так начиная и от старших разрядов множителя.
5. В общем случае для результата умножения требуется количество цифр равное сумме количества цифр операндов. При одинаковой разрядности операндов: 2n - разрядов.
Особенности реализации умножения в ЭВМ
1. В операционном устройстве для умножения двоичных чисел должен использоваться многоразрядный двоичный сумматор, что предопределяет умножение в виде последовательного многошагового процесса, на каждом шаге которого проводится умножение на один разряд множителя. Сумма частных произведений: СЧП.
Для фиксации этой суммы на каждом шаге необходимо использовать 2n-разрядный процессор, n-разрядного операнда.
Перед началом операции необходимо осуществить сброс этого регистра (установить в “ноль”).
2. На каждом шаге умножения анализируется определенный разряд множителя, и если он равен единице, то на этом шаге производится сложение СЧП с множимым. Если разряд множителя равен нулю, то сложения на данном шаге производится.
3. Любой шаг умножения должен сопровождаться сдвигом множимого относительно неподвижной СЧП: принципиально возможен и подход, при котором множимое остается неподвижным, но происходит сдвиг СЧП.
4. Реализацию умножения принципиально можно начинать как от младшего, так и от старшего разряда множителя.
5. В целях упрощения схемы управления умножением регистр множителя реализуется как сдвигающий, при этом последовательные разряды множителя, на которые производится умножение на каждом шаге, постепенно перемещаются так, что дают возможность связать схему анализа с одним разрядом множителя.
При выполнении умножения начиная от младших разрядом множителя, схема анализа привязывается к младшему разряду регистра множителя, и в этом регистре реализуется сдвиг вправо. При реализации умножения начиная от старших разрядом множителя схема анализа привязывается к старшему разряду регистра множителя и в нем реализуется сдвиг вправо.
6. Для фиксации момента завершения операции, в операционном устройстве умножения должен быть использован счетчик (суммирующий или вычитающий).