|
Главная -> Появление первого микропроцессора 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 Выше отмечалось, что программы умножения целых беззнаковых чисел применимы и к умножению дробных беззнаковых чисел. Правильность этого утверждения можно показать на примерах умножения двоичных чисел, имеющих одинаковое начертание, но различающихся положением запятой (для простоты рассматриваются двухразрядные числа): (00,) • (00,) = 0000, = 0,0 (,00). (,00) = ,0000 = 0,0 (01,)-(01,) = 0001, = 1,0 (-,01)-(,01) = ,0001 =0,0625,0 (10,). (10,) = 0100, = 4,0 (,10)-(,10)=,0100 = 0,25,о (11,)-(11,)= 1001, = 9,0 (,11)-(,11) = ,1001 =0,5625,0 Очевидно, что начертания произведений дробных и целых чисел совпадают и отличаются лишь начальным положением запятой (неявным масштабным множителем). Следовательно, программы умножения целых беззнаковых чисел полностью применимы для умножения дробных беззнаковых чисел. Аналогично можно использовать умножение целых беззнаковых двоичных чисел для получения модуля произведения дробных чисел со знаком: (ООО,) • (ООО,) = 000000, (0,00) (0,00) = 0,0000 (001,). (001,) = 000001, (0,01 -(0,01) = 0,0001 (010,) • (010,) = ООО 100, (0,10) • (0,10) = 0,0100 (011,)-(011,) = 001001, (0,11). (0,11) = 0,1001 Сравнивая начертания произведений целых и дробных чисел со знаком, легко заметить, что последние образуются путем сдвига изображения соответствующего целочисленного произведения на один разряд влево. Методика умножения дробных знаковых чисел с использованием программ умножения целых чисел имеет .следующий вид: 1) получение модулей сомножителей; ;•, 2) формирование их произведения с помощью программ целочисленной арифметики; 3) сдвиг произведения влево на один разряд; 4) преобразование модуля произведения в дополнительный код, если знаки сомножителей различны. 1.3.4.2. Формат 16-16=16 Программа УДФ16 реализует знаковое умножение, обращаясь к подпрограмме полноформатного беззнаково- го умножения У32Б и трем вспомогательным подпрограммам ДОПВ, ДОПД. ДОПН:
УДФ16; ;ПОДПРОГРАММА УМНОЖЕНИЯ ДВОИЧНЫХ ЧИСЕЛ в ДОПОЛНИТЕЛЬНОМ ;КОДЕ С ФИКСИРОВАННОЙ ПОСЛЕ ЗНАКОВОГО РАЗРЯДА ЗАПЯТОЙ ?ФОРМАТА 16»16=16. ;ВХОДННЕ ПАРАМЕТРЫ:(ВгС)-МНОЖИТЕЛЬт(В»Е)-МНОЖИМОЕ.ЕЫ-гХОДНОЙ ПАРАМЕТР:(HfL)-СТАРШИЕ 2 БАЙТА ПРОИЗВЕДЕНИЯ. :ИСП0ЛЬЗУЮТСЯ все РЕГИСТРЫгГЛУБИНА СТЕКА-12.ИСП0ЛЬЗУ-:ЮТСЯ ПОДПРОГРАММЫ:«У32Б» т »ДОПЕ«.«ДОПД».»ДОПН» »»У24А». ;0ЧЕНКА:ДЛИНА-45 <+84 БАЙТА ПОДПРОГРАММ) БАЙТ.ВРЕМЯ-;НЕ БОЛЕЕ 1422 ТАКТОВ (С УЧЕТОМ ПОДПРОГРАММ). ;ОБНУЛЕНИЕ СУММЫ ЧПгПРОВЕРКА СОМНОЖИТЕЛЕЙ НА О
гКОРРЕКЧИЯ ПРОИЗВЕДЕНИЯ с УЧЕТОМ ЗНАКОВ СОМНОЖИТЕЛЕЙ 0777 Fl FOP PSU ?ЕОССТАНОЕЛЕНИЕ ПРИЗНАКА В 0778 FO RP ;ЕСЛИ ЗНАКИ ОДИНАКОВЫ 0779 СЮ6000 CALL ДОПН ; (H,L)-ДОПОЛНИТЕЛЬНЫЙ КОЯ 077С С9 RET 0000 END В программе использовано округление произведения путем отбрасывания младших 16 разрядов полного произведения. Вспомогательные программы ДОПВ, ДОПД, ДОПН вьшолняют преобразование чисел, размещенных соответственно в регистровых парах (В, С), (D, Е) и (Н, L), в дополнительный код в соответствии с форму- лой (1.8): 0050 ORG ЗОН ДОПВ: гПОДПРОГРАММА ПРЕОЕРАЗОБАНИЯ КОДА ЧИСЛА б РЕГИСТРО-гВОЙ ПАРЕ (Б,О 6 ДОПОЛНИТЕЛЬНЫЙ КОД. гВХОПНОИ ПАРАМЕТР!(В»С)-ДВОИЧНОЕ ЧИСЛО.БЫХОДНОЙ ПАРА-гМЕТР!(Б»С)-ДОПОЛНИТЕЛЬННй код ЧИСЛА.ИСПОЛЬЗУЕТСЯ гРЕГИСТР А. ;0ЦЕНКА!ДЛИНА-8 БАЙТ»ЕРЕМЯ-43 ТАКТА.
ДОЛД: гПОДПРОГРАММА ПРЕОБРАЗОВАНИЯ КОДА ЧИСЛА В РЕГИСТРО-?ВОЙ ПАРЕ (D.E) 6 ДОПОЛНИТЕЛЬНЫЙ КОД. ;БХ0ДН0й ПАРАМЕТР:(DrE)-ДВОИЧНЫЙ КОД ЧИСЛА,ВЫХОДНОЙ гПАРАМЕТР:(ВгЕ)-ДОПОЛНИТЕЛЬНЫЙ КОД.ИСПОЛЬЗУЕТСЯ РЕ- ггистр А. гОЦЕНКА!ДЛИНА-8 БАЙТВРЕМЯ-43 ТАКТА.
допн: ;подпрограмма преобразования кода числа в регистро- ;Б0й паре (HrL) в дополнительный код. ;входной параметр:(HrL)-двоичный код числа.выходной 3-1926 65 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.0094 |
|