0Лекция КОДИРОВАНИЕ ОТРИЦАТЕЛЬНЫХ ЧИСЕЛ. СЛОЖЕНИЕ ДВОИЧНЫХ ЧИСЕЛ С ФИКСИРОВАННОЙ ЗАПЯТОЙ План 1. Машинные коды: прямой, дополнительный и обратный 2. Сложение и вычитание двоичных чисел с фиксированной запятой ЛИТЕРАТУРА 1.Лысиков Б.Г. Арифметические и логические основы цифровых автоматов. Минск. «Вышейшая школа» . 1980 г. 2.Информатика. Учебник под редакцией Макаровой 3.Нешумова К.А.ЭВМ и системы. Москва. Высшая школа. 1989г. Для выполнения операций в ЭВМ числа кодируются специальными машинными кодами. Используются прямой, дополнительный и обратный коды, позволяющие заменить операцию непосредственного вычитания операцией сложения чисел с целью упрощения АЛУ ЭВМ. Прямой код. Он основан на представлении чисел в виде их абсолютного значения с кодом соответствующего знака: плюса или минуса. Формула для образования прямого кода двоичного числа А = 0, а1 а2 а3 … а n имеет вид А, если А 0; А пр = 1—А, если А 0. П р и м е р 1.12. (1.4) 1. А = + 0,1101; Апр = 0,1101. 2. А = - 0,10101; Апр =1- (-0,10101) =1,10101. 1 Из (1.4) следует, что нуль в прямом коде может быть положительным и отрицательным: А = + 0,00 . . . 00; Апр = 0,00 . . . 00. А = - 0,00 . . . 00; Апр = 1,00 . . . 00. Прямой код используют для хранения чисел в ЗУ, в устройствах ввода и вывода, а также при выполнении операции умножения. Дополнительный код. Формула для образования дополнительного кода двоичного числа А имеет вид А доп = А, если А 0; 10 + А, если А 0. (1.5) П р и м е р 1.13. А=- 0,101010; Адоп = 10+(- 0,101010)=1,010110. Как видно из выражения (1.5), дополнительный код положительного числа полностью совпадает с изображением числа в прямом коде. Сравнивая отрицательное число А с его дополнительным кодом А доп, можно вывести следующее правило: чтобы записать отрицательное число в дополнительном коде, нужно в знаковом разряде этого числа поставить единицу, а во всех числовых разрядах нули заменить единицами, а единицы – нулями и к полученному результату единицу младшего разряда. П р и м е р 1.14. Записать двоичное число А = - 0,0101 в дополнительном коде. Адоп = 1,1010 + 0,0001 В дополнительном коде отрицательный нуль отсутствует. Обратный код. Формула для образования обратного кода имеет вид А, если А 0; А обр = 10 + А – 10 n, если А 0. (1.6) П р и м е р 1.16. А = - 0,100110. 2 Аобр = 10 – 0,100110 – 0,000001 = 1,011001. Сравнивая отрицательное число А с его обратным кодом Аобр, можно вывести следующее правило: чтобы записать отрицательное число в обратном коде, нужно в знаковом разряде этого числа поставить единицу, а а в числовых разрядах нули заменить единицами, а единицы – нулями. В обратном коде нуль изображается неоднозначно: А = + 0,00 . . . 00; Аобр = 0,00 . . . 00; А = - 0,00 . . . 00; Аобр = 1,11 . . . 11. Обратный код положительного числа полностью совпадает с изображением числа в прямом коде. Модифицированные коды. С точки зрения построения АЛУ они удобны для выявления переполнения разрядной сетки, которое может получиться при сложении чисел. Эти коды отличаются от простых машинных кодов тем, что на изображение знака отводятся два разряда: плюс изображается двумя нулями, а минус – двумя единицами. Преобразование дополнительный и двоичных обратный чисел коды в модифицированные производится по прямой, правилам, рассмотренным выше. П р и м е р 1.17. Представить двоичные числа А1 = + 0,1101101 и А2 =0,1101101 в дополнительном и обратном модифицированных кодах. А1мпр = 00,1101101; А1мдоп = 00,1101101; А1м обр = 00,1101101. А2мпр = 11,1101101; А2мдоп = 11,0010011; А2м обр = 11,0010010. Преобразование чисел в заданный код осуществляется автоматически как при вводе чисел в ЭВМ, так и при выполнении операций. 3 Сложение и вычитание двоичных чисел с фиксированной запятой Сложение чисел в модифицированном дополнительном коде осуществляется по правилам двоичной арифметики. Единица переноса, возникающая в старшем знаковом разряде суммы, отбрасывается. Знаковым разрядом числа является второй слева от запятой разряд; первый разряд служит для анализа переполнения разрядной сетки. П р и м е р 1.18. Сложить в модифицированном дополнительном коде двоичные числа А и В при условии: 1. А 0; В 0; А + В 0. м А = + 0,1101; + А доп = 00,1101 В = + 0,0001; В м доп = 00,0001 (А + В)м доп = 00,1110; (А + В)м пр = 00,1110 2. А 0; В 0; А + В 0. м А = + 0,1101; + А доп = 00,1101 м В = - 0,0001; В доп = 11,1111 Единица переноса (А + В)м доп = 100,1100 из старшего знакового разряда не учитывается (А + В)м пр = 00,1100 3. А 0; В 0; А + В 0. м А = - 0,1101; + А доп = 11,0011 В = + 0,0001; В м доп = 00,0001 (А + В)м доп = 11,0100 (А + В)м пр = 11,1100 4. А <0; В 0; А + В < 0. м А = - 0,1101; + А доп = 11,0011 В = - 0,0001; В м доп = 11,1111 Единица переноса (А + В)м доп = 111,0010 из старшего разряда не учитывается. (А + В)м пр = 11,1110 4 Сложение в модифицированном обратном коде осуществляется так же, как и в дополнительном коде. Отличие состоит в том, что единицу переноса из старшего знакового разряда (если она появляется) необходимо прибавить к младшему разряду суммы, т. е. образуется циклический перенос. П р и м е р 1.19. Сложить в модифицированном обратном коде двоичные числа А и В при условии: 1. А 0; В 0; А + В 0. А = + 0,1101; В = + 0,0001; +А м обр = 00,1101 В м обр = 00,0001 (А + В)м обр = 00,1110 (А + В)м пр = 00,1110 2. А 0; В 0; А + В 0. А = + 0,1101; В = - 0,0001; +А м обр = 00,1101 В м обр = 11,1110 (А + В)м обр = 100, 1011 Циклический перенос +1 м (А + В) обр = 00, 1100 (А + В)м пр = 00, 1100 3. А 0; В 0; А + В 0. м А = - 0,1101; + А обр = 11,0010 В = + 0,0001; В м обр = 00,0001 (А + В)м обр = 11,0011 (А + В)м пр = 11,1100 4. А 0; В 0; А + В 0. м А = - 0,1101; + А обр = 11,0010 м В = - 0,0001; В обр = 11,1110 А + В)м обр = 111, 0000 Циклический перенос +1 (А + В)м обр = 11,0001 (А + В)м пр = 11,1110 Переполнение разрядной сетки при сложении в простых кодах. При сложении двух двоичных чисел, по абсолютной величине меньших единицы, 5 код суммы может по абсолютной величине превысить единицу или стать равным ей. В этом случае произойдет переполнение разрядной сетки, что приведет к ложному результату. Поясним это на примерах (табл.1.4) сложения двоичных чисел в дополнительных кодах. Таблица 1.4 1. А=+0,1101; В=+0,0111; А+В 0 +Адоп=0,1101 Вдоп=0,0111 2. А=+0,1101; В=-0,0111; А+В 0 +Адоп=0,1101 Вдоп=1,1001 3. А=-0,1101; В=+0,0111; А+В 0 4. А=-0,1101; В=-0,0111; А+В 0 +Адоп=1,0011 Вдоп=0,0111 +Адоп=1,0011 Вдоп=1,1001 (А+В)доп=1,0100 (А+В)доп=10,0110 (А+В)доп=1,1010 А+В)доп=10,1100 (А+В)пр=1,1100 (А+В)пр=0,0110 (А+В)пр=1,0110 (А+В)пр=0,1100 В примерах 1 и 4 полученные суммы не соответствуют действительным, т. е. произошло переполнение разрядной сетки. Переполнение разрядной сетки при образовании суммы по абсолютной величине больше 1 можно обнаружить двумя способами. 1. Сравнением знака полученной суммы со знаком действительной суммы. Как видно из примеров 1 и 4 (табл. 1.4.), происходит полное искажение результата сложения как по знаку, так и по величине. 2. Анализом переносов, возникающих при сложении двоичных чисел. Признаками переполнения разрядной сетки являются либо наличие переноса из разряда знака (1-й пример), либо наличие переноса из знакового разряда суммы при отсутствии переноса в этом разряде (4-й пример). Если нет переносов из знакового разряда и в знаковый разряд суммы (3-й пример) или есть оба эти переноса (2-й пример), то переполнения разрядной сетки нет. 6 Переполнение разрядной сетки при сложении в модифицированных машинных кодах обнаруживается способом сравнения знаковых разрядов полученной суммы. Поясним это на следующих примерах: 1. А=+0,1101; В=+0,0111; А+В 0 А м доп = 00,1101 В м доп = 00,0111 ( А+В)м доп = 01,0100; 2. А=-0,1101; В=-0,0111; А+В 0 +А м доп В м доп = 11,0011 = 11,1001 (А+В) м доп =110,1100 теряется Как видно из примеров, в знаковых разрядах полученной суммы положительных слагаемых имеем комбинацию «01», отрицательных – «10», являющихся признаками переполнения разрядной сетки. При отсутствии в ЭВМ вычитающего устройства операция вычитания заменяется операцией сложения. При этом знак вычитаемого заменяется на противоположный: А - В = А + (-В). 7 Контрольные вопросы 1. Представьте целые числа А= 1979 и В= -1979 в форме с фиксированной запятой в двоичной системе счисления в машинных кодах: прямом, дополнительном и обратном. 2. Сложить в дополнительном и обратных кодах двоичные числа с фиксированной запятой: 1. А= -0,101101 и В=+0,110110. 2. А=0,101010 и В=+0,000111. 3. А=-0,111011 и В=+0,100110. 8