Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Случай №1




. (4.38)

 

В этом случае сразу получено истинное значение положительного произведения в ДК, которое не требует корректирования.

Случай №2. .

 

(4.39)

 

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

 

;

. (4.40)

 

Сомножитель представляет собой (s-1)-разрядный псевдомодуль числа (-X), представленного в ДК. Сомножитель эквивалентен сдвигу на (s-1) разряд влево. Сравнение (Z) и (Z’) показывает, что результат умножения должен быть скорректирован посредством сложения (Z’) с поправкой ().

Случай №3. .

 

. (4.41)

 

. (4.42)

 

Случай №4. .

 

. (4.43)

На практике используют упрощенную поправку , поскольку нескорректированный операнд (C) проявит себя в виде (1) в знаковом разряде. Это не имеет значения, поскольку знак (Z) был сформирован отдельно на начальном этапе. Подход к формированию алгоритма умножения состоит в следующем.

1. Получим псевдомодули операндов, отбросив старшие (знаковые) цифры: (0) - в положительном числе, (1) - в отрицательном.

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

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

4. Выполняя их умножение по правилам, рассмотренным выше, получаем уже не модуль (Z’), а само псевдопроизведение с некоторыми псевдознаковыми цифрами в двух самых старших разрядах. Указанные цифры относятся к знаковым по расположению, но не имеют смысла таковых.

5. Возникает задача найти истинное значение знаковой цифры числа (Z).

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

Случай №1. .

Перемножая машинные представления сомножителей в ДК, получим:

 

. (4.44)

 

Случай №2. .

Учитывая, что разрядность произведения (и псевдопроизведения) составит (2s) - бит, вес разряда, следующего за знаковым разрядом произведения:

 

(4.45)

 

Тогда:

(4.46)

 

Перемножая ДК сомножителей, получим:

 

. (4.47)

 

Истинное значение произведения получается:

 

. (4.48)

 

. (4.49)

 

Случай №3. .

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

 

. (4.50)

 

Случай №4. .

 

. (4.51)

 

На практике используют упрощенную поправку:

 

. (4.52)

 

При умножении в ДК по любому из вариантов данной группы в процессе прибавления () к (Z’) важно соблюдать соответствие весов разрядов псевдопроизведения и корректирующей поправки (с учетом наличия псевдознака). Старший разряд корректирующей поправки сформирует знаковую цифру. Из рассмотренных ранее вариантов умножения в соответствии с алгоритмами обеих групп, следует, что для коррекции результата умножения ДК операндов необходимо в каждом случае по комбинации знаков определять величину коррекции, а затем выполнять 1-2 шага суммирования. Однако этого можно избежать, если коррекцию совмещать с процессом суммирования частичных произведений. Рассмотренные алгоритмы являются базовыми и реализуют непосредственный способ введения поправок. Более широкое применение на практике получили алгоритмы с косвенным способом введения поправок.

Случай №1. .

По примеру первой и второй групп результат является истинным произведением и корректировка не требуется. Т.е. сформированы истинные модуль и знак.

Случай №2. .

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

Случай №3 .

Если сдвиг суммы ЧП вправо на (i) разрядов выполнять по правилам сдвига модифицированного ДК, а затем выполнять суммирование ЧП по правилам суммирования модифицированных ДК (с потерей переноса из знакового разряда), то будет получено правильное произведение исходных чисел в ДК, т.е. (). Т.о., коррекция не требуется.

Случай №4 .

Коррекция результата выполняется объединением двух предыдущих вариантов, т.е. при умножении на знаковый разряд множителя выполняют вычитание, а суммирование и сдвиг частичных произведений производят с использованием МДК. Таким образом при положительном множителе умножение в ДК можно выполнять по алгоритмам умножения в ПК, если только суммировать ЧП и сдвиг выполнять по правилам сложения и сдвига модифицированного ДК (перенос из ЗР будет игнорироваться). Существует еще один способ умножения знаковых чисел в ДК. Он заключается в том, что отрицательный множитель необходимо преобразовать в положительный. Это выполняется умножением на (-1) множимого и множителя. В итоге, в соответствии с выше приведенной теоремой, умножение выполняется по обычным правилам, а результат не нуждается в корректировке. Общий алгоритм умножения целых двоичных знаковых чисел, представленных в ДК заключается в следующем:

1. Исходное значение суммы ЧП принимается равным (0), (Сч.Т) присваивается значение, равное числу разрядов множителя.

2. Анализируется младшая разрядная цифра множителя. Если она равна (1), то к сумме ЧП прибавляется множимое; если (0) - прибавление не производится. Множимое при этом совмещается с суммой ЧП по старшим разрядам и представлено в исходном коде.

3. Производится арифметический сдвиг суммы ЧП вправо на (1) разряд с учетом флагов переноса (FC) и переполнения (FO). Содержимое (Сч.Т) уменьшается на (1).

4. пп.2-3 последовательно выполняются для всех цифровых разрядов множителя.

5. Если множитель — положительное число, то полученный результат является истинным произведением (Z). Если множитель - отрицательное число, то к полученному результату (Z’) прибавляется множимое с обратным знаком (дополнение), совмещенное по старшим разрядам. Полученная сумма представляет собой истинное произведение (Z). . Рассмотрим примеры вышеописанного алгоритма.

Пример №1. Необходимо перемножить два знаковых числа:

((+7)∙(+3) = (+21)). Для удобства возьмем длину разрядной сетки равную четырем битам, а именно: Х = (+7) – множимое, Y = (+3) – множитель, Z = (+21) – произведение. Если (X) и (Y) равняется четырем битам, то как было отмечено выше (Z) должно быть восьмиразрядным значением, т.е длина разрядной сетки произведения в два раза больше множимого и множителя. Алгоритм умножения приведен в табл. 4.6.

 

Таблица 4.6 - Алгоритм умножения со сдвигом вправо двоичных знаковых чисел

Регистр (В) множимое X Регистр (С) множитель Y Регистр (А) произведение Z Счетчик тактов (Сч.Т) Комментарии
                     
        множимое
        1Я СЧП
              1ЫЙсдвиг СЧП
        множимое
        2Я СЧП
              2 ОЙсдвиг СЧП
              3 ИЙсдвиг СЧП
              4ЫЙсдвиг СЧП и получили число – (+21)
    СТОП    
                     

Пример №2. Необходимо перемножить два знаковых числа:

((+7)∙(-3) = (-21)).

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

Х = (+7) – множимое;

Y = (-3) – множитель;

Z = (-21) – произведение.

Если (X) и (Y) равняется четырем битам, то как было отмечено выше (Z) должно быть восьмиразрядным значением.

То есть длина разрядной сетки произведения в два раза больше множимого и множителя.

Алгоритм умножения приведен в табл. 4.7.

 

Таблица 4.7 - Алгоритм умножения со сдвигом вправо двоичных знаковых чисел

Регистр (В) множимое X Регистр (С) множитель Y Регистр (А) произведение Z Счетчик тактов (Сч.Т) Комментарии
                     
        множимое
        1Я СЧП
              1ЫЙсдвиг СЧП
              2 ОЙсдвиг СЧП
        множимое
        2Я СЧП
              3 ИЙсдвиг СЧП
        множимое
        3Я СЧП
        4ЫЙсдвиг СЧП и (получили (Z))
        кор-ция на (ХД)
        число (-21)
    СТОП    
                     

 

Пример №3. Необходимо перемножить два знаковых числа:

((-7)∙(+3) = (-21)).

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

Х = (-7) – множимое;

Y = (+3) – множитель;

Z = (-21) – произведение.

Если (X) и (Y) равняется четырем битам, то как было отмечено выше (Z) должно быть восьмиразрядным значением.

То есть длина разрядной сетки произведения в два раза больше множимого и множителя.

Алгоритм умножения приведен в табл. 4.8.

 

Таблица 4.8 - Алгоритм умножения со сдвигом вправо двоичных знаковых чисел

Регистр (В) множимое X Регистр (С) множитель Y Регистр (А) произведение Z Счетчик тактов (Сч.Т) Комментарии
                     
        множимое
        1Я СЧП
              1ЫЙсдвиг СЧП
        множимое
        2Я СЧП
              2 ОЙсдвиг СЧП
              3 ИЙсдвиг СЧП
        4ЫЙсдвиг СЧП и (получили (Z))
        кор-ция на (YД)
        число (-21)
    СТОП    
                     

 

Пример №4. Необходимо перемножить два знаковых числа:

((-7)∙(-3) = (+21)).

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

Х = (-7) – множимое;

Y = (-3) – множитель;

Z = (+21) – произведение.

Если (X) и (Y) равняется четырем битам, то как было отмечено выше (Z) должно быть восьмиразрядным значением.

То есть длина разрядной сетки произведения в два раза больше множимого и множителя. Алгоритм умножения приведен в табл. 4.9.

 

Таблица 4.9 - Алгоритм умножения со сдвигом вправо двоичных знаковых чисел

Регистр (В) множимое X Регистр (С) множитель Y Регистр (А) произведение Z Счетчик тактов (Сч.Т) Комментарии
                     
        множимое
        1Я СЧП
              1ЫЙсдвиг СЧП
              2 ОЙсдвиг СЧП
        множимое
        2Я СЧП
              3 ИЙсдвиг СЧП
        множимое
        3Я СЧП
        4ЫЙсдвиг СЧП и (получили (Z))
        кор-ция на (XД)
         
        кор-ция на (YД)
        число (+21)
    СТОП    
                     

 

Для закрепления материала рекомендуется выполнить следующие упражнения:

1. Перевести в двоичную систему счисления и вычислить выражение: ((15(10) – 11(10)) * (20(10) – 17(10))).
2. Перевести в двоичную систему счисления и вычислить выражение: ((15(10) – 11(10)) * (12(10) – 17(10))).
3. Перевести в двоичную систему счисления и вычислить выражение: ((14(10) – 21(10)) * (18(10) – 16(10))).
4. Перевести в двоичную систему счисления и вычислить выражение: ((14(10) – 21(10)) * (10(10) – 16(10))).
5. Перевести в двоичную систему счисления и вычислить выражение: ((17(10) – 21(10)) * (11(10) – 17(10))).
 

4.7 Деление двоичных знаковых чисел в компьютерных системах

 

Так как данные в памяти компьютера хранятся в ДК, операцию деления целесообразно выполнять в ДК.

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

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

Таким образом, при делении чисел в ДК трудности, связанные с коррекцией результата (как при умножении в дополнительном коде), практически отсутствуют.

Пусть:

 

- разрядность (2s), - .

- разрядность (s), - .

- разрядность (s), - .

- разрядность(s), - .

 

Для проверки на корректность операции деления используется условие:

. Таким образом, при пробном вычитании делитель должен быть сдвинут на (s-1) разряд влево. Однако чтобы обеспечить регулярность процесса деления, делитель сдвигается влево на s разрядов, а перед пробным вычитанием делимое сдвигается на один разряд влево.

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

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

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

Алгоритм деления целых двоичных знаковых чисел заключается в следующем:

1. Частному присваивается значение (0); (Сч.Т) – (s). Исходное значение частичного остатка равно (s) старшим разрядам делимого.

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

3. Если частичный остаток и делитель разного знака, то они складываются, если же одного знака, то из частичного остатка вычитается делитель.

4. Частное сдвигается влево на (1) разряд. В освобождающийся младший разряд заносится очередная цифра частного: (1) - если знак делителя и остатка совпадают, (0) - в противном случае (Сч.Т) уменьшается на (1).

5. Пункты 2-4 повторяются до тех пор, пока (Сч.Т) не станет равным (0).

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

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

Случай №1 X > 0; Y > 0. Деление в этом случае ничем не отличается от деления положительных операндов в прямом коде. Коррекция не требуется;

Случай №2 X > 0; Y < 0. Этот случай легко сводится к обычному делению в прямом коде, если считать, что в наличии имеется (-Y) и (+Y). Однако для формирования правильного знака частного и обратного кода отрицательного результата необходимо псевдознаковую цифру и цифры частного получать равными цифрам знаковых разрядов соответствующих остатков. Переполнение разрядной сетки здесь фиксируется по (). В конце деления для образования дополнительного кода и округления частного следует прибавить единицу к младшему разряду: (Z=Z’+1);

Случай №3 X < 0; Y > 0. Из отрицательного делимого должен вычитаться положительный делитель, в отличие от деления без восстановления остатка в прямом коде, когда на первом шаге (Х>0, Y<0). Поэтому псевдознаковая цифра частного (), полученная по знаку нулевого остатка в соответствии с алгоритмом деления без восстановления остатка, здесь указывает на переполнение разрядной сетки. Если же переполнения разрядной сетки нет, эта цифра является правильной знаковой цифрой частного (то есть, ).

Знаки всех других остатков в этом случае определяют инверсные значения цифр частного.

В результате будет записан обратный код отрицательного частного.

Для округления и получения дополнительного кода результата необходимо добавить единицу в младший разряд, если полученный остаток не равен нулю: (Z=Z’+1).

Случай№4 X < 0; Y < 0.

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

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

В случае, когда полученный остаток равен нулю, к частному следует прибавить единицу (Z=Z’+1).

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

Поэтому надо оперировать двумя знаковыми разрядами.

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

Знак остатка от деления должен совпадать со знаком делимого.

Например: необходимо разделить два беззнаковых числа (21:7=3).

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

Х = 21 – делимое;

Y = 7 – делитель;

Z = 3 – частное.

Если (Z) и (Y) равняется четырем битам, то как было отмечено выше (X) должно быть восьмиразрядным значением, т.е длина разрядной сетки делимого в два раза больше делителя и частного.

Алгоритм деления приведен в табл. 4.10.

 

 

Таблица 4.10 - Алгоритм деление целых двоичных знаковых чисел методом без восстановлением остатка.

  Регистр (В) делимое X Регистр (С) делитель Y Регистр (А) частное Z Счетчик тактов (Сч.Т)
                                   
                       
          <0            
                             
                       
          <0            
                             
                       
          <0            
                             
                       
          >0            
                       
                       
          >0                  
            СТОП          
                                         

 

Для закрепления материала рекомендуется выполнить следующие упражнения:

 

1. Перевести в двоичную систему счисления и вычислить выражение:

((19(10) – 15(10)) * (18(10) – 11(10)))/7(10).

2. Перевести в двоичную систему счисления и вычислить выражение:

((10(10) – 15(10)) * (18(10) – 12(10)))/6(10).

3. Перевести в двоичную систему счисления и вычислить выражение:

((17(10) – 12(10)) * (23(10) – 17(10)))/(-6(10)).

4. Перевести в двоичную систему счисления и вычислить выражение:

((25(10) – 21(10)) * (10(10) – 17(10)))/(-7(10)).

5. Перевести в двоичную систему счисления и вычислить выражение:

((14(10) – 21(10)) * (10(10) – 16(10)))/5(10).

6. Перевести в двоичную систему счисления и вычислить выражение:

((15(10) – 11(10)) * (12(10) – 17(10)))/5(10).

 





Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 410; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.