![]() |
Главная -> Появление первого микропроцессора 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
![]() llepectimaz)----- (первсьтаТ) Выходной массиб В ВНЕ-В) С+(£-В) Рис. 5.8. Схема вставки фрагмента массива массива (области памяти, ограниченной адресами В и С), то при выполнении «раздвижки» адрес начала массива-приемника оказывается меньше адреса конца массива-источника, и пересылку надо производить со старших адресов. Во втором фрагменте безразлично, какую подпрограмму применять: КОП1 или КОП2. Подпрограмма КОП1 используется только с целью унификации, хотя для уменьшения времени выполнения более целесообразно использовать подпрограмму КОП2. 5.5.6. ВСТДВКА ЭЛЕМЕНТА В СПИСОК Модификация списка в отличие от модификации массива не требует физического перемещения информации; достаточно только изменить значение полей связи соответствующих элементов списка. Для вьшолнения вставки, элемента в список необходимо указать точку входа в него, т. е. адрес начала списка и место вставки в список, идентифицируемое по заданному значению ключа того элемента, после которого необходимо произвести вставку. Алгоритм решения этой задачи состоит в следующем. Последовательно просматривается весь список для нахождения элемента, значение поля ключа которого равно заданному, затем содержимое поля связи найденного элемента копируется в поле связи вставляемого элемента, а туда записывается адрес вставляемого элемента (рис. 5.9). Программа вставки имеет вид: Входной масшЬ 22АВ CD9022 22АЕ 711 22AF М 22Е0 ЗС 22В1 С2В722 22В4 2EFF 22Е6 С9 ЕСТСП5 ! ПОДПРОГРАММА ВКЛЮЧЕНИЯ ЭЛЕМЕНТА В СПИСОК. ; ВХОДНЫЕ ПАРАМЕТРЫ: (В«С)-АЛРЕС НАЧАЛА СПИСКА» <Е)-ЗНА- ; ЧЕНИЕ КЛЮЧА ЭЛЕМЕНТА.ПОСЛЕ КОТОРОГО ПРОИЗВОДИТСЯ ВКЛЮ- ; <СНИЕ» (ST+1)-АДРЕС ВКЛЮЧАЕМОГО ЭЛЕМЕНТА. ; ВЫХОДНЫЕ ПАРАМЕТРЫ: <Й)=0-ВКЛИЧЕНИЕ УДАЧНО,<А)=ОГГН - f НЕУДАЧНО. ; ОПЕНКА: EPEiCT-162i-93«H ТАКТОВ» ГДЕ Н - КОЛИЧЕСТВО ЭЛЕ-; МВ1Т0В В СПИСКЕ? ДЛИНА-33 БАЙТА? ГЛУБИНА СТЕКА-2 БАЙТА. f ОРГАНИЗАЦИЯ ПОИСКА ЭЛЕМЕНТА, ПОСЛЕ КОТОРОГО f ОСУЩЕСТВЛЯЕТСЯ ВКЛЮЧЕНИЕ CALL ПСКСП •г ПРОВЕРКА РЕЗУЛЬТАТА ПОИСКА MOV A,L AHA Н IWi А JNZ ПЕР14 i ВОЗВРАТ ПРИ НЕУДАЧНОМ ПОИСКЕ HVI А, OFFH ; МОДИФИКАЦИЯ поля СВЯЗИ В ЭЛЕМЕНТЕ СПИША, ? ПОСЛЕ КОТОРОГО ПРОИЗВОДИТСЯ ВКЛЮЧЕНИЕ
Поиск элемента по заданному значению ключа выполняется с помощью подпрограммы ПСКСП. После возврата из этой подпрограммы проверяется содержимое регистровой пары (Н, L). Если оно равно OFFH (элемента с заданным ключом в списке не существует), в выходной параметр записывается признак неудачного выполнения и осуществляется возврат из программы. Проверка производится путем логического умножения содержимого регистров (Н) и (L) и последующего их инкрементиро-вания. Очевидно, что результат будет нулевой только в том случае, если в регистрах (Н) и (L) содержался код OFFH. Если элемент найден, в его поле связи записывается адрес вставляемого элемента, причем старое содержимое поля связи сохраняется в регистровой паре (В, С). Всгтбляемый
Рис. 5.9. Схема вставки элемента в список: А, в, с, D - адреса элементоа списка; Е - адрес встааляемого элемента; К - чение ключа В последнем фрагменте программы это сохраненное значение записывается в поле связи вставляемого элемента. 5.5.7. УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ СПИСКА Удаление элемента из списка заключается в том, что в поле связи элемента, стоящего перед удаляемым, записывается адрес элемента, стоящего в списке после удаляемого. Идентификацию удаляемого элемента списка можно произвести точно так же, как и ранее. Программа удаления имеет вид: /ДСП: ; ПОДПРОГРАММА УДАЛЕНИЯ ЭЛЕМЕНТА ИЗ СПИСКА. ; ВХОДНЫЕ ПАРАМЕТРЫ! (В»С)-АДРЕС НАЧАЛА СПИСКА» <Е)-КОЛ 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.0025 |
|