WWW.DISSERS.RU

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

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


Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 13 |

Результат сложения двух положительных чисел имеет отрицательный знак. Это произошло потому, что сумма не поместилась в 7 бит и заняла еще один (знаковый) бит. Такой случай называется «исключительным». Поскольку при выполнении арифметических операций могут быть и другие «исключительные» случаи, например деление на 0, то каждый такой случай получил свое название. Этот называется «переполнение». В случае переполнения разрядной сетки регистр РСМ содержит неправильный результат сложения. Результатом сложения будет значение OF=1. Более подробно о переполнении будет сказано далее.

Из рассмотренных примеров видно, что алгоритм сложения дробных чисел в формате с ФТ ничем не отличается от алгоритма сложения целых чисел в формате с ФТ.

Рассмотрим сложение для формата смешанных чисел с ФТ в шестнадцатиразрядном процессоре (8 бит – целая часть и знак, 8 бит – дробная).

Пример 6. X= –53,15(8)= –101011,001101(2); Y=35, 11(8)=11101,001001(2).

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

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

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

Таким образом, видно, что сложение чисел в любом формате с ФТ происходит по одному и тому же алгоритму.

4.1.2. Алгоритм сложения операндов в обратном коде Отличие алгоритма сложения в обратном коде от алгоритма сложения в дополнительном коде состоит в том, что сложение выполняется в два этапа. На первом этапе складываются операнды, а на втором к полученной сумме прибавляется значение флага CF, полученного при сложении операндов.

Так же как и в дополнительном коде, алгоритм сложения в обратном коде одинаков для всех форматов с ФТ. Рассмотрим пример сложения целых чисел в формате с ФТ на восьмиразрядном процессоре.

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

1-й этап:

[X]3 0 0 1 0 1 0 1 [Y]3 + 1 1 1 0 0 0 1 [S]3 = 0 0 0 0 1 1 0 СF=1;

2-й этап:

[S]3 0 0 0 0 1 1 0 CF + 0 0 0 0 1 1 1 SF=0; СF=0; ZF=0; OF=0.

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

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

4.1.3. «Исключительные» случаи при выполнении операции сложения (вычитания) В цифровом процессоре при сложении или вычитании (алгоритмы вычитания будут рассмотрены далее) возможны случаи, когда полученный результат не помещается в разрядную сетку процессора.

В одном из ранее рассмотренных примеров при сложении возникло переполнение разрядной сетки. Такой случай называется «исключительным», так как алгоритм сложения (вычитания) не может быть завершен с получением правильного результата. В алгоритме сложения или вычитания предусматривается ветвь для обработки этой ситуации. «Исключительный» случай переполнения разрядной сетки получил название – «переполнение». Переполнение может быть обнаружено или аппаратными, или программными средствами по одному из следующих способов.

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

X=53(8)=101011(2); Y=161(8)=1110001(2).

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

Флаг OF=1, так как знаки исходных слагаемых положительные, а знак суммы – отрицательный. В этом случае результатом операции сложения будет значение флага OF=1, а не значение регистра РСМ (там неверный результат).

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

Второй способ основан на использовании модифицированного кода.

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

00 – нет переполнения, сумма положительная;

01 – переполнение в область положительных чисел;

10 – переполнение в область отрицательных чисел;

11 – нет переполнения, сумма отрицательная.

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

X=53(8)=101011(2); Y=61(8)=110001(2).

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

Флаг OF=1, так как знаковые биты суммы равны 01 (переполнение в область положительных чисел). В этом случае результатом операции сложения будет значение флага OF=1, а не значение регистра РСМ (там неверный результат).

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

Третий способ основан на сравнении значений переносов из старшего числового бита в знаковый и из знакового бита – во флаг CF. Если значение переносов равны – переполнения нет, если не равны – есть переполнение. Также по их значению можно определить, в какую область произошло переполнение:

00 – нет переполнения, сумма положительная;

01 – переполнение в область положительных чисел;

10 – переполнение в область отрицательных чисел;

11 – нет переполнения, сумма отрицательная.

Рассмотрим пример для восьмиразрядного процессора, работающего в дополнительном коде с целыми числами в формате с ФТ (строка «С» таблицы показывает значение переносов).

X=53(8)=101011(2); Y=161(8)=1110001(2).

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

Флаг OF=1, так как значение переноса из старшего числового бита равно 1, а из знакового бита равно 0 (переполнение в область положительных чисел). В этом случае результатом операции сложения будет значение флага OF=1, а не значение регистра РСМ (там неверный результат).

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

4.1.4. Алгоритм вычитания операндов В настоящее время в цифровых процессорах используется как сумматор, так и вычитатель. Вычитатель – это комбинационная схема на два входа и один выход, во многом аналогичная сумматору. На один вход подается уменьшаемое, на другой – вычитаемое, а на выходе получается разность. Но в простых цифровых процессорах нет вычитателя, и для операции вычитания используется сумматор.

В этом случае операция вычитания Х – Y выполняется на сумматоре как Х+( –Y). Поэтому в ОА для сложения параллельным способом, который представлен ранее на рис. 4.3, есть две микрооперации:

инверсия РСМ и прибавление 1 в младший разряд сумматора:

РСМ:= РСМ;

СМ:= СМ+1.

Вместе эти две микрооперации позволяют получить на входе сумматора СМ значение операнда, находящегося в РСМ в дополнительном коде со знаком «минус», а первая из них – значение операнда, находящегося в РСМ в обратном коде, со знаком «минус».

Рассмотрим пример вычитания X – Y для восьмиразрядного процессора, работающего в дополнительном коде, с целыми числами в формате с ФТ, не имеющего вычитателя. Это вычисление будет выполнено как X+( –Y).

X=53(8)=101011(2); Y=35(8)=11101(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 Результат верен.

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

4.1.5. Алгоритмы сложения и вычитания целых чисел без знака (беззнаковая или модульная арифметика) Такая арифметика используется в цифровом процессоре для целых чисел в формате с ФТ, если все биты регистра рассматриваются как числовые (нет знакового бита). Она используется не для проведения арифметических расчетов, а для специальных арифметических вычислений. Например, вычисления смещения в командах условной и безусловной передачи управления на языках Assembler или С++.

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

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

Пример 1. X+Y, где X=62(8)=110010(2); Y=225(8)=10010101(2).

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

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

X 6 Y + 2 2 S = 3 0 Mod400(S)=Mod400(307)=307.

Результат верен.

Пример 2. X+Y, где X=262(8)=10110010(2); Y=225 (8)=10010101(2).

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

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

X 2 6 Y + 2 2 S = 5 0 Mod400(S)=Mod400(507)=107.

Результат верен.

Пример 3. X – Y, где X=62(8)=110010(2); Y=225(8)=10010101(2); – Y= – 225(8)=01101011(2).

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

Переведем полученный результат в восьмеричную систему счисления. Зная, что значение разности отрицательно и в дополнительном коде, вначале переведем его в двоичную систему счисления. Получим 01100011(2)=1100011(2), S=143(8). Выполним проверку вычитания через восьмеричную систему:

X 2 2 Y – 6 S = 1 4 Mod400(S)=Mod400(143)=143.

Результат верен.

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

Различают три типа сдвига:

- логический;

- циклический;

- арифметический.

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

4.2.1. Логический сдвиг При логическом сдвиге все биты регистра перемещаются влево или вправо на константу сдвига с заполнением освобождающихся битов нулями. Примем следующие обозначения: LS – левый сдвиг (left shift); RS – правый сдвиг (right shift).

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

<логический сдвиг>(<регистр>,<константа сдвига>).

Например, логический сдвиг влево на 3 бит регистра РСМ будет записан как LS(РСМ,3). Рассмотрим примеры выполнения арифметического сдвига. Пусть регистр Р восьмиразрядного процессора хранит операнд 01110111.

Пример 1.

Регистр Р до сдвига 0 1 1 1 0 1 1 Регистр Р после сдвига RS(Р,2) 0 0 0 1 1 1 0 CF=; SF=0; ZF=0; OF=0.

Пример 2.

Регистр Р до сдвига 0 1 1 1 0 1 1 Регистр Р после сдвига LS(Р,1) 1 1 1 0 1 1 1 CF=0; SF=1; ZF=0; OF=0.

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

4.2.2. Циклический сдвиг Циклический сдвиг выполняется таким образом, что значения выдвигаемых битов записываются на место освобождающихся (как бы по циклу). В эту цепь сдвига может включаться флаг переноса, а может и не включаться (зависит от процессора). Примем следующие обозначения: LC – левый циклический сдвиг (left cycle); RC – правый циклический сдвиг (right cycle).

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

<циклический сдвиг>(<регистр>,<константа сдвига>).

Например, циклический сдвиг влево на 2 бит регистра РСМ будет записан как LС(РСМ,2). Рассмотрим примеры выполнения циклического сдвига. Пусть регистр Р восьмиразрядного процессора хранит операнд 01110111.

Пример 1 (в цепь сдвига не включается флаг CF).

Регистр Р до сдвига 0 1 1 1 0 1 1 Регистр Р после сдвига LС(Р,2) 1 1 0 1 1 1 0 CF=<без изменения>; SF=1; ZF=0; OF=0.

Пример 2 (в цепь сдвига не включается флаг CF).

Регистр Р до сдвига 0 1 1 1 0 1 1 Регистр Р после сдвига RC(Р,1) 1 0 1 1 1 0 1 CF=<без изменения>; SF=1; ZF=0; OF=0.

Пример 3 (в цепь сдвига включается флаг CF, значение которого до сдвига равно 1).

Регистр Р до сдвига 0 1 1 1 0 1 1 Регистр Р после сдвига LС(Р,1) 1 1 1 0 1 1 1 CF=0; SF=1; ZF=0; OF=0.

Пример 4 (в цепь сдвига включается флаг CF, значение которого до сдвига равно 0).

Регистр Р до сдвига 0 1 1 1 0 1 1 Регистр Р после сдвига RC(Р,1) 0 0 1 1 1 0 1 CF=1; SF=0; ZF=0; OF=0.

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

4.2.3. Арифметический сдвиг Арифметический сдвиг выполняется с учетом знака операнда, поэтому алгоритм его выполнения зависит от кода, в котором работает процессор. Арифметический сдвиг операнда влево на 1 бит эквивалентен увеличению его в два раза, а арифметический сдвиг вправо на 1 бит эквивалентен делению операнда на 2. Примем следующие обозначения: AL – левый арифметический сдвиг (arithmetical left); AR – правый арифметический сдвиг (arithmetical right).

Операция арифметического сдвига будет обозначаться:

<арифметический сдвиг>(<регистр>,<константа сдвига>).

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

Рассмотрим примеры выполнения арифметического сдвига в прямом коде.

Пример 1. Пусть регистр Р восьмиразрядного процессора хранит операнд 01110111.

Регистр Р до сдвига 0 1 1 1 0 1 1 Регистр Р после сдвига AL(Р,1) 0 1 1 0 1 1 1 CF=<без изменения>; SF=0; ZF=0; OF=1, т.е. возникло переполнение (старший сдвигаемый числовой бит равен 1).

Пример 2. Пусть регистр Р восьмиразрядного процессора хранит операнд 00000111.

Регистр Р до сдвига 0 0 0 0 0 1 1 Регистр Р после сдвига AR(Р,1) 0 0 0 0 0 0 1 CF=1; SF=0; ZF=0; OF=0.

До сдвига Р=7(8), а после сдвига Р=3(8) (результат деления 7(8) нацело на 2).

Пример 3. Пусть регистр Р восьмиразрядного процессора хранит операнд 10000111.

Регистр Р до сдвига 1 0 0 0 0 1 1 Регистр Р после сдвига AL(Р,1) 1 0 0 0 1 1 1 CF=1; SF=1; ZF=0; OF=0.

До сдвига Р= –7(8), а после сдвига Р= –16(8) (результат умножения 7(8) на 2).

4.2.3.2. Алгоритм арифметического сдвига в дополнительном коде При арифметическом сдвиге в дополнительном коде сдвигаются все биты, включая знаковый бит.

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

Возможно возникновение переполнения, которое определяется процессором, одним из тех способов, что и при сложении (вычитании).

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

Пример 1. Пусть регистр Р восьмиразрядного процессора хранит операнд 01110111.

Регистр Р до сдвига 0 1 1 1 0 1 1 Регистр Р после сдвига AL(Р,1) 1 1 1 0 1 1 1 CF=0; SF=1; ZF=0; OF=1, т.е. возникло переполнение (есть перенос из старшего числового бита, а из знакового нет).

Пример 2. Пусть регистр Р восьмиразрядного процессора хранит операнд 00000111.

Регистр Р до сдвига 0 0 0 0 0 1 1 Регистр Р после сдвига AR(Р,1) 0 0 0 0 0 0 1 CF=1; SF=0; ZF=0; OF=0.

До сдвига Р=7(8), а после сдвига Р=3(8) (результат деления нацело 7(8) на 2).

Пример 3. Пусть регистр Р восьмиразрядного процессора хранит операнд 11100111.

Регистр Р до сдвига 1 1 1 0 0 1 1 Регистр Р после сдвига AL(Р,1) 1 1 0 0 1 1 1 CF=1; SF=1; ZF=0; OF=0.

До сдвига Р= –31(8), а после сдвига Р= – 62(8) (результат умножения (– 31(8)) на 2).

Pages:     | 1 |   ...   | 2 | 3 || 5 | 6 |   ...   | 13 |






















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

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