|
Главная -> Появление первого микропроцессора 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 1863 В7 1864 С8 1865 F5 1866 F5 1867 СГР2012 186А ГРА7618 186£1 F1 186Е ЗГР i86F С26618 1872 AF 1873 С37718 1876 til 1877 IPI 1878 7A 1879 C9 0000 гПРОВЕРКА ПОКАЗАТЕЛЯ СТЕПЕНИ НА НОЛЬ • . ORA А !ПРОЯВЛЕНИЕ ПОКАЗАТЕЛЯ RZ гЕСЛИ П0КАЗАТЕЛЬ=0 PUSH PSU гСОХРАНЕНИЕ ПОКАЗАТЕЛЯ г«ИКЛ УМНОЖЕНИЯ АРГУМЕНТА НА ЧАСТИЧНОЕ ПРОИЗВЕДЕНИЕ ЦИКЛ: PUSH PSU гСОХРАНЕНИЕ СЧЕТЧИКА «ИКЛОВ CALL УДПЗЗ г(В,С)-АДРЕС ПРОИЗВЕДЕНИЯ JC ПЕР1 гЕСЛИ ОШИБКА ПОРЯДКА гПРОВЕРКА КОНЦА ЦИКЛА гВОССТАНОВЛЕНИЕ СЧЕТЧИКА ЦИКЛОВ POP DCR JNZ XRA JMP PSU A ЦИКЛ A ПЕР2 гЗАЦИКЛИВАНИЕ гС¥=0 гВОССТАНОВЛЕНИЕ РЕГИСТРОВ nEPls ПЕР2: POP POP MOV RET END D г БАЛАНС СТЕКА D гВОССТАНОВЛЕНИЕ ПОКАЗАТЕЛЯ AtD г(А)-ПОКАЗАТЕЛЬ СТЕПЕНИ гСУ=1.ЕСЛИ ОШИБКА
Рис. 4.3. Графики степенной функции Такой подход уменьшает затраты памяти, но существенно увеличивает время решения, особенно при больших значениях п. Число операций умножения при вычислении степенной функции можно уменьшить, если разложить показатель я на множители, кратные двум [1, 48]. Так, для « = = 2k или n = 2k имеем соответственно х" = {xf или х" = {xY • X, т. е. для вычисления х" требуется не более k или {k -{- 1) операций умножения. Аналогичный подход можно применить для вычисления и т. д. Например, вычисление х=[{х xff требует всего трех операций умножения вместо семи. В общем случае целочисленный показатель п можно представить в виде двоичного полинома по схеме Горнера: и = (...((О + а;б ,) • 2 + + аА 2)-2+ ai)-2 + 00. Тогда метод экономичного вычисления х" определяется выражением х"(...Цх° х"-у . х-у .... х") • х", (4.8) где х° = х, если а,- = 1, и х°- 1, если щ = О, г = О, 1,2, k- 1. Вычисление выражения (4.8) начинается с анализа старших двоичных разрядов показателя п. Если ak- \ = 1, вычисляется частичная степень {х° • xf = х; если следующая цифра ak-2 - 1, полученная степень умножается на аргумент и возводится в квадрат: {х-х) -х; если же о;д, 2 = 0, сразу следует возведение в квадрат: (x) = х и т. д. Например, вычисление xJ в соответствии с методом (4.8) имеет вид (7io= 11 Ь):((л;) • л;) • =Применение метода (4.8) требует не более [log2n] операций возведения в квадрат и не более такого же количества операций умножения на х. Программа СТЕПА вычисляет степенную функцию по методу (4.8): 1890 ORG 1890Н 1220 УДПЗЗ SET 1220Н 0180 ЕДПЗ SET 180Н СТЕПА: ;««*»»«»х««х»»»)(»к»хх«»»«х«»»)(»»»»»»»*«»»««»хк«»х«»)(»»)(« гПОДПГОГГАММА ВЫЧИСЛЕНИЯ СТЕПЕНИ У(У)=ХххЫ (N ( 256). гВХОДНЫЕ ПАРАМЕТРЫ:(HtL)-АДРЕС АРГУМЕНТА Х.ПРЕДСТАВЛЕН-;НОГО В ФОРМАТЕ 3-БАЙТНОГО ДВОИЧНОГО *СЛА В ДОПОЛНИ- гтЕльном КОДЕ С плавающей запятой.(А)-показатель степени ;В ФОРМАТЕ «ЕЛОЧИСЛЕННОГО ДВОИЧНОГО БЕЗЗНАКОВОГО ЧИСЛА. ?(В.С)-АДРЕС СТЕПЕНИ.выходной ПАРАМЕТР!СУ=1-ПРИЗИАК ПЕ-гРЕПОЛНЕНИЯ ИЛИ АНТИПЕРЕПОЛНЕНИЯ ПОРЯДКА СТЕПЕНИ.ИСПОЛЬ-, гЗУЮТСЯ ВСЕ РЕГИСТРЫ.СОХРАНЯЮТСЯ (H.L.). (В.С) . (А) .ГЛУБИНА ;СТЕКА-24.ИСПОЛЬЗУЮТСЯ ПОДПРОГРАММЫ!хУДПЗЗх,хКОМЗх,хОБНЗ ? ХУДФ17х г ХНМАН2Х,ХДОПВХ.хДОПДх,хузЗБх,хУ24Ах,хЕДПЗх. ;0«ЕНКА:ДЛИНА-48 БАЙТ (+241 БАЙТ ПОДПРОГРАММ).ВРЕМЯ-НЕ ;Б0ЛЕЕ (142+4285x8) ТАКТОВ (С УЧЕ\т ПОДПРОГРАММ). ;ххххххххххххххххххххххххххххххххххххххххххххххххххххххх гЗАНЕСЕНИЕ "1" В ФОРМЕ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ В РЕЗУЛЬТАТ 1890 СВ8001 CALL. ЕДПЗ гПРОВЕРКА ПОКАЗАТЕЛЯ СТЕПЕНИ НА НОЛЬ 1893 В7 ORA А J ПРОЯВЛЕНИЕ ПОКАЗАТЕЛЯ 1894 С8 RZ гЕСЛИ П0КАЗАТЕЛЬ=0 1895 FS PUSH PSW гСОХРАНЕНИЕ ПОКАЗАТЕЛЯ 1.87
Программа выполняет анализ очередной двоичной цифры показателя степени путем сдвига его влево. При этом значение цифры совпадает с признаком переноса: CY =ai. Сопоставляя программы СТЕП и СТЕПА, можно увидеть, что последняя требует несколько больших затрат памяти, но зато при больших п(п>16) она вычисляет степенную функцию быстрее, чем программа СТЕП. Заметим, что в обеих программах расчет времени их работы дан для наихудшего случая, когда все двоичные цифры показателя степени равны единице. Тестовые данные для обеих программ приведены в табл. 4.2. Табл. 4.2. Тестовые данные у =J("
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.0191 |
|