![]() |
Главная -> Появление первого микропроцессора 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В12 С9 f:ET 0000 END По своей структуре программа аналогична программе Д32, но отличается от последней представлением полноформатного делимого в регистрах (Н, L, D, Е) с двумя нулевыми старшими байтами, что облегчает анализ ситуаций. В результате программа Д162 проще и выполняется быстрее, чем Д32. Тестовые данные для программы приведены в табл. 1.20. Табл. 1.20. Тесты деления формата 16:16=(Uj, 16) (целые беззнаковые двоичные числа) Представление чисел шестнадцатеричное десятичное FFFF:00FF=(0101, 0000) 65535:255=(257, 0) OOFF:FFFF=(0000, OOFF) 255:65535.=(0, 255) FFFF:FOOO=:(OOOI, OFFF) 65535:61440=(1. 4095) 5555:07FF=(000A, 055F) 21845:2047=(10. 1375) 07FF:000A=(00CC, 0007) 2047:10=(204, 7) Программа Д216 в отличие от Д162 и других вышеприведенных программ выполняет деление целых чисел, когда делимое заведомо меньше, чем делитель: 0В20 ORG 0В20Н 0050 ДОПВ SET 50Н Д216: гПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ БЕЗ ЗНАКА гФОРМАТА 1й:16=-(16,16) С ДРОБНЫМ ЧАСТНЫМ. гМЕТОД ДЕЛЕНИЯ С ВОССТАНОВЛЕНИЕМ ОСТАТКА. грходннЕ ПАРАМЕТРЫ!(HjL)-делимое,(ВгС)-делитель.вн- гХОДНЫЕ ПАРАМЕТРЫ:(D,E)-ЧАСТНОЕ,(Н,Е)-0СТАТ0К,СУ=0-ПРИЗ-ЖАК ПЕРЕПОЛНЕНИЯ ЧАСТНОГО.ИСПОЛЬЗУЮТСЯ ВСЕ РЕГИСТРЫ, ГЛУБИНА СТЕКА-2.ИСП0ЛЬЗХЕТСЯ ПОДПРОГРАММА «ДОПВ*. гОЧЕНКА:ДЛИНА- 40 (+8 ХДОПВ*) ЕАЙТ,ВРЕНЯ-НЕ БОЛЕЕ Я832 ТАКТОВ. ?ПРОВЕРКА ЧАСТНОГО НА ПЕРЕПОЛНЕНИЕ:ЧАСТНОЕ > 1 ? ?(ДЕЛИТЕЛЬ ДОЛЖЕН БЫТЬ > ДЕЛИМОГО ) 0820 7D HOV A,L 0821 91 SUB С 0822 7С HOV А,Н 0823 98 SBB В (Ж24 DO RNC !ЕСЛИ ПЕРЕПОЛНЕНИЕ,CY=0 ; ДОПОЛНЕНИЕ ДЕЛИТЕЛЯ 0Б25 CD5000 CALL ДОПВ г (ВО-ДОПОЛНИТЕЛЬННЙ КОД 0В28 ЗЕ10 0В2А ЕВ 0В2В 29 0В2С ЕВ 0B2D 29 0В2Е DA3C0B 0В31 Е5 0Е32 09 ОЕЗЗ В2410В 0836 33 0837 33 0838 13 0839 С3420В ОВЗС 09 0B3D 13 ОВЗЕ С3420В 0841 Е1 0842 ЗП 0843 С22А0В 0В4Й 37 0В47 С9 0000 Д216Аг MUI ;СДВИГ ЧАСТНОГО ЦИКЛ: XCHG XCHG At16 гсчЕтчик ЦИКЛОВ (D»E) И ОСТАТКА (H»L) ВЛЕВО ;СДВИГ ЧАСТНОГО Н !СДВИГ ОСТАТКА ПЕР1 гЕСЛИ ПЕРЕПОЛНЕНИЕ ОСТАТКА гСЛОЖЕНИЕ ОСТАТКА С ДОПОЛНИТЕЛЬНЫМ КОДОМ ДЕЛИТЕЛЯ PUSH Н гСОХРАНЕНИЕ ОСТАТКА DAD В JNC ПЕР2 гЕСЛИ СУММА < О гСУМИА ) 0.РАЗРЯД ЧАСТН0Г0=1 INX SP INX SP -БАЛАНС СТЕКА INX D г+1 В ЧАСТНОЕ JMP ПЕРЗ гПЕРЕПОЛНЕНИЕ ОСТАТКА.РАЗРЯД ЧАСТН0Г0=1 ПЕР1: ВАВ В гФОРМИРОВАНИЕ ОСТАТКА INX В г+1 В ЧАСТНОЕ JMP ПЕРЗ гСУММА < О.ВОССТАНОВЛЕНИЕ ОСТАТКА ПЕР2! POP и гПРОВЕРКА КОНЦА ЦИКЛА ПЕРЗ! BCR А JNZ ЦИКЛ гЗАЦИКЛИВАНИЕ STC гсу=1 RET ENB Результат операции содержит точное неполное дробное частное и дробный остаток. Эта программа может использоваться при делении точных целых чисел с получением приближенного частного, содержащего целую часть, которая вычисляется, например, с помощью программ типа Д32, и дробную часть, определяемую с помощью программы Д216. Программа Д216 по структуре подобна программам Д24 и Д32А, т. е. использует дополнительный код делителя для вычисления очередного остатка. Действия программы Д216 можно также интерпретировать как деление целого делимого с множителем 2® (этот множитель смещает запятую в делимом и частном (остатке) на 16 разрядов вправо) и получение целочисленных частного и остатка. Такая интерпретация упрощает представление тестовых данных программы (см. табл. 1.21). Табл. 1.21. Тесты деления формата I6:I6=(I6, 16) (целые беззнаковые двоичные числа) Представление чисел
FFFE-2:FFFF=(FFFE, FFFE) F0FF-2:FFFF=(F0FF, FOFF) 5555-2:АААА= (8000, 0000) 7FFF-2:8000=(FFFE, 0000) 0009-2:000А=(Е666, 0004) 65534 •2:65535=(65534, 65534) 61695-2:65535=(61695, 61695) 21845-243690=(32768, 0) . 32767•2:32768=(65534, 0) 9-2:10=(58982, 4) 1.5.3. ЦЕЛЫЕ ЧИСЛА СО ЗНАКОМ Деление целых двоичных чисел в дополнительных кодах целесообразно выполнять путем их преобразования в прямые коды, деления беззнаковых чисел и коррекции результата с учетом знаков делимого и делителя. Знаки частного и остатка в зависимости от знаков делимого и делителя будут определяться следующими правилами: ( + ) : ( + )=(+, +); ( + ) : (-)=(-. +); (-):( + ) = ==( -, -) и ( -) : ( - )=( + , -). Процедура деления целых чисел со знаком рассматривается ниже на примере программы ДД216. Программа ДД216 выполняет деление целых двоичных чисел в дополнительном коде с получением дробных частного и остатка:
0B50 7C ДД216! ;**«*»****»***«*»****»*****«*)*»*****««*««»*«***»««*«**»« ;ПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ В ДОПОЛНИ-ПЕЛЬНОМ КОДЕ ФОРМАТА 1б!16к(16,16) С ДРОБНЫМ ЧАСТНЫМ. гВХОДНЫЕ ПАРАМЕТРЫ: (HrL)-ДЕЛИМОЕ, (В,С)-ДЕЛИТЕЛЬ.ВЫ-гХОЙНЬЕ ПАРАМЕТРЫ: (BiE)-4ACTH0E, (HjL)-OCTATOK,CY=0-;ПРИЗНАК ПЕРЕПОЛНЕНИЯ ЧАСТ НОГО. ИСПОЛЬЗУЮТСЯ ВСЕ РЕ-ГГИСТРЫгГЛХБИНА СТЕКА 8.ИСПОЛЬЗУЮТСЯ ПОДПРОГРАММЫ f *Д216« г *ДОПВ* f *ДОПД« т *ДОПН*,»ПОСД*,*ПОСН*. !ОЦЕНКА:ДЛИНА-59 (+80 БАЙТ ПОДПРОГРАММ) БАЙТА, JВРЕМЯ-НЕ БОЛЕЕ 2300 ТАКТОВ (С УЧЕТОМ ПОДПРОГРАММ). Ж****************************************************** ;ПРОВЕРКА ЗНАКА ДЕЛИМОГО мои А,Н 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.0355 |
|