WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 |   ...   | 8 | 9 || 11 | 12 |   ...   | 13 |

Пример. 7(10)+6(10)=13(10) Перенос (i)-тетрада Комментарий в (i+1)-тет раду 1 0 1 0 1-е слагаемого – 7(10) 1 0 0 1 2-е слагаемого – 6(10) 0 0 0 0 CFi – 1 перенос из предыдущей тетрады равен 1 0 0 1 1 сумма и перенос 1 в следующую тетраду 0 0 1 1 поскольку выполняется условие (б), сумма (Хi+Yi+CFi–1) )8421+3>(1100(2)=9(10)), коррекция значения тетрады равна 11(2) 1 0 1 1 0 значение тетрады и переноса после коррекции, т.е.

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

Получение дополнительного кода операндов рассмотрим подробно для кодов 8421 и 8421+3.

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

1. Если операнд положительный, его код совпадает с самим операндом.

2. Если операнд отрицательный, то поскольку код 8421 не обладает свойством дополнения, получение дополнительного кода в цифровом процессоре происходит следующим образом:

- выполняется инверсия каждого бита каждой тетрады;

- из каждой тетрады вычитается 110(2);

- в младший бит младшей тетрады добавляется 1.

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

Х=264(10).

Знак Тетрады [X8421]2= 0000 0 0 1 0 0 1 1 0 0 1 0 Y= – 264.

Знак Тетрады Комментарий [Y8421]2= 1111 0 0 1 0 0 1 1 0 0 1 0 0 [Y8421] инверсия тет1111 1 1 0 1 1 0 0 1 1 0 1 рад вычитание 110(2), прибавлением 1 0 1 0 1 0 1 0 1 0 1 0 1010= =[ – 0110](2), перенос блокируется результат 1111 0 1 1 1 0 0 1 1 0 1 0 вычитания прибавление 1 1 в младшую тетраду 1111 0 1 1 1 0 0 1 1 0 1 1 0 [Y8421]Выполним проверку полученного результата. Так как процессор работает по модулю 1000(10), то дополнением 264(10) до 1000(10) будет 736(10). Результат верен.

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

1 1 1 1 0 1 1 1 0 0 1 1 0 1 1 Пример.[Y8421]2= Перевод:

Знак Тетрады Комментарий 1111 0 1 1 1 0 0 1 1 0 1 1 1111 1 0 0 0 1 1 0 0 1 0 0 1 инверсия тетрад вычитание 110(2), прибавлением 1 0 1 0 1 0 1 0 1 0 1 0 1010=[– 0110](2), перенос блокируется 1111 0 0 1 0 0 1 1 0 0 0 1 1 результат вычитания прибавление 1 в младшую тет раду – 0 0 1 0 0 1 1 0 0 1 0 0 – 264(10) Y= – 264(10).

Дополнение операнда в коде 8421+3 получается по следующему алгоритму. Так как этот код обладает свойством дополнения, то получение дополнительного кода отрицательного числа выполняется по общему правилу: инверсия всех числовых битов операнда с добавлением 1 в младший бит младшей тетрады.

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

Х=264(10).

Знак Тетрады [X8421+3]2= 0000 0 1 0 1 1 0 0 1 0 1 1 Y= – 264.

Знак Тетрады Комментарий [Y8421+3]2= 1111 0 1 0 1 1 0 0 1 0 1 1 1 [Y8421+3] 1111 1 0 1 0 0 1 1 0 1 0 0 0 инверсия добавление единицы 1111 1 0 1 0 0 1 1 0 1 0 0 1 [Y8421+3]Есть особый случай в алгоритме перевода в дополнительный код отрицательного операнда, оканчивающегося на один или несколько нулей в BCD-коде 8421+3. В этом случае после инверсии всех разрядов числовых тетрад к тетрадам добавляется 00…1(10)= (0011)(0011)…...(0100)(2) =[00…1]8421+3.

Пример. Y= – 260 (операнд имеет 0 в младшем разряде).

Знак Тетрады Комментарий [Y8421+3]2= 1111 0 1 0 1 1 0 0 1 0 0 1 1 [Y8421+3] 1111 1 0 1 0 0 1 1 0 1 1 0 0 инверсия добавление 0 0 1 1 0 0 1 1 0 1 0 (001)108421+ результат сло 1 0 0 0 0 жения, перенос не блокируется так как перенос из тетрады ра 0 0 1 вен 1, коррекция + сложение в 0 1 1 1 0 0 0 1 средней тетраде так как перенос из тетрады ра 1 1 0 1 вен 0, коррекция (–0011), перенос блокируется результат в 0 1 1 средней тетраде сложение в 1 1 0 старшей тетраде так как перенос из тетрады ра 1 1 0 1 вен 0, коррекция (–0011), перенос блокируется результат в 1 0 1 старшей тетраде 1111 1 0 1 0 0 1 1 1 0 0 1 1 [Y8421+3]Алгоритм перевода отрицательного операнда из дополнительного кода в десятичную систему счисления такой же: инверсия всех числовых битов операнда с добавлением 1 в младший бит младшей тетрады (с учетом особого случая, когда операнд заканчивается нулями).

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

Рассмотрим примеры сложения в дополнительном коде операндов в BCD-кодах.

Пример 1. Сложить X+Y в процессоре, работающем в коде 8421 в формате целых беззнаковых чисел, имеющем три тетрады.

X=645(10); [X8421]2=011001000101;

Y=275(10); [Y8421]2=001001110101.

CF Тетрада 3 Тетрада 2 Тетрада 1 Комментарий * 0 1 1 0 0 1 0 0 0 1 0 1 [X8421]* 0 0 1 0 0 1 1 1 0 1 0 1 [Y8421]* 1 0 1 0 сложение младших тетрад Х1+Y1+CF* 0 1 1 0 так как (Х1+Y1+CF0)8421> > (1001(2)=9(10)), коррекция +0110(2) 1 0 0 0 0 результат коррекции * 0 1 1 0 0 0 0 0 0 сложение средних тетрад Х2+Y2+CF* 0 1 1 0 0 0 0 0 так как (Х2+Y2+CF1)8421> > (1001(2)=9(10)), коррекция +0110(2) * 1 0 0 1 0 0 0 0 0 результат коррекции 0 1 0 0 1 0 0 1 0 0 0 0 0 сложение старших тетрад Х3+Y3+CF0 1 0 0 1 0 0 1 0 0 0 0 0 так как (Х2+Y2+CF1)8421< <(1001(2)=9(10)), то коррекция не нужна, результат, равный 920(10), верен Пример 2. Выполнить вычитание X–Y в процессоре, работающем в коде 8421 в формате целых беззнаковых чисел, имеющем три тетрады.

X=645(10); [X8421]2=011001000101;

Y=275(10); [Y8421]2=001001110101.

CF Тетрада 3 Тетрада 2 Тетрада 1 Комментарий * 0 1 1 0 0 1 0 0 0 1 0 1 [X8421]* 0 1 1 1 0 0 1 0 0 1 0 1 [– Y8421]* 0 1 0 1 0 сложение младших тетрад Х1+Y1+CF* 0 1 1 0 так как (Х1+Y1+CF0)8421> >(1001(2)=9(10)), коррекция +0110(2) * 1 0 0 0 0 результат коррекции * 0 0 1 1 1 0 0 0 0 сложение средних тетрад Х2+Y2+CF* 0 0 1 1 1 0 0 0 0 так как (Х2+Y2+CF1)8421< <(1001(2)=9(10)), коррекция не нужна 0 1 1 0 1 0 1 1 1 0 0 0 0 сложение старших тетрад Х3+Y3+CF 0 1 1 0 0 1 1 1 0 0 0 0 так как (Х1+Y1+CF0)8421> >(1001(2)=9(10)), коррекция +0110(2) 1 0 0 1 1 0 1 1 1 0 0 0 0 результат коррекции 1 0 0 1 1 0 1 1 1 0 0 0 0 результат, равный 370(10), верен Пример 3. Выполнить сложение X+Y в процессоре, работающем в коде 8421+3 в формате целых беззнаковых чисел, имеющем три тетрады.

X=645(10); [X8421+3]2=100101111000;

Y=275(10); [Y8421+3]2=010110101000.

CF Тетрада 3 Тетрада 2 Тетрада 1 Комментарий * 1 0 0 1 0 1 1 1 1 0 0 0 [X8421+3]* 0 1 0 1 1 0 1 0 1 0 0 0 [Y8421+3]* 1 0 0 0 0 сложение младших тетрад Х1+Y1+CF* 0 0 1 1 так как перенос равен 1, коррекция +0011(2) 0 0 1 1 результат коррекции * 1 0 0 1 0 0 0 1 1 сложение средних тетрад Х2+Y2+CF* 0 0 1 1 0 0 1 1 так как перенос равен 1, коррекция +0011(2) * 0 1 0 1 0 0 1 1 результат коррекции 0 1 1 1 1 0 1 0 1 0 0 1 1 сложение старших тетрад Х3+Y3+CF0 1 1 0 1 0 1 0 1 0 0 1 1 так как перенос равен 0, коррекция [– 0011(2)]=0 1 1 0 0 0 1 0 1 0 0 1 1 результат коррекции, перенос блокируется 0 1 1 0 0 0 1 0 1 0 0 1 1 результат, равный 920(10), верен Пример 4. Выполнить вычитание X–Y в процессоре, работающем в коде 8421+3 в формате целых беззнаковых чисел, имеющем три тетрады.

X=645(10); [X8421+3]2=100101111000;

Y=275(10); [Y8421+3]2=100101011000.

CF Тетрада 3 Тетрада 2 Тетрада 1 Комментарий * 1 0 0 1 0 1 1 1 1 0 0 0 [X8421+3]* 1 0 0 1 0 1 0 1 1 0 0 0 [–Y8421+3]* 1 0 0 0 0 сложение младших тетрад Х1+Y1+CF* 0 0 1 1 так как перенос равен 1, коррекция +0011(2) * 1 0 0 1 1 результат коррекции * 0 1 1 0 1 0 0 1 1 сложение средних тетрад Х2+Y2+CF* 1 1 0 1 0 0 1 1 так как перенос равен 0, коррекция [–0011(2)]= 1 0 1 0 0 0 1 1 результат коррекции, перенос блокируется 1 0 0 1 0 1 0 1 0 0 0 1 1 сложение старших тетрад Х3+Y3+CF 0 0 1 1 1 0 1 0 0 0 1 1 так как перенос равен 1, коррекция +0011(2) 1 0 1 0 1 1 0 1 0 0 0 1 1 результат коррекции 1 0 1 0 1 1 0 1 0 0 0 1 1 результат, равный 370(10), верен 4.9.3. Алгоритм сложения (вычитания) целых чисел со знаком в BCD-кодах При сложении таких чисел в BCD-кодах также возможно переполнение разрядной сетки процессора. Способы обнаружения переполнения такие же, как и при сложении в двоичной системе счисле ния. Рассмотрим примеры сложения (дополнительный код) операндов в BCD-кодах.

Пример 1. Сложить X+Y в процессоре, работающем в коде в формате целых чисел со знаком (под знак отводится одна тетрада, а под числовые разряды – три тетрады).

X=645(10); [X8421]2=011001000101;

Y=475(10); [Y8421]2=010001110101.

CF Знак Тетрада 3 Тетрада 2 Тетрада 1 Комментарий * 0 1 1 0 0 1 0 0 0 1 0 1 [X8421]* 0000 0 1 0 0 0 1 1 1 0 1 0 1 [Y8421]* 0000 1 0 1 0 сложение младших тетрад Х1+Y1+CF* 0000 0 1 1 0 так как (Х1+Y1+CF0)8421> >(1001(2)=9(10)), коррекция +0110(2) 0000 1 0 0 0 0 результат коррекции * 0000 0 1 1 0 0 0 0 0 0 сложение средних тетрад Х2+Y2+CF* 0000 0 1 1 0 0 0 0 0 так как (Х2+Y2+CF1)8421> >(1001(2)=9(10)), коррекция +0110(2) * 0000 1 0 0 1 0 0 0 0 0 результат коррекции 0 0000 1 0 1 1 0 0 1 0 0 0 0 0 сложение старших тетрад Х3+Y3+CF0 0000 0 1 1 0 0 0 1 0 0 0 0 0 так как (Х2+Y2+CF1)8421> >(1001(2)=9(10)), коррекция +0110(2) 0 1111 0 0 0 1 0 0 1 0 0 0 0 0 результат коррекции 0 1111 0 0 0 1 0 0 1 0 0 0 0 0 переполнение (перенос из старшей тетрады в знак равен 1, а из знака в CF равен 0) OF=Пример 2. Сложить X+Y в процессоре, работающем в коде 8421+в формате целых чисел со знаком (под знак отводится одна тетрада, а под числовые разряды – три тетрады).

X= –645(10); [X8421+3]2=011010001000;

Y=275(10); [Y8421+3]2=010110101000.

CF Знак Тетрада 3 Тетрада 2 Тетрада 1 Комментарий * 1 0 1 1 0 1 0 0 0 1 0 0 0 [X8421+3]* 0 0 1 0 1 1 0 1 0 1 0 0 0 [Y8421+3]* 1 0 0 0 0 сложение младших тетрад Х1+Y1+CF* 0 0 1 1 так как перенос равен 1, коррекция +0011(2) 0 0 1 1 результат коррекции * 1 0 0 1 1 0 0 1 1 сложение средних тетрад Х2+Y2+CF* 0 0 1 1 0 0 1 1 так как перенос равен 1, коррекция +0011(2) * 0 1 1 0 0 0 1 1 результат коррекции 0 1 1 1 0 0 0 1 1 0 0 0 1 1 сложение старших тетрад Х3+Y3+CF0 1 1 1 0 1 0 1 1 0 0 0 1 1 так как перенос равен 0, коррекция [–0011(2)]=1 1 1 0 0 1 0 1 1 0 0 0 1 1 результат коррекции, перенос блокируется Выполним проверку результата. Так как результат оканчивается на 0, то:

1 1 0 1 1 0 1 0 0 1 1 1 0 0 перевод [X+Y8421+3]в прямой код, инверсия 0 0 1 1 0 0 1 1 0 1 0 0 добавление 001108421+3=0100(2) 1 1 1 0 0 результат сложения в младшей тетраде 1 1 1 1 0 0 0 0 0 прибавление переноса в среднюю тетраду 1 1 0 1 0 0 1 1 так как нет переноса, коррекция (–0011), перенос блокируется 1 1 0 1 0 0 0 1 1 результат коррекции в средней тетраде 1 0 0 1 1 0 1 0 0 0 1 1 прибавление переноса в старшую тетраду 1 1 0 1 так как нет переноса, коррекция (–0011), перенос блокируется 0 1 1 0 результат коррекции в старшей тетраде 1 1 0 1 1 0 1 0 1 0 0 0 1 1 результат, равный – 370(10), верен 4.10. Выполнение операций сдвига в BCD-кодах на один двоичный разряд Операции сдвига используются в алгоритмах умножения и деления. Поскольку в дальнейшем алгоритмы умножения и деления будут рассматриваться только в BCD-коде 8421, то и операции сдвига на один двоичный разряд будем рассматривать только в этом коде.

Операция сдвига влево.

Сдвиг операнда в BCD-коде влево на один двоичный разряд увеличивает его значение в два раза. Рассмотрим вначале операцию сдвига влево на конкретных примерах.

Пример 1. Сдвинуть влево тетраду, содержащую 2(10). В результате должно получиться 4(10).

CF Тетрада Комментарий 0 0 1 0 0 1 0 0 AL(58421,1) 0 1 0 0 результат сдвига Пример 2. Сдвинуть влево тетраду, содержащую 5(10). В результате должно получиться 10(10) (т.е. 0 в этой тетраде и 1 переноса в следующую тетраду).

CF Тетрада Комментарий 0 1 0 1 1 0 1 0 AL(58421,1) 0 1 1 0 коррекция +110(2) 1 0 0 0 0 результат сдвига Пример 3. Сдвинуть влево тетраду, содержащую 8(10). В результате должно получиться 16(10) (т.е. 8 в этой тетраде и 1 переноса в следующую тетраду).

CF Тетрада Комментарий 1 0 0 0 1 0 0 0 0 AL(58421,1) 0 1 1 0 коррекция +110(2) 1 0 1 1 0 результат сдвига Таким образом, при выполнении сдвига влево операнда в коде 8421 на один двоичный разряд требуется выполнить коррекцию сдвигаемой тетрады в двух случаях:

1) если значение тетрады после сдвига больше (1001(2)=9(10));

2) если при сдвиге перенос из этой тетрады равен 1.

Операция сдвига вправо.

Сдвиг операнда в BCD-коде вправо на один двоичный разряд уменьшает его значение в два раза. Рассмотрим вначале операцию сдвига вправо на конкретных примерах.

Пример 1. Сдвинуть вправо операнд в коде 8421, расположенный в двух тетрадах и равный 46(10). В результате должно получиться 23(10).

CF Тетрада Тетрада Комментарий 0 0 1 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 AR(468421,1) 0 0 0 1 0 0 0 1 1 результат сдвига, равный Пример 2. Сдвинуть вправо операнд в коде 8421, расположенный в двух тетрадах и равный 30(10). В результате должно получиться 15(10).

CF Тетрада Тетрада Комментарий 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 AR(308421,1) 0 0 0 0 0 1 1 0 1 коррекция [–11(2)]=0 0 0 0 1 0 1 0 1 результат коррекции, перенос блокируется 0 0 0 0 1 0 1 0 1 результат сдвига, равный Таким образом, при выполнении сдвига вправо операнда в коде 8421 требуется выполнить коррекцию тетрады на величину –11(2) в том случае, если в нее был перенос, равный 1, из предыдущей тетрады.

4.10.1. Алгоритмы умножения в BCD-коде Рассмотрим два алгоритма умножения в коде 8421. Первый основан на алгоритме умножения с младших разрядов множителя и сдвиге час тичного произведения и множителя вправо, который рассматривался при умножении операндов в двоичной системе счисления. Этот алгоритм будет иметь свои особенности при умножении в BCD-коде. Поскольку в каждом разряде множителя может находиться значение в интервале от 0 до 9, при умножении на цифру множителя множимое прибавляется к содержимому сумматора столько раз, чему равна цифра множителя. Для этого в процессоре используется еще один счетчик СЧТ1. В этот счетчик заносится значение очередной цифры множителя и при каждом прибавлении множимого он уменьшается на 1. Достижение счетчиком СЧТ1 значения 0 означает завершение умножения на цифру множителя. Все остальные шаги идентичны алгоритму умножения в двоичной системе счисления. Рассмотрим пример выполнения такого алгоритма.

Умножить X на Y в процессоре, работающем в формате целых чисел со знаком в коде 8421 (под знак отводится одна тетрада, а под разряды – две тетрады).

X=24(10); [X8421]1=000100100;

Р1=000000100100;

Y=25(10); [Y8421]1=000100101.

РСМ Р2 Комментарий * * * * * * * * * * * * * * * * * * * * * * * * * * РСМ:=0; Р2:=Y;

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 СЧТ:=0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 5 2 СЧТ1:=0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 5 2 +Рсложение мл. тет 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 5 рад сложение ст. тет0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 4 рад; СЧТ1:=СЧТ1–0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 4 2 +Рсложение мл. тет 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 4 рад сложение ст. тет0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 3 рад; СЧТ1:=СЧТ1– СЧТ СЧТ 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 3 2 +Р 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 3 сложение мл. тетрад 0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 1 3 коррекция + 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 3 2 результат сложение ст. тет0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 1 2 рад 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 2 2 +Рсложение мл. тет 0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 0 1 2 рад сложение ст.тетрад;

Pages:     | 1 |   ...   | 8 | 9 || 11 | 12 |   ...   | 13 |






© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.