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

для ВХОДНОЙ и выходной строк, а также счетчик текущей длины массива. Поиск элемента таблицы, содержащего очередной код входной строки, осуществляется с помощью подпрограммы ПСК1, которая находит заданный код в определенной области памяти и возвращает его абсолютный адрес в регистровую пару (И, L). Для получения индекса из этого абсолютного адреса вычитается адрес начала таблицы, затем значение индекса записывается в выходную строку.

5.5.4. УДАЛЕНИЕ ФРАГМЕНТА МАССИВА

Под удалением фрагмента массива понимается удаление содержимого некоторой области памяти, входящей в данный массив, при этом длина массива уменьшается на длину удаляемого фрагмента. Пусть имеется массив с начальным адресом А и конечным адресом D, из которого необходимо удалить фрагмент, начинающийся с адреса В и оканчивающийся адресом С (A<B<C<D). Как видно из рис. 5.7, задача удаления фрагмента сводится к перемещению содержимого области памяти, ограниченной адресами С и D (остаток массива), в область памяти, начинающуюся с адреса В (адрес первого удаляемого байта). Программа удаления имеет вид:

удал!

i подпрограмма удаления фрагмента массива. i параметры1(в»с)-адрес начала удаляемого фрагмента <уф) i (DsE)- адрес конца уф. <ST+1) - адрес конца массива. i оценка: время-268+48«м тактов. где n - длина "остатка"

i массива; длина 21 байт.

;XXXXXXXXXXXXXXXXXXXXXXX«X)()tXVXXXKX}t]i]iKXXXKXXXXXXXXXX»KX

; подготовка параметров для подпрограммы пересылки

XTRH

В.С.1

; (ЕуО-АДРЕС КОНЦА МАССИВА

2244 79

2245 93

2246 6F

2247 78

2248 9А

2249 67

; (H.L)-ДЛИНА "ОСТАТКА" МАССИВА

XTRH

B.Crl

; (В.О-АДРЕС НАЧАЛА уф

; вызов ПОПЛПРОГРАМНЫ ПЕРЕСЫЛКИ

2257 С31А20

К0П2

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



Входной

Удаляемый

массиб

фрагмент

Орвсыш

Выходной массив

В и-(С-В)

Рис. 5.7. Схема удаления фрагмента массива

Адресом начала массива-источника является адрес последнего удаляемого байта, адресом начала массива-приемника - адрес первого удаляемого байта. Длина перемещаемой области определяется как разность между адресами последнего байта массива и последнего удаляемого байта. Использование подпрограммы КОП2, которая вьшолняет перемещение с младших адресов в отличие от подпрограммы КОП1, выполняющей перемещение со старших адресов, объясняется необходимостью анализа ситуации, когда длина удаляемого фрагмента меньше длины остатка массива. При этом адрес конца массива-приемника будет больше адреса начала массива-источника.

5.5.5. ВСТДВКЛ ФРАГМЕНТА В МАССИВ

Пусть в некоторый массив, ограниченный адресами А и С, необходимо, начиная с адреса В, вставить содержимое области памяти, не принадлежащей этому массиву, при этом вся информация исходного массива сохраняется. Решение задачи осуществляется в два этапа. Сначала необходимо освободить в массиве место под вставляемый фрагмент. Для этого часть массива, ограниченная адресами В и С, сдвигается в памяти в сторону возрастания адресов на количество байтов, равное длине вставки, затем в освобожденную область копируется содержимое вставляемого фрагмента (рис. 5.8). Программа вставки имеет вид:



BCTABs

J ПОДЯРОГРЙНМА ВСТАВКИ ФРАГМЕНТА В МАССИВ. ; ПАРАМЕТРЫ: (В.С) - АДРЕС МЕСТА ВСТАВКИ. (В.Е) - АДРЕС ; КОНЦА МАССИВА.(Sr+1)-АДРЕС ПЕРВОГО ВСТАВЛЯЕМОГО БАЙТА. s (ST+2) - ДЛИНА ВСТАВКИ.

J ОЦЕНКА! ВРЕМЯ ВЫПОЛНЕНИЯ - 643+48хМ+48»Н ТАКТОВ.ГДЕ N-s ДЛИНА "ОСТАТКА" МАССИВА.м-ДЛИНА ВСТАВКИ?ДЛИНА-36 БАЙТ5 ; ГЛУБИНА СТЕКА-2 БАЙТА.

;«»*xxxxxxxx»vxx»xxx»xxxx»«»»*x«»*k»*kxxxxxxx«xxxxx»xxxx

; ПЕРЕСЫЛКА ЧАСТИ МАССИВА ДЛЯ ОБЕСПЕЧЕНИЯ ВСТАВКИ

225А 7В

2253 91

225С 5F

225D 7А

225Е 98

225F ЗС

2260 57

(D.E)-ДЛИНА "ОСТАТКА" НАССИВА

2261 ЕВ

XCHG

LDSP

D.E.2

(D,E)-ДЛИНА ВСТАВКИ

226В ЕВ

XCHG

226С D5

PUSH

(ST)-ДЛИНА "ОСТАТКА" МАССИВА

226Г1 09

226Е 59

226F 50

(D.E)-АДРЕС ОЕЛАСТИ ИСТОЧНИКА

2270 4D

2271 44

(Е.О-АДРЕС ОЕЛАСТИ ПРИЕМНИКА

2272 Е1

(H.L)-ДЛИНА "ОСТАТКА" МАССИВА

2273 CD0020

CALL

Koni

! ПЕРЕСЫЛКА ВСТАВКИ В

0СВ0Е0ЖЕЕННУЙ ОРЛАСТЬ

XCHR

(В.О-АДРЕС МЕСТА ВСТАВКИ

LDSP

D.E.2

2283 ЕВ

XCHG

(H.L)-ДЛИНА ВСТАВКИ

LDSP

D.E.I

(D.E)-АДРЕС НАЧАЛА ВСТАВКИ

228D Сг0020

К0П1

Первый фрагмент программы обеспечивает «раздвижку» массива путем перемещения содержимого области памяти, ограниченной адресом вставки и адресом последнего байта массива, в область памяти, начинающуюся с адреса, значение которого равно сумме адреса вставки и длины вставляемого фрагмента. Перемещение выполняется подпрограммой коп1. Во втором фрагменте обеспечивается заполнение освобожденной области содержимым вставляемого фрагмента. Здесь вторично вызывается подпрограмма коп1, для которой массивом-источником является вставляемый фрагмент, а адресом начала массива-приемника-адрес вставки.

В данной программе в отличие от предыдущей перемещение информации вьшолняется с помощью подпрограммы коп1, а не коп2. Это объясняется тем, что если длина вставляемого фрагмента меньше длины остатка



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