Доставка цветов в Севастополе: SevCvety.ru
Главная -> Появление первого микропроцессора

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

в основу программы положен алгоритм, описанный в работе [49]. Программа выполняет деление, если делимое не меньше делителя и делитель не равен нулю. Если деление возможно, программа устраняет незначащие нули делимого и делителя путем сдвига этих чисел влево с одновременной фиксацией разности их сдвигов. Например, если делимое и делитель имеют по 8 значащих цифр, ТО после сдвига делимого влево на 8 разрядов счетчик циклов деления в регистре (В) имеет значение 8 + 0 - - 8 = О, и деление практически выполнять не надо (достаточно вычесть делитель из делимого). Если же делимое имеет 16, а делитель - одну значащие цифры, то после нормализации чисел счетчик циклов в регистре (В) имеет значение 8 + 7 -0=15, и в этом случае потребуется 15 циклов деления для получения результата. После окончания деления остаток отделяется от частного и приводится к своему истинному значению путем сдвига вправо на величину начального сдвига делителя влево. Расширение диапазона обрабатываемых чисел в программе Д1616 требует дополнительных затрат памяти и времени по сравнению с программами Д16 и Д16А. Тестовые данные для программы приведены в табл. 1.17.

Табл. 1.17. Тесты деления формата 16:8=(16, 16) (целые беззнаковые двоичные числа)

Представление чисел

шестнадцатеричное

десятичное

FFFF:FF=(0101, 00) 65535:255=(257,0)

FFFF:F0=(0111, OF) 65535:240=(273, 15)

FFFF:0F=(1111, 00) 65535:15=(4369, 0)

5555:АА=(0080, 55) 21845:170=(128. 85)

АААА:55=(0202. 00) 43690:85=(514, 0)

1.5.2.3. Формат 24:16=18,16)

Программа Д24 реализует деление с предварительным преобразованием делителя в дополнительный код и восстановлением остатка путем сохранения и извлечения его из стека (аналогичная программа приведена в работе [21]):



0А60 0050

ORG 0A60H ДОПВ SET 50H

0А60 7D

0А61 91

0А62 7С

0А63 98

0А64 ВО

?ЕСЛИ ПЕРЕПОЛНЕНИЕ.CY=0

;ДОПОЛНЕНИЕ ДЕЛИТЕЛЯ

0А65 CD5000

CALL

ДОПВ

5(Б.С)-Д0П0ЛНИТЕЛЬННЙ КОД

0А68 7В

;(А)-МЛБ ДЕЛИМОГО

0А69 1Е08

;СЧЕТЧИК ЦИКЛОВ

5сдвиг ОСТАТКА И ЧАСТНОГО ВЛЕВО В (H.L.A)

0А6В 29

ЦИКЛ: DAD

0А6С DA810A

ПЕР1

?ЕСЛИ ПЕРЕПОЛНЕНИЕ ОСТАТКА

0A6F 87

0А70 D2740A

ПЕР2

0А73 23

;УЧЕТ ПЕРЕНОСА

•/СЛОЖЕНИЕ ОСТАТКА С ДОПОЛНИТЕЛЬНЫМ КОДОМ ДЕЛИТЕЛЯ

0А74 Е5

ПЕР2! PUSH

; СОХРАНЕНИЕ ОСТАТКА

0А75 09

0А76 DA8A0A

ПЕРЗ

jЕСЛИ СУММА ) 0

rCrnm ( 0.ВОССТАНОВЛЕНИЕ ОСТАТКА

0А79 Е1

; ПРОВЕРКА КОНЦА ЦИКЛА

0А7А ID

ПЕР5: BCR

0А7В С26В0А

ЦИКЛ

;ЗАЦИКЛИБАНИЕ

0А7Е 5F

;(Е)-ЧАСТНОЕ

0A7F 37

;CY=i

0А80 С9

; ПЕРЕПОЛНЕНИЕ

ОСТАТКА.РАЗРЯД ЧАСТН0Г0=1

0А81 8F

ПЕР1: ADC

;СДВИГ.+1 в ЧАСТНОЕ

0А82 D2860A

ПЕР4

0А85 23

;УЧЕТ ПЕРЕНОСА

0А86 09

ПЕР4! DAD

; ОЧЕРЕДНОЙ ОСТАТОК

0А87 С37А0А

ПЕР5

гСУММА ) 0.РАЗРЯД ЧАСТНОГ0=1

0А8А 33

ПЕРЗ: INX

ОАВВ 33

;БАЛАНС СТЕКА

0А8С ЗС

;+1 в ЧАСТНОЕ

0A8D С37А0А

ПЕР5

0000

JПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ ВЕЗ ЗНАКА ;ФОРМАТА 24:16=(8»16).

;МЕТОД ДЕЛЕНИЯ С ВОССТАНОВЛЕНИЕМ ОСТАТКА. 5ВХ0ДНЫЕ ПАРАМЕТРЫ!(НгЕтЕ)-ДЕЛИМОЕ,(В.С)-ДЕЛИТЕЛЬ. !ВЫХОДНЫЕ ПАРАМЕТРЫ!(Е)-ЧАСТНОЕ.(H»L)-0CTAT0K.CY=O-!-ПРИЗНАК ПЕРЕПОЛНЕНИЯ ЧАСТНОГО.ИСПОЛЬЗУЮТСЯ ВСЕ !РЕГИСТРЫ.КРОМЕ В.ГЛУБИНА СТЕКА-2.ИСПОЛЬЗУЕТСЯ ;ПОДПРОГРАММА »ДОПВ».

;0ЦЕНКА:ДЛИНА-48 БАЙТ.ВРЕМЯ-НЕ БОЛЕЕ 994 ТАКТА.

sПРОВЕРКА ЧАСТНОГО НА ПЕРЕПОЛНЕНИЕ!ЧАСТНОЕ > 8 БИТ?



в программе использован прием баланса стека с помощью команд изменения непосредственно указателя стека INX SP вместо обычно применяемых команд извлечения из стека типа POP. Такой прием полезен в случаях, когда все регистры заняты, но необходимо реализовать баланс стека. Тестовые данные, программы приведены в табл. 1.18.

Табл. 1.18. Тесты деления формата 16:8=(16, 16) (целые беззнаковые двоичные числа)

Представление чисел

шестнадцатеричное

десятичное

FFFFOI:FFFF=(FF. 0000) 0E0FFF:F000 =(0Е. EFFF) 38АА73:5555 =(АА, 0001) FE01FF:FF00=(FF, 00FF) FE00FF:FF00=(FE, FEFF)

1671I425:65535=(255, 0) 921599;61440=(14, 61439) 3713651:21845=( 170, 1) 16646655:65280=(255, 255) 16646399:65280=(254. 65279)

1.5.2.4. Формат 32:16= (16,16)

Программа Д32, подобно программе Д16, реализует деление по классической схеме с вычитанием делителя, восстановлением остатка путем его сложения с делителем и размещением частного на месте младших байтов делимого (аналогичная программа приведена в работе [71]:

0А90 ORG 0А90И

Д32:

»««««»»»»««»к»«к»« ;ПОДПРОГРАММА ДЕЛЕНИЯ ЦЕЛЫХ ДВОИЧНЫХ ЧИСЕЛ БЕЗ ЗНАКА ;ФОРМАТА 32:16=(16,16).

гМЕТОД ДЕЛЕНИЯ С ВОССТАНОВЛЕНИЕМ ОСТАТКА. ;ВХОДНЫЕ ПАРАМЕТРЫ: (Н,L,В,Е)-ДЕЛИМОЕ, (В,С)-ДЕЛИТЕЛЬ. гВНХОДНЫЕ ПАРАМЕТРЫ:(В,Е)-ЧАСТНОЕ,(H,L)-OCTATOK,CY=0-!-ПРИЗНАК ПЕРЕПОЛНЕНИЯ ЧАСТНОГО.ИСПОЛЬЗУЮТСЯ ВСЕ РЕ-?ГИСТРЫ,СОХРАНЯЕТСЯ (В,С).ГЛУБИНА СТЕКА-2. ;0ЦЕНКА!ДЛИНА-41 БАЙТ,ВРЕМЯ-НЕ ЕОЛЕЕ 2316 ТАКТОВ.

snPOBEPKA ЧАСТНОГО НА ПЕРЕПОЛНЕНИЕ:ЧАСТ НОЕ ) 16 ЕИТ?

0А90 7D

0А91 91

0А92 7С

0А93 98

0А94 ВО

;ЕСЛИ ПЕРЕПОЛНЕНИЕ,СУ=0

0А95 ЗЕ10

A,16

;СЧЕТЧИК ЦИКЛОВ

JСДВИГ ВЛЕВО ОСТАТКА И

ЧАСТНОГО В (H,L,B,E)

0А97 29

ЦИКЛ: DAD

0А98 F5

PUSH

гСОХРАНЕНИЕ СЧЕТЧИКА,ПЕРЕНОСА

0А99 ЕВ

XCHG

0А9А 29



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.0628
Яндекс.Метрика