|
Главная -> Появление первого микропроцессора 0 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 Табл. 1.13. Тесты умножения формата 24-24=24 (дробные двоичные числа в дополнительном коде) Представление чисел шестнадцатеричное десятичное 400000 - 400000=200000 0.5 - 0.5=0.25 7FFFFF - 7FFFFF=7FFFFC 0.9999998 - 0.9999998=0.9999996 555555 - 555555=38Е38С 0.6666666 - 0.6666666=0,4444443 АААААА-АААААА=38Е38Е (-0.6666666) - (-0.6666666)=0,4444443 555555-АААААА=С71С72 0,6666666 • (-0,6666666)= -0.4444443 FFFFFF- FFFFF=000000 (-0.0000001) - (-0.0000001)=0.0000000 1.3.4.5. Формат 16-16=32 Программа УДФ32 в отличие от предыдущих программ умножения знаковых чисел выполняет операции над знаковыми разрядами так же, как над цифровыми. В основе ее лежит алгоритм Бута [5, 61]: 07с0 ORG 7С0Н УДФ32: SПОДПРОГРАММА УМНОЖЕНИЯ ДВОИЧНЫХ ЧИСЕЛ В ДОПОЛНИТЕЛЬ-SHOM КОДЕ С ФИКСИРОВАННОЙ ПОСЛЕ ЗНАКОВОГО РАЗРЯДА ?ЗАПЯТ0Й ФОРМАТА 16»16=32. ?МЕТОД УМНОЖЕНИЯ-АЛГОРИТМ БУТА. !ВХОДНЫЕ ПАРАМЕТРЫ:<ВгС)-МНОЖИТЕЛЬг(ВгЕ)-МНОЖИМОЕ.БЫ-;ХОДНЫЕ ПАРАМЕТРЫ:(НгЕ,Б,С)-ПР0ИЗБЕДЕНИЕ.ИСПОЛЬЗУЮТСЯ гВСЕ РЕГИСТРЫ.СОХРАНЯЕТСЯ (ВгЕ).ГЛУБИНА СТЕКА-2. !0«ЕНКА:ДЛИНА-72 БАЙТ.ВРЕМЯ-НЕ БОЛЕЕ 2703 ТАКТА. гОБНУЛЕНИЕ ТЕКУЩЕЙ СУММЫ ЧП
Особенность алгоритма состоит в сложении (вычитании) в каждом цикле умножения СЧП и ММ в зависимости не от значения очередного разряда МН, как обычно, а от изменения очередного разряда множителя относительно его предыдущего разряда. При изменении вида 0->1 производится сложение СЧП с ММ, вида 1-0 - вычитание ММ из СЧП, вида 0-0 или 1-1-сдвиг СЧП. Сопоставление данной программы с наиболее близкой к ней по функциям УД32 показывает, что по быстро- действию программа УДФ32 более чем в два раза проигрывает, но по затратам памяти на 29 % экономичнее (с учетом подпрограмм для УД32). Тестовые данные для программы УДФ32 можно легко получить из табл. 1.10. 1.4. УМНОЖЕНИЕ ДЕСЯТИЧНЫХ ЧИСЕЛ Умножение десятичных чисел, как и умножение двоичных чисел, производится путем нахождения ЧП и СЧП, где ЧП представляет собой двоично-десятичное произведение десятичной цифры МН на десятичную цифру ММ. Отличия десятичного умножения от двоичного состоят в том, что, во-первых, выделение цифр МН и ММ для их умножения не сводится к однократному двоичному сдвигу, а требует специальной процедуры распаковки (выделения цифр); во-вторых, формирование ЧП двух десятичных цифр не СВОДИТСЯ к альтернативному выбору между значением множимого и нулем, а требует специальной процедуры умножения цифр; в-третьих, формирование СЧП может быть реализовано сложением только однобайтных чисел С применением команды десятичной коррекции DAA. Указанные отличия существенно усложняют программы умножения десятичных чисел, увеличивая время их вьшолнения и затраты памяти. Поэтому десятичное умножение целесообразно использовать для сомножителей малой разрядности, а обработку чисел большой разрядности вести средствами двоичной арифметики с предварительным преобразованием десятичных чисел в двоичные. Рассмотрим две программы умножения десятичных чисел. Программа У410 реализует точное умножение формата 4-4 = 8 двух десятичных цифр методом двоично-десятичного накопления ММ в соответствии со значением МН: 0890 ORG 890Н У410: ;ПОДПРОГРАММА ДЕСЯТИЧНОГО УМНОЖЕНИЯ ОДНОРАЗРЯДНЫХ ЕЕЗ-гЗНАКОВЫХ ДВОИЧНО-ДЕСЯТИЧНЫХ (КОД 8421) ЧИСЕД ФОРМАТА 4. гВХОДНЫЕ ПАРАМЕТРЫ: (С)-ЦИФРА МНОЖИТ!;ЛЯ, (Е)-ЦИФРА МНОЖИ-JMOrO.ВЫХОДНОЙ ПАРАМЕТР:(А)-ДВОИЧНО-ДЕСЯТИЧНОЕ ПРОИЗВЕ-?ДЕНИЕ.СОХРАНЯЮТСЯ РЕГИСТРЫ (Е),(С).ГЛУБИНА СТЕКА-2. ;0ЦЕНКА:ДЛИНА-16 БАЙТ,ВРЕМЯ-НЕ БОЛЕЕ 267 ТАКТОВ. 0 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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 0.0109 |
|