WWW.DISSERS.RU

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

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


Pages:     | 1 | 2 || 4 | 5 |   ...   | 13 |

знак числовые разряды 1111 1111 0100 В современных процессорах фирмы Intel и в большинстве других, в соответствии со стандартом IEEE 754 используется BCD-код в следующем формате. Под операнд отводится 10 байт, из них крайний левый байт – знаковый. В остальных числовых байтах записывается по две тетрады (табл. 2.5). Это позволяет обрабатывать восемнадцатиразрядные десятичные числа, что является достаточным для любых экономических расчетов.

Таблица 2.Формат BCD-кодирования по стандарту IEEE байт 9 байт 8 байт 7 байт 6 байт 5 байт 4 байт 3 байт 2 байт 1 байт знак d17d16 d15d14 d13d12 d11d10 d9d8 d7d6 d5d4 d3d2 d1d 3. Кодирование чисел в цифровых процессорах В цифровых процессорах в каждом формате операнды представляются в одном из следующих кодов:

- прямом;

- дополнительном;

- обратном.

Введем следующую систему обозначений:

[Х]1 – представление операнда Х в прямом коде;

[Х]2 – представление операнда Х в дополнительном коде;

[Х]3 – представление операнда Х в обратном коде.

Рассмотрим представление операндов в каждом из этих кодов в формате с фиксированной точкой.

3.1. Представление операндов в прямом коде Представление операнда в прямом коде состоит из двух частей:

- знака числа, под него отводится крайний левый бит (старший);

- модуля числа.

Если число положительное – знак кодируется 0, а если отрицательное, то 1.

Рассмотрим примеры представления целых операндов в этом коде:

K1=51(8)=101001(2).

[K]1= 0 0 1 0 1 0 0 K2= – 51(8)= – 101001(2).

[K]2= 1 0 1 0 1 0 0 Рассмотрим примеры представления дробных операндов в этом коде:

M1=0,15(8)=0,001101(2).

[M]1= 0 0 0 1 1 0 1 M2= – 0,15(8)= – 0,001101(2).

[M]2= 1 0 0 1 1 0 1 Рассмотрим примеры представления смешанных операндов в этом коде для шестнадцатиразрядного процессора (по 8 бит под целую и дробную части числа):

L1=51,15(8)=101001,001101(2).

[M]1= 0 0 1 0 1 0 0 1 0 0 1 1 0 1 0 L2= – 51,15(8)= – 101001,001101(2).

[M]2= 1 0 1 0 1 0 0 1 0 0 1 1 0 1 0 Достоинство прямого кода состоит в том, что в нем более просто реализуются алгоритмы выполнения «длинных» операций – умножения и деления.

Недостатками прямого кода являются:

1) двойное представление нуля:

0 0 0 0 0 0 0 0 = +1 0 0 0 0 0 0 0 = –0, которое должно быть учтено либо аппаратными, либо программными средствами;

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

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

Дополнительный код отрицательного числа получается:

1) для целых чисел – дополнением до модуля, по которому работает процессор (отсюда и название кода);

2) для дробных чисел – дополнением до 1 (так как модуль, по которому работает процессор, равен 1);

3) для смешанных чисел – комбинацией 1) и 2).

Знак кодируется 1.

Рассмотрим примеры представления целых операндов в этом коде:

K1=51(8)=101001(2).

[K1]2= 0 0 1 0 1 0 0 K2= – 51(8)= – 101001(2).

Так как восьмиразрядный процессор (1 бит под знак) работает по модулю 128(10)=200(8), то дополнением 51(8) до 200(8) будет:

2 0 0(8) – 5 1(8) = 1 2 7(8) Таким образом:

[K2]2= 1 1 0 1 0 1 1 Рассмотрим примеры представления дробных операндов в этом коде:

M1=0,15(8)=0,001101(2).

[M1]2= 0 0 0 1 1 0 1 M2= – 0,15(8)= –0,001101(2) Так как восьмиразрядный процессор (1 бит под знак) работает по модулю 1(10)=1(8), то дополнением 0,15(8) до 1(8) будет:

1, 0 0(8) – 0, 1 5(8) = 0, 6 3(8) Таким образом:

[M2]2= 1 1 1 0 0 1 1 Этот способ получения дополнительного кода следует из теории чисел. На самом деле, дополнительный код числа в цифровом процессоре (с учетом формата представления) получается по следующему алгоритму:

1) если число положительное, то в знаковый бит записывается 0, а само число – в остальную разрядную сетку;

2) если число отрицательное, то в знаковый бит записывается 1, а остальные биты получаются инверсией разрядов числа с добавлением 1 в младший разряд.

Например, число 51,15(8)=101001,001101(2) в шестнадцатиразрядном процессоре будет представлено в дополнительном коде как 0 0 1 0 1 0 0 1 0 0 1 1 0 1 0 знак целая часть дробная часть А число – 51,15(8)= – 101001,001101(2) в шестнадцатиразрядном процессоре будет представлено в дополнительном коде как 1) кодирование знака числа и инверсия разрядов;

1 1 0 1 0 1 1 0 1 1 0 0 1 0 1 знак целая часть дробная часть 2) прибавление 1 к младшему биту;

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

1) если знаковый бит равен 0 (число положительное), то знак числа – «плюс», а само число берется из остальных битов;

2) если знаковый бит равен 1 (число отрицательное), то знак числа – «минус», а остальные разряды числа получаются инверсией битов с добавлением 1 в младший бит.

Например, если в шестнадцатиразрядном процессоре (в смешанном формате с ФТ) операнд Х в дополнительном коде представлен как 1 1 0 1 0 1 1 0 1 1 0 0 1 1 0 знак целая часть дробная часть Тогда представление числа Х в двоичной системе счисления будет со знаком «минус», и разряды числа, полученные инверсией битов с добавлением 1 в младший, будут равняться:

– 0 1 0 1 0 0 1 0 0 1 1 0 0 1 целая часть дробная часть + – 0 1 0 1 0 0 1 0 0 1 1 0 1 0 Х= – 101001,001101(2).

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

Недостатками дополнительного кода являются:

1) несимметричный диапазон представления положительных и отрицательных чисел в цифровом процессоре (диапазон отрицательных больше на одно число, чем положительных);

2) более сложные по сравнению с прямым кодом алгоритмы операций умножения и деления.

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

Для примера, возьмем пятиразрядный процессор, крайний левый разряд которого знаковый. Диапазон представления целых чисел в формате с ФТ в таком процессоре от –24 до 24 – 1, т.е. от –16 до 15.

Для представления числа, равного (–16(10)), описанный выше алгоритм перевода не подходит. Согласно ему (так как – 16(10)= – 10000(2)) знак «минус» даст 1 в знаковый бит, инверсия остальных разрядов с добавлением 1 дает 10000. Итого получается 6 бит, что превышает разрядную сетку процессора. Поэтому алгоритм представления максимального (по модулю) отрицательного числа иной, а именно: в знаковый бит записывается 1, все остальные биты равны 0. Аналогично, при переводе в двоичную систему счисления максимального отрицательного числа знак будет «минус», само число равно 100…0, где количество нулей будет (n – 1). Здесь n – разрядность процессора.

3.3. Представление операндов в обратном коде Обратный код положительного числа совпадает с самим числом, а знаковый разряд кодируется 0.

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

K1=51(8)=101001(2).

[K1]3= 0 0 1 0 1 0 0 K2= – 51(8)= – 101001(2).

Таким образом:

[K2]3= 1 1 0 1 0 1 1 Достоинствами обратного кода являются:

1) знаковый и числовые биты операнда составляют единый код, поэтому просто реализуются алгоритмы сложения и вычитания (но следует отметить, что они немного сложнее, чем в дополнительном коде);

2) симметричный диапазон представления положительных и отрицательных чисел в цифровом процессоре.

Недостатками обратного кода являются:

1) двойное представление нуля:

0 0 0 0 0 0 0 0 = +1 1 1 1 1 1 1 1 = – 0, которое должно быть учтено либо аппаратными, либо программными средствами;

2) более сложные по сравнению с прямым кодом алгоритмы операций умножения и деления.

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

4.1. Алгоритмы операции сложения Существуют два основных способа сложения в цифровых процессорах – последовательный и параллельный.

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

Рассмотрим этот способ на примере сложения чисел, представленных в десятичной системе счисления. Пусть надо получить сумму S=K1+K2, где K1=265(10); K2=346(10).

Тогда такое сложение будет выполнено за три такта:

Перенос Перенос 1-е сла- 2-е сла- Такты из предыдущего Сумма в следующий гаемое гаемое разряда разряд 1 5 6 0 1 2 6 4 1 1 3 2 3 1 6 Сложение в одном разряде двоичной системы счисления можно представить табл. 4.1 (где Xi, Yi – значения слагаемых в i-м разряде;

Ci – 1 – перенос из предыдущего разряда; Si – сумма в i-м разряде; Ci – перенос в следующий разряд).

Таблица 4.Сложение двух двоичных разрядов Xi Yi Ci – 1 Si Ci 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 0 1 1 0 0 1 1 1 1 Рассмотрим на примере последовательный способ сложения чисел X и Y в пятиразрядном цифровом процессоре (какой код используется, не имеет значения, поскольку числа положительные).

X=7(10)=111(2);

Y=2(10)=10(2).

X= 0 0 1 1 Y= 0 0 0 1 Такты Xi Yi Ci – 1 Si Ci 1 1 0 0 1 2 1 1 0 0 3 1 0 1 0 4 0 0 1 1 5 0 0 0 0 В результате сложения получена сумма, равная S= 0 1 0 0 Проверим результат: 7(10)+2(10)=9(10)=1001(2).

Далее в пособии при изучении алгоритмов арифметических операций в цифровых процессорах будут рассматриваться и соответствующие им структуры операционных автоматов (ОА). Операционный автомат – это часть цифрового устройства, в которой выполняются действия над операндами, находящимися в регистрах. Вначале рассмотрим общую структуру цифрового устройства (ЦУ), составной частью которого является ОА (рис. 4.1).

На рисунке приняты следующие сокращения:

КОП – код операции, которую выполняет ЦУ по сигналу «старт»;

ОП – оперативная память;

ОА – операционный автомат;

УА – управляющий автомат, обеспечивающий выполнение цифровым устройством алгоритма заданного КОП;

{Y} – управляющие сигналы от УА, соответствующие возможным микрооперациям в ОА;

{X} – осведомительные сигналы (флаги) от ОА, передаваемые в УА, для управления ходом алгоритма, значение которых определяется результатом выполненной микрооперации.

Рис. 4.1. Общая структурная схема цифрового устройства В состав ОА входят регистры, триггеры, комбинационные схемы, связанные между собой и УА таким образом, чтобы можно было выполнить определенный алгоритм (алгоритмы). УА и ОА вместе образуют простой цифровой процессор. Если этот цифровой процессор универсальный и предназначен для выполнения операций сложения, вычитания, умножения, деления, то КОП определяет, какую именно операцию будет выполнять процессор при подаче сигнала «старт».

Структура операционного аппарата для выполнения алгоритма сложения последовательным способом приведена на рис. 4.2.

Рис. 4.2. Функциональная схема ОА для операции сложения последовательным способом На этой функциональной схеме (и всех последующих) прямоугольниками обозначены регистры (устройства для хранения информации), трапецией – комбинационные схемы (устройства для преобразования информации без ее запоминания). Назначение регистров и комбинационных схем на рис. 4.2 таково:

Р1 – регистр для хранения операнда X;

Р2 – регистр для хранения операнда Y;

РСМ – регистр для хранения суммы;

СМ – одноразрядный сумматор (работает в соответствии с табл. 4.1);

CF – флаг (триггер) переноса;

RS – сигнал сдвига вправо регистра на один разряд;

0 … (n–1) – разрядность регистра (процессора).

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

Схема ОА для алгоритма сложения параллельным способом представлена на рис. 4.3.

Рис. 4.3. Функциональная схема ОА для операции сложения параллельным способом Р1 – регистр для хранения операнда X;

РСМ – регистр для хранения операнда Y, а затем для хранения полученной суммы S;

0…(n–1) – разрядность регистра (процессора);

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

СМ – n-разрядный сумматор, который может работать или в дополнительном, или в обратном коде;

СФФ – схема формирования флагов;

РФ – четырехбитный регистр флагов (содержит 4 бит);

СF – флаг переноса (carry flag);

ZF – флаг равенства 0 результата операции (zero flag). Если результат операции равен 0, то ZF = 1, в противном случае – 0;

SF – флаг знака (sign flag). В него записывается значение знакового разряда результата;

OF – знак переполнения (overflow flag). Если полученный результат не помещается в разрядной сетке процессора, ОF=1, в противном случае – 0;

ШФ – шинный формирователь позволяет управлять шиной данных либо на прием, либо на передачу.

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

Так как в этом конкретном ОА для ввода операнда предусмотрена только одна шина данных, то для того чтобы сложить операнды X и Y, нужно последовательно, друг за другом, выполнить два следующих алгоритма: «посылка X» и «сложение Y».

Алгоритмы этих операций представлены на рис. 4.4 и 4.5.

Рис. 4.4. Алгоритм Рис. 4.5. Алгоритм операции «посылка X» операции «сложение Y» 4.1.1. Алгоритм сложения операндов в дополнительном коде Так как в данном коде знаковый и числовой разряды рассматриваются как единое целое, то сумматор дополнительного кода выполняет над ними одинаковые действия.

Покажем примеры сложения S=X+Y в разных форматах для восьмиразрядного процессора. Рассмотрим сложение для формата целых чисел с ФТ.

Пример 1. X=53(8)=101011(2); Y=35(8)=11101(2).

[X]2 0 0 1 0 1 0 1 [Y]2 + 0 0 0 1 1 1 0 [S]2 = 0 1 0 0 1 0 0 SF=0; СF=0; ZF=0; OF=0.

Переведем полученный результат в восьмеричную систему счисления. Получаем S=110(8). Выполним проверку сложения через восьмеричную систему:

X 5 Y + 3 S = 1 1 Результат верен.

Пример 2. X=53(8)=101011(2); Y= – 35(8)= – 11101(2) [X]2 0 0 1 0 1 0 1 [Y]2 + 1 1 1 0 0 0 1 [S]2 = 0 0 0 0 1 1 1 SF=0; СF=1; ZF=0; OF=0.

Переведем полученный результат в восьмеричную систему счисления. Получаем S=16(8). Выполним проверку сложения через восьмеричную систему:

X 5 Y – 3 S = 1 Результат верен.

Пример 3. X= – 53(8)= – 101011(2); Y=35(8)=11101(2).

[X]2 1 1 0 1 0 1 0 [Y]2 + 0 0 0 1 1 1 0 [S]2 = 1 1 1 1 0 0 1 SF=1; СF=0; ZF=0; OF=0.

Переведем полученный результат в восьмеричную систему счисления. Так как результат сложения имеет отрицательный знак, то вначале нужно перевести его из дополнительного кода в двоичную систему счисления. Получаем S= – 0001110(2)= – 1110(2)= – 16(8). Выполним проверку сложения через восьмеричную систему:

X 5 – Y + 3 S = 1 – Результат верен.

Рассмотрим сложение для формата дробных чисел с ФТ.

Пример 4. X= – 0,53(8)= – 0,101011(2); Y=0,35(8)=0,11101(2).

[X]2 1 0 1 0 1 0 1 [Y]2 + 0 0 1 1 1 0 1 [S]2 = 1 1 1 0 0 1 0 SF=1; СF=0; ZF=0; OF=0.

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

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

Получим S= – 0,0011100(2)= – 0,001110(2)= – 0,16(8). Выполним проверку сложения через восьмеричную систему:

X – 0, 5 Y + 0, 3 S = – 0 1 Результат верен.

Пример 5. X=0,53(8)=0,101011(2); Y=0,35(8)=0,11101(2).

[X]2 0 1 0 1 0 1 1 [Y]2 + 0 0 1 1 1 0 1 [S]2 = 1 0 0 1 0 0 0 SF=1; СF=0; ZF=0; OF=1.

Pages:     | 1 | 2 || 4 | 5 |   ...   | 13 |






















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

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