|
Главная -> Появление первого микропроцессора 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 Последовательность действий при делении с восстановлением и без восстановления остатка поясняется на примере деления двоичных чисел 00100000:1111 = = (0010, 0010) соответственно в табл. 1.14 и 1.15, в которых приняты следующие обозначения операций: Q; - сдвиг влево остатка: =рУ - суммирование или вычитание делителя; -Qi - присвоение значения остатку. Заметим, что остаток считается положительным при делении с восстановлением остатка, если в результате вычитания 2Q/ i -У признак переноса CY=0, а при делении без восстановления остатка, если признак переноса CY не меняет своего значения между операциями 2Q, i и 2Q, ,±y, т. е. CY:11 или СУ:00. При выполнении деления 2и-разрядного делимого на и-разрядный делитель возможно переполнение «-разрядного формата частного: появление абсолютной величины, непредставимой в «-разрядном формате. Очевидно, это имеет место в случае, когда число в старших п разрядах делимого больше или равно делителю. Переполнение необходимо выявлять программным способом и блоки- Табл. 1.14. Деление с восстановлением остатка
Табл. 1.15. Деление без восстановления остатка
ровать дальнейшие вычисления вследствие их некорректности. Избежать переполнения можно за счет увеличения разрядности частного до разрядности делимого (но при этом в два раза увеличивается и количество циклов деления). Помимо выявления переполнения, при делении чисел необходимо выявлять ситуацию деления на нуль. Заметим, что при анализе переполнения деления целых чисел автоматически выявляется и деление на нуль. i.5.2. ЦЕЛЫЕ БЕЗЗНАКОВЫЕ ЧИСЛА 1.5.2.1. Формат 16:8= (8,8) Программа Д16 реализует деление с восстановлением остатка и с размещением сдвигаемых влево разрядов частного в освобождаемых младших разрядах делимого: ОАОО ОАООИ R16: ЯЮДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ ВЕЗ ЗНАКА 5Ф0РМАТА 16:8=(В,8). гМЕТОД ДЕЛЕНИЯ С ВОССТАНОВЛЕНИЕМ ОСТАТКА. /ВХОДНЫЕ ПАРАМЕТРЫ: (H»L)-ДЕЛИМОЕ, <С)-ДЕЛИТЕЛЬ.ВЫХОД- }НЫЕ ПАРАМЕТРЫ!(Н)-ОСТАТОК,(L)-ЧАСТНОЕ,СУ=0-ПРИЗНАК гПЕРЕПОЛНЕНИЯ ЧАСТНОГО.ИСПОЛЬЗУЮТСЯ ВСЕ РЕГИСТРЫ, ;КРОМЕ <В»Е);СОХРАНЯЕТСЯ. (с). !ОЦЕНКА5ДЛИНА-28 ЕАИТгВРЕМЯ-НЕ ЕОЛЕЕ 619 ТАКТОВ. S ПРОВЕРКА ЧАСТНОГО НА ПЕРЕПОЛНЕНИЕ: ЧАСТНОЕ > 8 ЕИТ? ОАОО 7С MOV А,Н 0А01 91 SUB С 0А02 ВО RNC ;ЕСЛИ ПЕРЕПОЛНЕНИЕ,СY=0 ОАОЗ 0608 MVI В,8 гСЧЕТЧИК ЦИКЛОВ гСЯВИГ ВЛЕВО остатка и частного в (H,L) 0а05 29 ЦИКЛ: ВАС Н 0А06 7С MOV А,Н ;(А)-СТБ ОСТАТКА 0А07 DA130A JC ПЕР1 ;ЕСЛИ ПЕРЕПОЛНЕНИЕ ОСТАТКА ; ВЫЧИТАНИЕ яелите:ля из остатка ОАОА 91 SUB С ОАОВ D2140A JNC VEF2 ?ЕСЛИ РАЗНОСТЬ > О ;РАЗН0СТЬ < ОтВОССТАНОВЛЕНИЕ ОСТАТКА оаое 81 ADD С OAOF 67 MOV HfA OAIO С3160А JMP ПЕРЗ ;ПЕРЕПОЛНЕНИЕ ОСТАТКА,РАЗРЯД ЧАСТН0Г0=1 0А13 91 ПЕР1: SUB С 0а14 67 пер2: MOV Н,А 0а15 23 INX Н ;+1 В ЧАСТНОЕ !ПРОВЕРКА КОНЦА ЦИКЛА 0А16 05 ПЕРЗ: DCR В 0А17 С2050А JNZ ЦИКЛ JЗАЦИКЛИВАНИЕ 0А1А 37 STC !CY=1 0А1В С9 RET 0000 END Максимальная длительность цикла деления равна 73, время программы 7354-73X8 = 619 тактам. Программа Д16А в отличие от предыдущей и последующих программ деления реализует способ деления без восстановления остатка: 0А20 0А20 7С 0А21 91 0А22 DO 0А23 0608 0А25 37 ORG 0А20Н Д16А! 5 )HH1»K»»»»»KK»»» »»»»»»»»»»»»» »»»»»»»»K»K)HHHf к»»»»»»»»»»» ;ПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ БЕЗ ЗНАКА РФОРМАТА 16:8=(8,8). гМЕТОД ДЕЛЕНИЯ БЕЗ ВОССТАНОВЛЕНИЯ ОСТАТКА. РВХОДНЫЕ ПАРАМЕТРЫ:.(H,L)-ДЕЛИМОЕ, (С)-ДЕЛИТЕЛЬ.ВЫХОД-?НЫЕ ПАРАМЕТРЫ! (Н)-ОСТАТОК, (L)-ЧАСТНОЕ,CY=0-npH3HAK ;ПЕРЕПОЛНЕНИЯ ЧАСТНОГО.ИСПОЛЬЗУЮТСЯ ВСЕ РЕГИСТРЫ, ;КРОМЕ (D,E)fСОХРАНЯЕТСЯ (С). ?0ЦЕНКА!ДЛИНА-58 БАЙТА,ВРЕМЯ -НЕ ЕОЛЕЕ 850 ТАКТОВ. ;к»к»»»к»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*»»»»»»»»»»»»»»»»»» ;ПРОВЕРКА ЧАСТНОГО НА ПЕРЕПОЛНЕНИЕ:ЧАСТНОЕ > 8 БИТ? MOV А,Н гЕСЛИ nEPEnOflHEHHEFCY=0 Б,8 JСЧЕТЧИК ЦИКЛОВ ;CY=l-nPH3HAK ОСТАТКА = ИЛИ)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.036 |
|