Доставка цветов в Севастополе: 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

массивом-источником и массивом-приемником, не пересекаются, перемещение выполняется корректно как программой К6П1, так и программой КОП2. Предпочтительнее пользоваться программой КОП2, так как она короче и выполняется быстрее.

5.4. поиск в структурах 5.4.1. ЗАДАЧИ ПОИСКА

Под поиском понимается определение местоположения некоторой переменной или элемента данных в структуре. Практически любой обработке информации предшествуют процедуры поиска, с помощью которых осуществляется доступ к обрабатываемым данным. Процедуры поиска разнообразны. Ниже рассматриваются некоторые типичные задачи, решаемые в процессе поиска.

К поисковой процедуре сводится -задача ассоциативного доступа к переменной, когда по известному значению переменной требуется определить ее адрес. При селективной обработке таблиц и списков поиск местоположения требуемых элементов осуществляется по известным значениям ключевых записей. При обработке символьных строк применяется поиск известной цепочки символов в заданной строке для обнаружения различных ключевых слов. Приведенные далее программы предназначены в основном для иллюстрации типичных поисковых процедур, но они могут быть использованы как элементарные при разработке реальных программных комплексов.

5.4.2. ПРОСТОЕ СРАВНЕНИЕ МАССИВОВ

Эта операция выполняет побайтное сравнение заданных массивов, т. е. первый байт одного массива сравнивается с первым байтом второго массива, второй байт - со вторым и т. д. Если при очередном сравнении будет установлено неравенство байтов, дальнейшее сравнение прекращается, так как одного этого факта достаточно, чтобы сделать вывод о неравенстве массивов. Программа сравнения имеет следующий вид:

СРБН1:

i ПОДПРОГРАММЙ СРАРНЕНИЯ ДРУХ НАССИЕОЕ. ; ВХОДНЫЕ ПАРАМЕТРЫ:(Б»С) - АДРЕС НАЧАЛА ПЕРВОГО МАССИВА ; (Ml)f (В.Е)-АДРЕС НАЧАЛА ВТОРОГО МАССИВА (М?). (ST+1)-! ДЛИНА МАССИВОВ.



212ft E5 212D C5 212C D5 212D EB

2137 7Б

2138 Б2

2139 3EFF 213B CA4D21

213E OA 213F BE

2140 3E00 2142 C24D21

2145 03

2146 23

2147 ID

2148 C33721

214Б Dl 214C CI 214D El 214E C9

! выходной nftPA«ETp!<A)=OFFH. если кассиры равны,(a>=0 б

; противной случае.

! оценка: бремя - 136+е2«Н тактов, где n-количестбо эле-

? ментор; ДЛИНА-36 байт; глубина стека - 6 байт.

; сохранение значений входных параметров в стеке

PUSH н .

PUSH PUSH XCHG LDSP

; (H,L>- АДРЕС НАЧАЛА М2 ; (D,E)- ДЛИНА МАССИВОВ

D>E,4

; ПРОВЕРКА ТЕКУЩЕЙ ДЛИНЫ МАССИВОВ НА НОЛЬ иИКЛ8: мои A>F ORA D

MUI AtOFFH ; УСТАНОВКА ФЛАГА "РАЕНЫ" JZ ПЕРЮ ; ЕСЛИ ДЛИНА - НОЛЬ

; СРАБ1ЕНИЕ ОЧЕРЕДНЫХ БАЙТОВ НАССИБОЕ LDAX В СМР М

HUI А, О ; УСТАНОВКА ФЛАГА "НЕ РАВНЫ" JNZ ПЕРЮ ; ЕСЛИ БАЙТЫ НЕ РАВНЫ ! МОДИФИКАЦИЯ УКАЗАТЕЛЕЙ И ДЛИНЫ НАССИБОЕ INX Е INX Н вех D

JHP ЦИКЛ8 • •>

; ЕОССТАНОБЛЕНИР РЕГИСТРОЕ ПЕРЮ: POP В

POP Б

POP Н

Непосредственное сравнение выполняется путем организации итерационного цикла. В начале каждой итерации проверяется значение счетчика текущей длины, и если оно равно нулю, то производится выход из цикла. Доступ к байтам, которые подлежат сравнению, осуществляется с помощью двух указателей, которые адресуют текущие байты соответственно первого и второго массивов. Если при очередном сравнении флаг Z равен нулю, т. е. байты не равны, выполнение цикла прекращается. В конце итерации модифицируются указатели массивов и счетчик текущей длины. Значение выходного параметра записывается в регистр (А) в теле цикла непосредственно перед командами условного перехода с помощью команды MVI, которая не изменяет состояние флагов микропроцессора. Этот прием позволяет достигнуть большей компактности программы, но увеличивает время ее вьшолнения.

В программе предусмотрено сохранение значений входных параметров. В некоторых случаях при выполнении



операции сравнения необходимо не только знать факт неравенства массивов, но и установить адреса байтов, по которым произошло несовпадение. Это можно обеспечить, если убрать из текста программы команды записи в стек и команды восстановления из стека, а также команду возврата, причем команды условного перехода, обеспечивающие выход из цикла, заменить командами условного возврата. Тогда в-случае несовпадения массивов наряду с признаком в регистре (А) в регистровые пары (D, Е) и (Н, L) будут возвращены адреса несовпадающих байтов соответственно первого и второго массивов. Если необходимо обеспечить обработку несовпадающих байтов с помощью внешней подпрограммы, например для индикации их адресов и значений, следует команду условного перехода заменить командой условного вызова CNZ подпрограммы обработки.

5.4.3. ПОИСК ОДНОБАЙТНОГО КОДА В МАССИВЕ

Задача состоит в определении адреса байта при известных его значениях и границах области памяти, в которой он может быть расположен. Программа поиска имеет вид.

ПСК1:

{ХНКККУУКККККККХКХКККУКХХККККЖКККЖХККККККХКХККККУХХКК»)!

f ПОДПРОГРАННА ПОИСКА КОДА б МАССИВЕ.

; ВХОДНЫЕ ПАРАМЕТРЫ: (С)-ЗНАЧЕНИЕ КОДА, (В.Е)-АДРЕС НАЧА.ЧА

; МАССИВА. (ЕТ+1)- ДДИНА МАССИВА.

! ВЫХОДНЫЕ ПАРАМЕТРЫ: (H.D-AflPEC НАЙДЕННОГО ЕАИТА.ЕСДИ

! ПОИСК УСПЕ1)1ННй, (H.L)=OFFFFH В ПРОТИВНОМ СЛУЧАЕ.

t ОЦЕНКА: ВРЕНЯ-24+9йхМ ТАКТОВ.ГДЕ К - ДЛИНА НАССИВАг

; длинА-зо байт.

гкккхх»ххкх»кхкхх*х»хкхкх**»»»к«кмхяххкккхкхакххкмкхх*хч ! ПРОВЕРКА НА ДОСТИЖЕНИЕ ВЕРХНЕЙ ГРАНИЦЫ МАССИВА XCHG

(DvE)-ДЛИНА МЛССИРЛ

20F5 ЕВ

20FF 7Б

2100 Е2

2101 СА0С21

2;104 7Е

2105 Б9

2106 С8

2107 23

2108 ID

2109 C3F620

210С 21FFFF 210F С9

ЦИКЛ6:

LDSP MOV ORA JZ

D.E.I А.Е D

ПЕР9

ЕСЛИ КОНЕЦ МАССИВА

! СРАВНЕНИЕ ОЧЕРЕДНОГО БАЙТА MOV А.М СМР С RZ

; ПРОДОЛЯЕНИР. ПОИСКА

INX Н

DCX В

JHP ЦИКЛ6 ; ВОЗВРАТ ПРИ БЕЗУСПЕШНОМ ПОИСКЕ ПЕР9: LXI H.0FFFFH

! при удачном поиске



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