|
Главная -> Появление первого микропроцессора 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 ; подготовка параметров для подпрограммы пересылки
В программе перемещение информации в массиве осуществляется с помощью подпрограммы КОП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 ; ПЕРЕСЫЛКА ЧАСТИ МАССИВА ДЛЯ ОБЕСПЕЧЕНИЯ ВСТАВКИ
Первый фрагмент программы обеспечивает «раздвижку» массива путем перемещения содержимого области памяти, ограниченной адресом вставки и адресом последнего байта массива, в область памяти, начинающуюся с адреса, значение которого равно сумме адреса вставки и длины вставляемого фрагмента. Перемещение выполняется подпрограммой коп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.0124 |
|