|
Главная -> Появление первого микропроцессора 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 работки символов требуют их представления в коде КОИ-7, а вывод этих символов на индикаторное табло необходимо осуществлять в сегментном коде. Аналогичная ситуация может возникнуть и при вводе информации с внешнего устройства. Процедуры вставки и удаления элементов рассматриваются не только для динамических структур (списков), но и для статических (массивов). К простому преобразованию массивов приходится чаще всего прибегать в том случае, когда в массиве содержится символьная информация, подлежащая редактированию. 5.5.2. ПРЯМАЯ ПЕРЕКОДИРОВКА СТРОКИ Пусть имеется некоторая строка, представляющая собой массив символов, закодированный в системе кодов А (входная система кодирования). Необходимо получить строку, содержащую такую же последовательность символов, но закодированную в системе кодов В (выходная система кодирования). Если входная и выходная системы кодирования различаются незначительно (небольшим количеством символов), перекодировку можно осуществить путем последовательного просмотра входной строки и селекции различающихся массивов с их последующей заменой. В более общем случае перекодировка производится с помощью специальной таблицы. Таблица составляется следующим образом: в i-й элемент таблицы помещается код символа в выходной системе кодирования, соответствующий символу, который кодируется кодом i во входной системе кодирования. Таким образом, код символа во входной системе кодирования можно использовать как индекс для нахождения соответствующего кода выходной системы кодирования в таблице (схема перекодировки приведена на рис. 5.6). Программа перекодировки имеет вид: ППКОД: ; ЯОДПРОГРАМНА ПРЯНОЙ ПЕРЕКОДИРОВКИ СТРОКИ. ; ПАРАНЕТРЫ: (BfC) - АДРЕС ВХОДНОЙ СТРОКИ» (В»Е) - АДРЕС ; ТАБЛИЦЫ ПЕРЕКОДИГОВК-И» (ST+l) - АДРЕС ВЫХОДНОЙ СТРОКИ. ; (ST+2)-ДЛИНА ВХОДНОЙ СТРОКИ. 5 ОЦЕНКА: БРЕИЯ - 10+385»Н ТАКТОВ. ГДЕ N - ДЛИНА СТРОКИ? 5 ДЛИНА-67 ЕАЙТ. ;кккхкххххкккххххххххкхххнк«ххххххххххкхххххххххх«««х»«« » ФОРНИГОВАИИЕ ИНДЕКСА ПО КОДУ ВХОДНОЙ СТРОКИ 21АЗ 2600 KVI Н>0 21А5 OA LDAX Б
Входиаа строка Лйходтя строка
Таблица перекодироЬки Рис. 5.6. Схема перекодировки символов входной и выходной строк Программа представляет итеративный цикл, на каждой итерации которого перекодируется один байт. Используются два указателя - для входной и выходной строк, а также счетчик текущей длины для контроля окончания цикла. Значение очередного байта выходной строки определяется следующим образом: содержимое очередного байта входной строки добавляется к адресу начала таблицы, затем содержимое ячейки памяти с полученным адресом переписывается в текущий байт выходной строки. S.S.3. ОБРАТНАЯ ПЕРЕКОДИРОВКА СТРОКИ Эта задача отличается от предыдущей тем, что таблица перекодировки содержит коды символов не в выходной, а во входной системе кодирования. Обратную перекодировку можно свести к прямой, если составить новую таблицу. Как правило, в МП системах перекодировку символов приходится проводить как в прямом, так и в обратном направлениях, и наличие двух таблиц, содержащих одну и ту же информацию, является избыточным. При обратной перекодировке значение каждого кода входной строки отыскивается в таблице, а в соответствующее место выходной строки записывается индекс найденного элемента таблицы. Программа перекодировки представлена ниже: опкол: ; nOflnPOrPfthhA обратной перекодировки строки. t параметры: (б,с) - адрес входной строки. (в.е) - адрес ; таблицы перекодировки. (st+1) - адрес выходной строки. } (st+2) - длина входной строки. ; оценка: время-10h26g5xm тактов.где М - длина выходной ; строки; длина - 79 байт; ГЛУГ*1НА стека - s байт. ;xkxxx«xx*x»xmsxxsx*kxxxxxx«k«xxxxxsxxxxxx«xxx«xkxxxxx»» ; поиск элемента входной строки в таблице перекодировки 21Е7 21Е8 21Е9 21ЕА 21ЕВ 21ЕС 21EF 21F0 21F3 21F4 2iF5 21F6 21F7 21FS 21F9 21FA с5 69 60 4е d5 217f00 е5 cbf520 2204 7в 2205 02 2206 03 2214 с1 2215 03 2223 ов 2224 79 2225 во 2233 с2е721 2236 с9 push push lxi push call pop pop mov sub mov mov sbb mov l.c Н.б h.7fh h пск1 a.l e l.a a.h в ; (с)-код ЭЛЕМЕНТА входной строки ! (е)-код элемента выходной строки ! запись элемента в выходную строку lbsp б.с.2 ; (б.с)-адрес выходной строки мои a.l stax в ; модификация указателей ihx в xtrn в.с,2 pop в ; (в,с)-адрес входной строки inx Б 5 проверка на окончание просмотра входной строки xtrn вех мои ora xtrh jnz ret в.с.2 в в.с.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.0706 |
|