![]() |
![]() |
![]() |
![]() |
Главная Кремниевые микросхемы 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [ 23 ] 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 Это не является настоящим переполнением, так как остальная часть числа не есть 1111111Ь. По приведенной выше таблице десятичных и двоичных чисел в дополнительном коде убеждаемся в том, что число 0000001 Ь есть Зю, т. е. получился правильный ответ. Вычислим Зю-5io или Зю-Ь {-бю) =-2io: Зю есть Ш0000112 (уменьшаемое) -5io в дополнительном коде есть HlllOllg (вычитаемое) В результате сложения получим IIIIIIIO2 (разность) без переноса из старшего разряда. По таблице убеждаемся, что полученное число IIIIIIIO2 соответствует отрицательному десятичному числу -2)0, т. е. получился правильный результат. Если эти примеры понятны, то выполните следующий. Вычислите -3о-1-(-5ю), чтобы усвоить выполнение сложения двух отрицательных чисел (-3io) + (-5ю) =-810: -3о в дополнительном коде есть 1111 ПОЬ -5ю в дополнительном коде есть 1111 101Ь В результате сложения получим 1111 IOOO2 и единицу переноса из старшего разряда. Находим по таблице, что число IIIIIOOO2 соответствует отрицательному десятичному числу -810; результат - правильный. Однако как быть с возникающими в процессе вычислений переносами из крайнего левого разряда? Если про-инвертировать сигнал переноса, то получится С (нет переноса). Представление С в качестве сигнала заема при выполнении вычитания может быть весьма полезным. Вычитание выполняется путем сложения уменьшаемого с вычитаемым в дополнительном коде, так что перенос при сложении в дополнительном коде служит той же цели, что и заем в обычном вычитании. Сигнал переноса из старшего разряда 8-разрядного числа может быть использован при вычитании 16-разрядных чисел, выполняемом с участием 8-разрядного сумматора точно так же, как это делалось при сложении. Все, что необходимо при этом, это записать сигнал переноса в одноразрядный регистр флага после сложения восьми младших разрядов и учесть этот сигнал в качестве сигнала входного переноса при сложении следующих восьми разрядов. 4-979 73 Выполним в качестве примера вычитание следующих 16-разрядных чисел: 01100001 ЮООЮОЬ уменьшаемое минус 01000001 ОООЮООЬ вычитаемое. Сначала находим представление числа (01000001 ОООЮООЬ) в дополнительном коде: обратный код вычитаемого числа 10111110 IIIOIIIO2 прибавим единицу получим дополнительный код 10111110 IIIOIIII2 выполним сложение: 01100001 IOOOIOOI2 -flOlllUO IIIOIIII2 00100000 OIIIIOOO2 перенос 1 перенос 1 Полученный ответ является положительной разностью двух 16-разрядных чисел, а имеющийся перенос из крайнего левого разряда указывает на то, что знак результата совпадает со знаком уменьшаемого (С = 0. За-ема не было, так как уменьшаемое было больше вычитаемого). Если по окончании каждого процесса вычисления сигнал окончательного переноса отсутствует (С=0), то С = = 1, т.е. должен был быть окончательный заем. Это просто означает, что вычитаемое было больше уменьшаемого. Последний пример вычитания 16-разрядных чисел можно выполнить по частям в одном 8-разрядном сумматоре. Сначала производится сложение в дополнительном коде самых младших двоичных разрядов каждого числа: ,100010012 111011112 01111000, и запоминание единицы переноса (т.е. установка флага переноса). Этот ответ пересылается обратно в память, и выполняется следующая половина вычислений с учетом сигнала переноса: ,011000012 101111102 I2 перенос из первой половины числа OOIOOOOO2 и перенос 1 из второй половины числа. Эта часть результата также заносится в память Что такое знаковый разряд? Как видно из рассмотренных примеров, при выполнении вычислений необходим указатель знака числа (положительного или отрицательного). Для этой цели используется старший двоичный разряд (крайний слева). Его установка в состояние О соответствует положительному числу, а 1 - отрицательному. Этот специально выделенный разряд называется знаковым разрядом, остальные- разрядами модуля числа. Это означает, что два 8-разрядных слова могут содержать 15 разрядов для представления модуля числа и 1 разряд для его знака. Таким образом, можно оперировать с любыми целыми числами в диапазоне от 01111111111111112, что соответствует положительному десятичному числу -f 32767,0, до IOOOOOOOOOOOOOOO2, что соответствует отрицательному десятичному числу -32768,0. При выполнении операций с восьмиразрядными словами с отведенным для знака самым старшим разрядом можно оперировать с любыми целыми числами в диапазоне от 011111112, или +127,0, до IOOOOOOO2, или -128,i. Если попытаться сложить два больших положительных числа, превышающих в сумме OIIIIIII2, то 8-разрядные регистры не смогут обеспечить получение правильного результата: О IIIIIOO2 = 124io О IIOOIII2 = ЮЗц, 1 1100011 Ф 227io знак модуль Ответ будет неверным из-за ошибки переполнения. В действительности происходит следующее: после прибавления числа Зю в регистре будет наибольшее возможное число, соответствующее заполнению единицами всех семи рлзрядов модуля, г. е. число 011111II2 (-Ь127ш). Для получения правильного результата не- 4* 75 |
© 2007 EPM-IBF.RU
Копирование материалов разрешено в случае наличия письменного разрешения |