![]() |
Главная -> Появление первого микропроцессора 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 чиваются регулярная структура программы и минимальные затраты памяти, но время выполнения программы велико. Его можно сократить, если организовать процесс вычисления произведения формата 16-16 = 32 как последовательность двух подпроцессов умножения форматов 16-8 = 24 для МЛБ МН и 16-8 = 24 для СТБ МН с последующим суммированием полученных произведений с учетом их сдвига на один байт относительно друг друга. Этот алгоритм реализует программа У32Б (аналогичная программа приведена в работе [21]): 0630 оэпо 0630 AF 0631 67 0632 6F 0633 В2 0634 ВЗ 0635 С23Б06 0638 47 0639 4F 063А С9 063В AF 063С ВО 063D Б1 063F С8 063F 79 0640 С5 0641 СВП005 0644 ЕЗ 0645 F5 0646 7С 54 ORG 630Н У24А SET 5D0H У32Е: ;ПОДПРОГРАММА УМНОЖЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ БЕЗ ЗНАКА ;ФОРМАТА 16*16=32.ВАРИАНТ Б. гМЕТОД УМНОЖЕНИЯ5РЕЗУЛЬТАТ 16»16=32 ОПРЕДЕЛЯЕТСЯ КАК ;СУММА ДВУХ СДВИНУТЫХ ОТНОСИТЕЛЬНО ДРУГ ДРУГА ПРОИЗБЕ-гДЕНИИ 16»(8=24.ПОЛУЧЕННЫХ УМНОЖЕНИЕМ МНОЖИМОГО СООТБЕТ-SCTBEHHO НА МЛЕ И СТЕ МНОЖИТЕЛЯ. ;БХОДНЫЕ ПАРАМЕТРЫ:(Б,С)-МНОЖИТЕЛЬ.(Б.Е)-МНОЖИМОЕ.ВЫ-;ХОДНЫЕ ПАРАМЕТРЫ: (B.C.Н»Ь)-ПР0И;5ВЕЯЕНИЕ.ИСПОЛЬЗУЮТСЯ ;ВСЕ РЕГИСТРЫ.ГЛУБИНА СТЕКА-4.ИСПОЛЬЗУЕТСЯ ПОДПРОГРАММА ;*У24А*. ?ОЦЕНКА:ДЛИНА 42 (+18 *У24А*) БАЙТ.ВРЕМЯ- НЕ БОЛЕЕ 1127 ;ТАКТОВ (С УЧЕТОМ •У24А*). (ОБНУЛЕНИЕ ТЕКУЩЕЙ СУММЫ ЧП XRA А мои Н.А мои L.A ;ПРОВЕРКА МНОЖИМОГО НА О ORA В ORA Е JNZ ПЕР1 г ЕСЛИ МНОЖИМОЕ НЕ О MOV Б.А MOV С.А RET ;ПРОВЕРКА МНОЖИТЕЛЯ НА О ПЕР1: XRA А ORA В ORA С RZ ;ЕСЛИ МН0ЖИТЕЛЬ=0 SУМНОЖЕНИЕ МНОЖИМОГО НА МЛБ МНОЖИТЕЛЯ мои А.С ;(А)-МЛБ МНОЖИТЕЛЯ PUSH В ;СОХРАНЕНИЕ МНОЖИТЕЛЯ CALL У24А ;(А.H.L)-ПРОИЗВЕДЕНИЕ 1 (ПР1) SСОХРАНЕНИЕ ПРОИЗВЕДЕНИЯ 1 XTHL !СОХРАНЕНИЕ СРБ.МЛБ ПР1 ;(H.L)-МНОЖИТЕЛЬ PUSH PSM ; СОХРАНЕНИЕ СТБ ПР1 ; УМНОЖЕНИЕ МНОЖИМОГО НА СТБ МНОЖИТЕЛЯ MOV А.Н J(А)-СТБ МНОЖИТЕЛЯ 0647 СППООЭ 064А 47 0648 F1 064С 84 064D 4F 064Е D25206 0651 04 0652 65 0653 2Е00 0655 Dl 0656 19 0657 no 0658 03 0659 С9 0000 CALL У24А ;СЛОЖЕНИЕ СДВИНУТЫХ НА MOV POP ABB MOV JNC INK ПЕР2: MOV MVI POP DAB RNC INX RET END BrA FSU H ПЕР2 В HtL UO D D ;(A.H.L)-ПРОИЗВЕДЕНИЕ 2 (ПР2) 8 РАЗРЯДОВ ПР1 И ПР2 f(B)-CTE ПР2 ;(A)-CTE ПР1 МО-СУММА СТЕ ПР1 И CPE ПР2 ;УЧЕТ ПЕРЕНОСА В СТЕ ;(Н)-МЛЕ ПР2 ;(В.Е)-СРЕ»МЛЕ ПР1 ?УЧЕТ ПЕРЕНОСА В СТБ В программе для получения промежуточных произведений формата 16-8 = 24 используется быстродействующая подпрограмма У24А. В результате программа У32Б на 34 % снижает время умножения по сравнению с программой У32А, но на 50 % увеличивает затраты памяти (с учетом длины подпрограммы У24А). В программе У32Б для временного хранения первого промежуточного произведения (из-за нехватки свободных регистров) использована область стека, причем для записи СРБ ПР1 и МЛБ ПР1 из регистровой пары (Н, L) в стек использована команда XTHL обмена вершины стека с регистровой парой (Н, L). Действие этой команды поясняется на рис. 1.6. Указатель стека (SP) перед выполнением
(SP) XTHL Стек МЛВ ПР1 СРВ ПР1 шрсс ВОЗВРАТА Рис. /.6. Действие команды XTHL команды XTHL указывает на ячейку стека, в которую предыдущей командой PUSH В записан младший байт BL регистровой пары (В, С). При выполнении команды XTHL содержимое вершины стека по адресам (SP) и (SP) +1 переписывается в регистровую пару (Н, L), а содержимое регистровой пары (Н, L) - на место ВН, BL (ВН - старший байт регистровой пары (В, С)). Глубина стека в программе равна 4 байтам. Тестовые данные для программ У32А, У32Б приведены в табл. 1.7. Табл. 1.7. Тесты умножения формата 16-16=32 (целые двоичные беззнаковые числа) Представление чисел шестнадцатеричное десятичное FFFF-FFFF=FFFE0001 65535 - 65535 = 4294836225 FFFF-0001=OOOOFFFF 65535- 1 =65535 FOOO • OOOF=O0OE 1 ООО 61440 - 15 = 921500 FF00-00FF=00FE010 65280- 255 = 16646400 5555-AAAA=38E31C72 211845- 43690 = 954408050 7FFF-7FFF=3FFF0001 32767 • 32767 = 1073676289 1.3.3. ЦЕЛЫЕ ЧИСЛА CO ЗНАКОМ 1.3.3.1. Форма! 8.8=16 Программа УД88 выполняет умножение, обращаясь к подпрограмме У88Б: 0660 ORG 660Н 0550 У88Е SET 550Н УД88: гПОйПРОГРАММА УМНОЖЕНИЯ ЦЕЛЫХ ЙВОИЧННХ ЧИСЕЛ В ЙОПОЛНИ-;ТЕЛЬНОН КОЙЕ ФОРМАТА 8*8=16. ;ВХ0ЙНЫЕ ПАРАМЕТРЫ!(С)-МНОЖИТЕЛЬ,(Е)-МНОЖИМОЕ.ВЫХОЙНОИ ;ПАРАМЕТР:(Н,Ь)-ПР0ИЗВЕДЕНИЕ.ИСП0ЛЬЗУЮТСЯ ВСЕ РЕГИСТРЫ, гСОХРАНЯЮТСЯ (С),(Е).ИСПОЛЬЗУЕТСЯ ПОДПРОГРАММА *У88Б*. !ОЦЕНКА!ДЛИНА-22 (+22 *У88Е») БАЙТ>ВРЕМЯ-НЕ БОЛЕЕ 528 ;ТАКТОВ (С УЧЕТОМ *У68Б*). РВЫПОЛНЕНИЕ беззнакового УМНОЖЕНИЯ 8*8=16 0660 СВ5005 CALL У88Е ?(H,L)-ПРОИЗВЕДЕНИЕ 5ПРОВЕРКА ПРОИЗВЕДЕНИЯ НА О 0663 AF XRA А 0664 В4 ORA Н 0665 Б5 ORA L 0666 С8 RZ -.ЕСЛИ ПР0ИЗБЕДЕНИЕ=0 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.0158 |
|