Основы бортовых вычислительных машин
Скачать 3.2 Mb.
|
П = А ⋅ В = 1 0 0 0 1 , 1 1 1 0 При выполнении умножения на бумаге можно не указывать по- ложений запятой в частичных произведениях, следует лишь правиль- но записать коды один под другим и произвести их сложение. Поло- жение запятой в произведении определяется числом разрядов в его дробной части, которое равно сумме чисел разрядов в дробных частях множимого и множителя. Деление многоразрядных чисел производится по таким же пра- вилам, как и в десятичной системе счисления. Перед делением в де- лимом и делителе уравнивается количество цифр после запятой путем добавления нулей, затем запятые отбрасываются. Процедура нахож- дения частного иллюстрируется на примере деления числа А = 1100,011 на число В = 10,01: Делимое Делитель 1 1 0 0 , 0 1 1 1 0 , 0 1 0 - 1 0 0 1 0 1 0 1 , 1 0 0 1 1 0 1 1 Частное 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 19 1.2.2 Сложение и умножение чисел по модулю При аппаратурной реализации устройства цифровой обработки информации обычно существуют ограничения на длину разрядной сетки, т.е. количество разрядов целой и дробной части. В этом случае, вне зависимости от реального значения, результат арифметических операций будет также ограничен разрядной сеткой. Пусть цифровое устройство работает только с целыми числами, для записи которых используется n, разрядов. Произведем сложение двоичных чисел А и В. Если сумма С = А + B < 2 n , то она может быть записана в п разря- дах. Но может оказаться, что С ≥ 2 n , в этом случае для регистрации суммы потребовался бы еще один дополнительный разряд слева с ве- сом 2 n . Так как в разрядной сетке этого разряда нет, то результат бу- дет соответствовать остатку от деления суммы С на величину М = 2 n , (деление на 2 n соответствует сдвигу числа вправо на п разрядов). Этот остаток и называется суммой чисел А и В по модулю 2 n . Для обозначения суммы по модулю применяется запись [ ] [ ] 2 mod 2 mod n n B A С + = Операции сложения и умножения чисел по модулю могут про- изводиться в любой системе счисления при любой величине модуля М. Например, при сложении двоичных чисел А = 10110 (2) = 22 (10) и В = 10011 (2) = 19 (10) получаем А + В = 101001 (2) = 41 (10) . В рамках 5 - разрядной сетки старший разряд этой суммы не регистрируется (2 5 = 32). В результате будет зарегистрировано число, равное значению указанной суммы по модулю М = 2 5 : [ ] [ ] (10) (2) 5 5 9 01001 2 mod 101001 2 mod = = = + В А Произведение двоичных чисел А = 01011 (2) и В = 00111 (2) равно А ⋅ В = 1001101 (2) = 77 (10) в рамках пятиразрядной сетки будет зареги- стрировано число, равное значению найденного произведения по мо- дулю 2 5 , т.е.: [ ] [ ] 13 01101 2 mod 1001101 2 mod (10) (2) 5 5 = = = ⋅ В А 1.2.3 Перевод чисел из одной системы счисления в другую Для перевода чисел из системы счисления с основанием q в сис- тему счисления с основанием р могут быть использованы следующие 20 методы: метод непосредственного замещения; метод последовательного деления на основание новой системы счисления; метод последовательного умножения на основание новой систе- мы счисления. Метод непосредственного замещения. Метод применяется для перевода всех видов чисел (целых, дробных и смешанных). Перевод числа из СС с основанием q, в СС с основанием р производится в сле- дующем порядке. 1. Заданное число в СС с основанием q представляется в виде взвешенной суммы (1.1): ∑ − − = = 1 n m i i i q a А 2. Все цифры а i и основание q записываются (замещаются) циф- рами системы счисления с новым основанием р . 3. Выполняются все арифметические операции в соответствии с формулой (1.1) в СС с основанием р . Пример 1: A (10) = 35,25 → A (2) 35,25 (10) = 3 ⋅ 10 1 + 5 ⋅ 10 0 + 2 ⋅ 10 -1 + 5 ⋅ 10 -2 ; ; 1010 1010 1 101 1010 1 10 1 101 1010 11 (2) ⋅ ⋅ + ⋅ + ⋅ + ⋅ = А A (2) ≈ 100011,01. Пример 2 : A (2) = 1001,011 → A (10) 1001,011 (2) = 1 ⋅ 10 3 + 0 ⋅ 10 2 + 0 ⋅ 10 1 + 1 ⋅ 10 0 + 0 ⋅ 10 -1 + 0 ⋅ 10 -2 +1 ⋅ 10 -3 ; A (10) = 1 ⋅ 2 3 + 0 ⋅ 2 2 + 0 ⋅ 2 1 + 1 ⋅ 2 0 + 0 ⋅ 2 -1 + 1 ⋅ 2 -2 + 1 ⋅ 2 -3 ; A (10) = 9,375. Метод непосредственного замещения удобен при переводе чи- сел из любой CC в ту СС, в которой наиболее просто выполняются арифметические операции. При ручном счете этим методом удобно переводить числа в десятичную СС, а при автоматическом переводе с помощью ЭВМ - в двоичную СС. Метод последовательного деления на основание новой системы счисления. Этот метод используется только для перевода целых чисел. Для перевода числа из СС с основанием q, в СС с основанием р необ- ходимо : 1. Представить основание новой СС р в старой СС с основанием q. 2. Последовательно делить число и промежуточные частные деле- 21 ния этого числа на основание новой системы счисления, представ- ленные в старой СС. Полученные остатки и последнее частное будут искомыми изображениями цифр р - ичного числа, выраженные в ста- рой СС. 3. Первый остаток записать в младший разряд, все последующие остатки в более старшие, а последнее частное - в старший разряд чис- ла. 4. Перевести найденные цифры р - ичного числа в СС с основа- нием р . Пример: А (10) = 559 → А (16) 1. q = 16 2. 5 5 9 1 6 - 4 8 3 4 1 6 7 9 3 2 2 1 6 6 4 2 0 0 1 5 2 а 0 (q) = 15 а 1 (q) = 2 а 2 (q) = 2 3. a 0(10) = 15 → a 0(16) = F; a 1(10) = 2 → a 1(16) = 2; a 2(10) = 2 → a 2(16) = 2. 4. A (16) = 22F Ответ: 559 (10) = 22F. Метод последовательного умножения на основание новой сис- темы счисления. Этот метод используется для перевода из одной СС в другую только правильных дробей. При переводе числа из одной СС с основанием q, в другую с основанием р этим методом необхо- димо: 1. Представить основание новой СС р в СС с основанием q. 2. Последовательно умножать это число и промежуточные про- изведения на основание новой СС р, отбрасывая каждый раз целые части произведений. Эти целые части промежуточных произведений являются изображением цифр искомого р - ичного числа, записанные в старой СС. 3. Записать целую часть первого произведения в старший (a -1 ) разряд р - ичного числа, а целые части i - тых произведений в после- дующие a -i разряды. 4. Записать найденные цифры р - ичного числа, выраженные в СС с основанием q, в СС с основанием р . 22 Пример: A (10) = 0,675 → A (2) 1. р (10) = 2 ; 2. 0,675 х 2 = 1,350 a -1 = 1; 0,350 х 2 = 0,7 а -2 = 0; 0,7 х 2 = 1,4 а -3 = 1; 0,4 х 2 = 0,8 а -4 = 0; 0,8 х 2 = 1,6 а -5 = 1; 0,6 х 2 = 1,2 а -6 = 1 и т.д. 3. Так как 1 (10) = 1 (2) , 0 (10) = 0 (2) , то А (2) = 0,101011 и т.д. Дробная часть (частичное произведение), полученная при по- следовательном умножении на основание, часто не принимает значе- ния нуля. В этом случае процесс умножения продолжается до полу- чения количества разрядов, определяемых разрядной сеткой числа или до обеспечения заданной точности представления числа. Для перевода смешанных чисел (содержащих целую и дробную часть) целую часть получают методом деления на основание новой СС, а дробную - методом умножения на основание новой СС. Если основание одной СС является целой степенью основания другого (на- пример 8 = 2 3 , 16 = 2 4 ), то перевод чисел из одной СС в другую су- щественно упрощается, для этого каждую восьмеричную (шестнадца- теричную) цифру заменяют равным ей трехзначным (четырехзнач- ным) двоичным числом, т.е. двоичной триадой (тетрадой). 1.2.4 Понятие о системах счисления в остаточных классах Недостатком позиционных систем счисления является наличие связи между разрядами при выполнении арифметических действий, что проявляется в возникновении и учете распространения переносов и займов от младших разрядов к старшим. Это усложняет аппаратуру и уменьшает быстродействие цифровой ЭВМ. Система счисления в остаточных классах (СОК) является непо- зиционной системой и позволяет выполнять арифметические дейст- вия, кроме деления, во всех разрядах одновременно и независимо (поразрядно). Каждый разряд в СОК имеет свое основание. В качестве основа- ний системы выбирают ряд целых положительных взаимно простых 23 чисел 1 2 , ,..., п р р р . Основания системы определяют диапазон пред- ставления целых чисел от 0 до Р : 1 2 п Р р р р = ⋅ ⋅ ⋅ Любое целое число А, удовлетворяющее условию 0 А P ≤ < , представляется в СОК набором остатков от деления А на основания системы, такое представление является единственным: 1 2 сок п А а а а = ⋅ ⋅ ⋅ , где i а - наименьший неотрицательный остаток от деления числа А на основание ( ( / )) i i i p a ост А р = Пример. Записать число А = 17 в СОК, если 1 p = 3, 2 p = 5, 3 p = 7. Решение. Проверим выполнение условия A P < представимости заданного числа в СОК с основаниями { } 3,5,7 : 3 5 7 105, 17 105 P = ⋅ ⋅ = < Условие представимости числа выполняется (17<105), остатки по заданным основаниям будут следующими: 1 1 2 2 3 3 ( / ) (17 / 3) 2; ( / ) (17 / 5) 2; ( / ) (17 / 7) 3. a ост А р ост a ост А р ост a ост А р ост = = = = = = = = = Следовательно, сок А = 2 2 3 ⋅ ⋅ Рассмотрим правила выполнения арифметических операций. Правило сложения. При выполнении условия представимости, как слагаемых, так и суммы (А < P, B < P, A + B < P), для получения в СОК суммы 1 2 ( ) сок сок п С А В С С С = + = ⋅ ⋅ ⋅ слагаемых сок А и сок В : 1 2 1 2 , , сок п сок п А а а а В в в в = ⋅ ⋅ ⋅ = ⋅ ⋅ ⋅ достаточно сложить остатки одноименных слагаемых (сложение сле- дует производить по модулю соответствующего основания): ( ) / i i i i С ост а в p = + Пример. Сложить в СОК числа A = 8, В = 4 с набором основа- ний { } 3,5,7 Решение. Условия представимости выполняются, так как Р = 3 ⋅ 5 ⋅ 7 = 105; А = 8 < 105, В = 4 < 105, А В + = 8 + 4 = 12 < 105; ( 1 4 4, 2 3 1) сок сок В А = ⋅ ⋅ = ⋅ ⋅ Согласно правилу сложения находим 24 А СОК = 2. 3. 1 + В СОК = 1. 4. 4 3. 7. 5 (А+В) СОК = 0. 2. 5 Действительно, (12) 0 2 5. сок = ⋅ ⋅ Правило умножения. Обозначим «*» символ операции умноже- ния. При выполнении условия представимости ( , , ) А P B P A B P < < ∗ < для получения произведения 1 2 ( ) сок сок п C А В С С С = ∗ = ⋅ ⋅ двух сомножителей сок А и : сок В 1 2 , п А а а а = ⋅ ⋅ 1 2 сок п В в в в = ⋅ ⋅ достаточно перемножить по соответствующим модулям одноименные остатки сомножителей: ( ) / i i i i С ост а в p = ∗ Пример. Перемножить в СОК числа с набором оснований { } 3,5,7 8 А = , 4 В = Решение. Так как 3 5 7 105, 8 105, 4 105, Р А D = ⋅ ⋅ = = < = < 32 105 A B ∗ = < , то А СОК = 2. 3. 1 * В СОК = 1. 4. 4 2. 12 4 (А*В) СОК = 2. 2. 4 Действительно, (32) 2 2 4. сок = ⋅ ⋅ Главное преимущество СОК состоит в том, что основные ариф- метические операции, кроме деления, в СОК выполняют поразрядно, вследствие чего могут быть достигнуты значительно более высокие скорости выполнения операций, чем в позиционных системах. К недостаткам СОК можно отнести: 1. Сложность выполнения операций деления и сравнения чисел. 2. Сложность определения факта переполнения разрядной сетки, т.е. выхода результата за диапазон представления чисел. 3. Сложность обратного перевода чисел из СОК в позиционную СС. Указанные недостатки являются причиной того, что СОК нахо- дят пока ограниченное применение в специализированных ЭВМ, при решении задач, в которых преобладают операции сложения, вычита- ния и умножения. 25 Задания для самостоятельной работы 1. Перевести десятичные числа: 19,5; 32,125; 17,25; 44,5; 27,25; 52,6 в двоичную систему счисления. 2. Перевести двоичные числа: 11011, 101; 1101,011; 10101,11; 11001,101; 100001,1 в десятичную систему счисления. 3. Перевести десятичные числа: 20; 34; 17; 42; 87; 95 в восьме- ричную систему счисления. 4. Перевести десятичные числа 125; 1022; 511; 62; 128; 100; 120 в двоичную систему счисления (в восьмеричную СС; в шестнадцате- ричную СС). 5. Перевести десятичные дроби 0,5; 0,25; 0,375; 0,1; 0,6; 0,1275 в двоичную систему счисления с ошибкой, не превышающей значения 2 -8 6. Записать в двоичной системе счисления число А (8) = 373,25. 7. Записать в восьмеричной системе счисления число А (2) = 0100111010. 8. Записать в восьмеричной системе счисления число А (10) = 389,79. 9. Записать в двоичной системе счисления число А (16) = 3ДF,СА. 10. Записать в восьмеричной системе счисления число А (16) = АF,ДВ2. 11. Записать в десятичной системе счисления число А (16) = АЗFE,2Д. 12. Записать в двоичной системе счисления число А (10) = 67, 125. 13. Записать в двоичной системе счисления число А (10) = 1,678. 14. Записать в восьмеричной системе счисления число А (10) = 29,375. 15. Записать в шестнадцатеричной системе счисления число А (10) = 738,275. 26 1.3 Машинные двоичные коды и действия с ними 1.3.1 Формы представления чисел В ЭВМ применяются две формы представления чисел: с фикси- рованной запятой и с плавающей запятой. Прежде чем рассмотреть каждую из форм представления чисел запишем некоторое произволь- ное число А в виде полинома , 1 1 0 0 2 2 1 1 m m n n n n q а q а q а q а q а А − − − − − − − − ⋅ + + ⋅ + ⋅ + + ⋅ + ⋅ = (1.3) где а i - цифра из алфавита цифр выбранной позиционной системы счисления (ПСС); q i - основание ПСС; i – коэффициент, учитывающий позицию (место расположения) цифры в составе числа. Затем преобразуем формулу (1.3) к виду: 1 A p n m i p i i p M q q a q А ⋅ = ⋅ ⋅ = ∑ − − = − Здесь М А - цифровая часть числа А, называемая его мантиссой, р - це- лое число, которое называют порядком. Множитель q p называют масштабом. Для чисел c фиксированной запятой (ФЗ) величина р постоянна и обычно равна п . При р = п мантисса числа будет правильной дро- бью, причем r A q M − − ≤ 1 , (1.4) где r - количестве разрядов, используемых для записи мантиссы чис- ла. Изображается М А записью вида r A a a a M − − − = , 0 2 1 В машинах с ФЗ любое число А представляется только своей мантиссой, а масштаб q p в машине никак не отображается. Поэтому масштабы чисел необходимо учитывать в алгоритмах решаемых за- дач. Это делается путем масштабирования всех исходных данных и результатов всех операций в математическом списании задачи так, чтобы не допустить нарушения условия (1.4). В противном случае происходит грубое искажение результата из-за потери в ЭВМ стар- ших разрядов мантиссы. Достоинством представления чисел в форме с ФЗ является ма- лый расход оборудования для представления числовой информации и 27 высокая производительность арифметико-логического устройства (АЛУ), обусловленные простотой алгоритмов выполнения арифмети- ческих операций. Недостаток - необходимость осуществления мас- штабирования исходных данных на этапе подготовки вычислений. Представление чисел в форме с плавающей запятой (ПЗ) требует отображения не только мантиссы М А каждого числа, но и его масшта- ба q p . Для представления последнего достаточно записать только его порядок р. Основное достоинство такого представления в том, что отпадает необходимость в масштабировании переменных. Недостат- ком является сложность алгоритмов реализации арифметических опе- раций. Необходимость выполнения действий и над мантиссами чисел, и над их порядками ведет к увеличению объема оборудования и к снижению производительности машин. К бортовым ЦВМ предъявляются жесткие ограничения на мас- согабаритные характеристики и время выполнения арифметических операций. Одним из путей достижения этих ограничений является использование представления чисел с фиксированной запятой. А сами числа должны быть представлены в виде правильных дробей, целая часть которых равна нулю. В связи с этим между числом и его пред- ставлением в ЦВМ существуют отличия. Число, преобразованное для размещения внутри ЦВМ, называется машинным кодом. 1.3.2 Машинные двоичные коды В цифровых БВМ применяют прямой, обратный и дополнитель- ный коды чисел. Многообразие применяемых кодов определяется их достоинствами и недостатками, а также особенностями используемых операционных устройств. Прямой код удобен для хранения и передачи чисел, обратный и дополнительный коды - для выполнения арифметических операций. Рассмотрим эти коды на примере кодирования двоичных чисел с фик- сированной запятой вида ( ) 1 0 1 (2) < ± = − − A a a А m . Индекс 2 для обо- значения двоичных чисел будем в дальнейшем опускать. Прямой код обозначают через [ А ] пк : [ ] ≤ ≥ = − − − − 0 , 1 , 0 , 0 1 1 пк А если a a А если a a A m m (1.5) 28 Нуль в прямом коде имеет два представления: [ ] 0 0 0 0 пк = + и [ ] 0 0 1 0 пк = − Пример. А = + 0,101; В = - 0,101. Найти [А] пк и [В] пк Решение. Согласно (1.5) находим: [А] пк = 0.101; [В] пк = 1.101. Обратный код обозначается следующим образом: [А] ок . Обрат- ный код положительных чисел совпадает с прямым кодом. Для отри- цательных чисел правило формирования обратного кода заключается в записи 1 в знаковый разряд и инвертировании (замена нуля едини- цей и наоборот) всех остальных разрядов числа. [ ] ≤ ≥ = − − − − − − 0 , 1 , 0 , 0 2 1 2 1 ок А если a a a А если а a a A m m Нуль имеет следующие два представления: [ ] 0 0 0 0 ок = + и [ ] 1 1 1 0 ок = − Пример. А = + 0,101; В = - 0,101 Решение. Так как A положительное число, то [ ] ОК A = 0.101. Для отрицательного В получим [ ] ОК В = 1.010 . Дополнительный код [А] дк положительного числа равен его пря- мому коду. Отрицательное число А в процессе кодирования заменяет- ся дополнением его прямого кода до двух т.е. величины 10.0 (2) : [ ] [ ] , А . А пк дк 10 − = если А < 0, [ ] [ ] , А А пк дк = если А ≥ 0. Пусть А = - 0,1011. Найти [A] дк В соответствии с правилом кодирования 1 11 11+1 10 (2) = 10.0000 [A] пк = - 1.1011 [A] дк = 1.01 01 =[A] ок +1 мл. разряда Как видно, все цифры результата оказались инвертированными ( i а = 1, если i a = 0 и i а = 0, если i a = 1), за исключением последней значащей единицы и знакового разряда. Таким образом, можно сформулировать два правила перевода: 1. Дополнительный код отрицательного числа получается из прямого кода этого числа путем инвертирования всех разрядов, кроме знакового, и прибавлением единицы младшего разряда. 29 2. Для получения дополнительного кода отрицательного числа следует в прямом коде этого числа инвертировать все цифры кроме знаковой, последней значащей единицы и следующих за ней в более младших разрядах нулей. Примеры: [A] пк = 1.1010111; [A] дк = 1.0101000 + 0.0000001 = 1.0101001; [В] пк = 1.1010000; [В] дк = 1.01011111 + 0.0000001 = 1.0110000. В дополнительном коде нуль имеет единственное значение [0] дк =0.000...00. Результат выполнения операций сложения или вычитания для дробных чисел может оказаться по абсолютной величине большим или равным единице, поэтому, чтобы не потерять значащую цифру результата в разряде единиц в обратных и дополнительных кодах, не- обходимо, в общем случае, предусмотреть представление цифра а 0 разряда единиц, при этом знак числа а зн будет уже представлен в раз- ряде для двоек: [ ] m зн а а а а А − − = 1 0 . Коды таких чисел называют моди- фицированными. Модифицированный обратный код (МОК) числа А имеет вид: [ ] ≤ ≥ = − − − − 0 , 1 , 0 , 0 1 0 1 0 мок А если а а а А если а а а A m m Модифицированный дополнительный код (МДК) обозначается через [ ] [ ] [ ] ≤ + ≥ = 0 , 1 , 0 , мок мок мдк А если разряда мл A А если A A 1.3.3 Арифметические действия в кодах Выполнение операций сложения и вычитания кодов. Правила сложения многоразрядных чисел (двух положительных или двух от- рицательных), записанных в прямом коде, отличаются от правил сло- жения многоразрядных двоичных чисел только в определении знака. Знаковый разряд при суммировании кодов чисел с одинаковыми зна- ками равен знаковым разрядам слагаемых. 30 Пример: А=0,01011 [A] пк =0,01011 В=0,00111 + [В] пк =0,00111 А +В=0, 10010 [A] пк + [В] пк =1,10010 А=-0,01011 [A] пк =1,01011 В=-0,00111 + [В] пк =1,00111 А+В =-0,10010 [A] пк + [В] пк =1,10010 Сложение прямых кодов чисел, имеющих разные знаки осуще- ствляется по правилу вычитания мантисс многоразрядных двоичных чисел. Вычитание всегда осуществляется из большего по абсолютной величине числа меньшего. Результату присваивается знак большего числа. Пример: А= 0,01011 [A] пк =0,01011 В=-0,00111 - [В] пк =1,00111 А +(-В)=А -В = 0,00100 [A] пк - [В] пк =0,00100 А =-0,01011 [A] пк =1,01011 В = 0,00111 - [В] пк =0,00111 -А +В =-(А-В)=-0,00100 [A] пк - [В] пк =1,00100 Во всех случаях при возникновении переноса из старшего раз- ряда мантиссы в знаковый разряд фиксируется сбой нормальной ра- боты машины, вызванный переполнением разрядной сетки. При сложении кодов чисел, имеющих разный знак удобнее пользоваться обратными и дополнительными кодами. В этом случае знаковый разряд участвует в сложении наравне с разрядами мантис- сы. Пример: Обратные коды А = - 0 , 0 1 0 1 1 [A] ок = 1 , 1 0 1 0 0 + В = 0 , 0 0 1 1 1 + [В] ок = 0 , 0 0 1 1 1 -А + В - 0 , 0 0 1 0 0 [A] ок + [В] ок = 1 , 1 1 0 1 1 ⇒ -0 , 0 0 1 0 0 А = 0 , 0 1 0 1 1 [A] ок = 0 , 0 1 0 1 1 + В = - 0 , 0 0 1 1 1 + [В] ок = 1 , 1 1 0 0 0 А + (-В)= 0 , 0 0 1 0 0 1 0 , 0 0 0 1 1 ⇒ 0 , 0 0 1 0 0 + При сложении обратных кодов двоичного числа единица переноса из знаковых разрядов прибавляется к младшему разряду результата. 31 Дополнительные коды А = - 0 , 0 1 0 1 1 [A] дк = 1 , 1 0 1 0 1 В = 0 , 0 0 1 1 1 [В] дк = 0 , 0 0 1 1 1 [A] дк = 1 , 1 0 1 0 1 + [В] дк = 0 , 0 0 1 1 1 [A] дк + [В] дк = 1 , 1 1 1 0 0 ⇒ 1 , 1 1 0 1 1 ок ⇒ - 0 , 0 0 1 0 0 А = 0 , 0 1 0 1 1 [A] дк = 0 , 0 1 0 1 1 В = - 0 , 0 0 1 1 1 [В] дк = 1 , 1 1 0 0 1 [A] дк = 0 , 0 1 0 1 1 + [В] дк = 1 , 1 1 0 0 1 1 0 , 0 0 1 0 0 ⇒ 0 , 0 0 1 0 0 В случае дополнительных кодов перенос из знаковых разрядов отбрасывается. Выполнение операций умножения в кодах. При представлении двоичных чисел в виде кода для реализации операций умножения и деления проще всего использовать прямые коды двоичных чисел. В этом случае умножение и деление кодов осуществляется по правилам умножение и деления многоразрядных двоичных чисел. Знак резуль- тата определяется суммированием знаковых разрядов сомножителей по модулю 2, т.е. 0 ⊕ 0=0; 0 ⊕ 1=1;1 ⊕ 0=1; 1 ⊕ 1=0. В большинстве бортовых ЦВМ для представления двоичных чи- сел используются дополнительные коды. Особенность выполнения умножения двоичных чисел, представленных в дополнительном коде, заключается в том, что если хоть один из сомножителей является от- рицательным, то результат будет неправильным. Для получения пра- вильного результата необходимо осуществить коррекцию произведе- ния. Например, число X = - 0,1101 в дополнительном коде равно [Х] дк = 1,0011, что может быть получено следующим образом 2 + Х = 10,0000 + (-0, 1101)= 1,0011. Используя равенство [Х] дк = 2 + X, определим, как должен вы- глядеть правильный результат умножения в различных случаях: а) Х > 0, Y > 0 б) Х > 0, Y < 0 Z = X – Y; [Z] дк = Z; Z = XY < 0; [Z] дк = 2 + Z; [X ⋅ Y] дк = X ⋅ Y; [X ⋅ Y] дк = 2 + X ⋅ Y; 32 в) Х < 0, Y > 0 г) Х < 0, Y < 0 Z = X ⋅ Y < 0; [Z] дк = 2 +Z; Z = X ⋅ Y; [Z] дк = Z; [X ⋅ Y] дк = 2 + X ⋅ Y; [X ⋅ Y] дк = X ⋅ Y. Для этих же вариантов, если просто перемножать дополнитель- ные коды, получаются следующие результаты: а) Х > 0, Y < 0 [X] дк = Х; [Y] дк = Y, [X] дк ⋅ [Y] дк = X ⋅ Y = [X ⋅ Y] дк Результат правильный б) Х > 0, Y < 0 [X] дк = Х, [Y] дк = 2 + Y, [X] дк ⋅ [Y] дк = X ⋅ (2 +Y) = 2X + Х ⋅ Y. Правильный результат равен 2 + Х ⋅ Y . в) Х < 0, Y > 0 [X] дк = 2 + Х, [Y] дк = Y, [X] дк ⋅ [Y] дк = (2 + X) ⋅ Y = 2Y + Х ⋅ Y. При правильном результате 2 + X ⋅ Y. г) Х < 0, Y < 0 [X] дк = 2 + Х; [Y] дк = 2 + Y; [X] дк ⋅ [Y] дк = (2 + X) ⋅ (2 +Y) = 4 + 2X + 2Y - Х ⋅ Y; а нужно получить Х ⋅ Y . Для получения правильного результата существует ряд способов выполнения операции умножения кодов с коррекцией. В бортовых ЦВМ Орбита 10, Орбита 20, Ц-100, А-15А умножение осуществляет- ся по следующему правилу. 1. Умножаются мантиссы дополнительных кодов чисел, т.е. до- полнительные коды без знакового разряда. 2. К полученному произведению добавляется корректирующее слагаемое. Корректирующее слагаемое, в свою очередь, формируется по следующему правилу: а) Если множитель отрицательный, то формируется дополни- тельный код отрицательной мантиссы множимого, такое число (ман- тисса) обозначается буквой М. б) Если множимое отрицательное, то формируется дополнитель- ный код от отрицательной мантиссы множителя. в) Если оба сомножителя отрицательные, то формируется и пер- вое и второе корректирующие слагаемые. 33 Пример: I. Х > 0, Y > 0 В БЦВМ [X] дк = Х; [Y] дк = Y Перемножение осуществляется без учета знаковых разрядов. Мантиссы кодов совпадают с кодами X У = [X] дк [Y] дк II. Х > 0, Y < 0 [X] дк = Х; [Y] дк = 2 + Y [X] дк = 0, мантисса Х ……………………… [Y] дк = 1,………… Например: 1,1011 ∼ 2 + Y 2 + Y 0,1011 ∼ 1 + Y В БЦВМ перемножаются мантиссы кодов и формируется произ- ведение: X ( 1 + Y) = X + ХУ Результат пока все равно неверный, поэтому к нему прибавляет- ся корректирующее слагаемое K1: X + ХY + К1 = 2 + ХУ Отсюда K1 = 2 - X. K1 получается путем формирования дополнительного кода от- рицательной мантиссы множимого (X). X > 0 т.е. М х = X , где М - мантисса. K1 = [-M x ] дк = [-X] дк = 2 + (-Х) = 2 – Х. Таким образом, сформировано первое корректирующее слагае- мое. III. Х < 0, Y > 0 [X] дк = 2 + Х, М х = 1 + Х [Y] дк = Y Результат перемножения (1 + Х) ⋅ Y = Y + ХY требует введения корректирующего слагаемого Y + Х ⋅ Y + К2 = 2 + ХY, отсюда К2 = 2 - Y. Второе слагаемое формируется по правилу: K2 = [-Y] дк = 2 + (-Y) = 2 – Y IV. Х < 0, Y < 0 [X] дк = 2 + Х, М х = 1 + Х [Y] дк = 2 + Y; М y = 1 + Y (1 + X) ⋅ (1 + Y) = 1 + X + Y + XY ≠ XY. 1 + Y 34 В машине формируются два корректирующих слагаемых. K1 = [-M x ] дк = [-(1 + X)] = 2 + (-(1 + X)) = 1 – X. K2 = [-Y] дк = -Y, так как Y < 0, то – Y > 0. Прибавление корректирующих слагаемых дает: 1 + X + Y + XY + K1 + K2 = 1 + X + Y + X ⋅ Y + 1 – X – Y = 2 + +X ⋅ Y Сумма 2 + X ⋅ Y составляет 10,...... в двоичной системе счисле- ния. Так как старшая единица в целой части выпадает из разрядной сетки, результат будет равен 0,...., что соответствует правильному произведению XУ. Пример: Х = -0,1011 Y = -0,1010 Получим результат перемножения чисел по обычным правилам двоичной арифметики: 1 0 1 1 1 0 1 0 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 + 0 , 0 1 1 0 1 1 1 0 В БЦВМ: [X] дк = 1,0101, М х = 0,0101 = 1 + Х [Y] дк = 1,0110, М y = 0,0110 = 1 + Y 0 1 0 1 0 1 1 0 0 0 0 0 0 1 0 1 0 1 0 1 0 0 0 0 1 + X + Y + X Y = 0 , 0 0 0 1 1 1 1 0 Корректирующие слагаемые равны К1 = [-М х ] дк = 1,1011 К2 = [-Y] дк = 0,1010 Прибавляя корректирующие слагаемые к произведению, полу- чим 0,00011110 + 1,1011 + 0,1010 = 0,01101110 Что соответствует правильному результату. 35 Операция деления двоичных чисел представленных дополни- тельными кодами сводится к операциям сложения (вычитания) и сдвига. В БЦВМ операция деления является самой длительной и осуще- ствляется за несколько циклов, в каждом цикле определяется одна цифра частного. В первом цикле выполняется операция вычитания делимого и делителя, если знаки одинаковые или операция сложения, если знаки разные. При разных знаках частное формируется в обрат- ном коде, а после окончания деления к его младшему разряду при- бавляется единица для перевода в дополнительный код. В каждом по- следующем цикле выполняется либо операция сложения, либо опера- ция вычитания, при этом предыдущий остаток удваивается. Если ча- стное в данном разряде получилось равным нулю, то в следующем цикле выполняется операция вычитания, если единице, то сложение. По знаковым разрядам очередного остатка в зависимости от знака де- лителя формируется соответствующая цифра частного. Пример: Х = - 0 , 0 1 1 0 1 1 Y = 0 , 1 0 0 1 11 0 Y Х , − = 1 1 0 1 1 1 0 0 1 0 0 1 0 0 1 0 0 0 , 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 [X] дк = 1,100101 [Y] дк = 0,1001 I цикл [ ] [ ] [ ] ,... Z ,...; 1 0 Z 0 ие переполнен 0 Y X 0 дк дк = − = → > → → ≤ → + 1,100101 + 0,1001 = 1 0,001001; [ ] ок Z = 1,… II цикл [ ] [ ] [ ] [ ] 1 0 0 0 2 Y Y X ок ок дк дк = > → = < → − + Z Z III цикл [ ] [ ] [ ] [ ] 1 0 0 0 4 Y 2 Y Y X ок ок дк дк = > → = ≤ → + − + Z Z |