|
Главная -> Появление первого микропроцессора 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 ; ПРОВЕРКИ ОЧЕРЕДНОГО БйИТй
Байт, полученный после вызова внешней подпрограммы генерации кода, проверяется на равенство кодам ООН и 7FH. Если он не равен ни одному из них, то записывается в буфер, после чего увеличивается на единицу (ин-крементируется) указатель и проверяется достижение верхней границы буфера путем сравнения с нулем содержимого счетчика незаписанных байтов. При достижении этой границы осуществляется возврат из данной программы с установкой признака (флага) Z в единицу. Если полученный код является кодом «ВК», возврат выполняется с установкой флага Z в нуль. Если же полученный код является кодом «ЗБ», производится удаление из буфера последнего введенного символа посредством уменьшения на единицу (декрементирования) значения указателя. При этом контролируется достижение нижней границы буфера: текущее значение указателя сравни- вается с адресом начала буфера, который запоминается в стеке в начале работы программы. Коды «ВК» и «ЗБ» в буфер не записываются. 5.2.3. ФОРМИРОВАНИЕ МАССИВА С КОНТРОЛЕМ ПРОИЗВОЛЬНЫХ УПРАВЛЯЮЩИХ КОДОВ Для унификации программ формирования массивов целесообразно предварительную обработку информации возложить на внешние подпрограммы, каждая из которых обрабатывает отдельный управляющий символ. Взаимодействие между программой формирования массива и подпрограммами обработки управляющих кодов можно осуществить с помощью специальной таблицы, структура которой приведена на рис. 5.2. Каждый элемент таблицы состоит из трех байтов и содержит значение управляющего кода, а также адрес подпрограммы его обработки. Последним байтом таблицы всегда является код OFFH, что позволяет сделать таблицу переменной длины. Ниже приведена программа формирования буферного массива, которая селектирует управляющие коды и в случае их обнаружения вызывает соответствующую подпрограмму обработки: 207D С5 207Е 7fi 207F ВЗ 2080 С28520 2083 С1 2084 С9 2085 219820 2088 Е5 2096 ЕБ 2097 Е9 2098 F5 2099 ЕБ ЗЙПЗ: ; ПОЯПРОГРйМНА ЗАП0.ЧНЕНИЯ МАССИВА КОЛАМИ,ВНРАБАТЫВАСМЬИИ ; ВНЕШНЕЙ ПОЯПРОГРАММОЙ ГЕНЕРАЦИИ КОДОВ(ПГК) С КОНТРОЛЕМ ; кодов ПО ТАБЛИЦЕ УПРАВЛЯВШИХ КОЛОБ (ТУК). ; ПАРАМЕТРЫ: (Б.С)-АДРЕС НАЧАЛА МАССИВА, (D,E)-ДЛИНА МАС- ; СИВА,(ST+1>-АДРЕС ПГК, (ST+2)-АДРЕС ТУК. ; ОЦЕНКА: ВРЕНЯ-31К453+63»К)«1И(469+631»К)КМ ТАКТОВ, ГДЕ ; М~КО,ЧИЧЕСТБО "ОБЫЧНЫХ" СИМВОЛОВ,М-КОЛИЧЕСТВО ВВЕДЕННЫХ ; "УПРАБ.ЧЯВ111ИХ" символов, к- КОЛИЧЕСТВО ЭЛЕМЕНТОВ в тук; i ЯЛИИА-И9 БАЙТ ; • ГЛУБИНА СТЕКА-4 БАЙТА. PUSH в S ПРОВЕРКА НА ДОСТИЖЕНИЕ ВЕРХНЕЙ ГРАНИЦЫ МАССИВА ЦИКЛ4: mi А,В ORA Е JHZ ПЕР5 ; POP Б ОРГАНИЗАЦИЯ ВЫЗОВА ПГК ПЕР5! ПЕРб; PUSH XTRH XCHG PCHL PUSH XCHG Н,ПЕР6 Н D,E,3 ЕСЛИ HE ДОСТИГНУТА АДРЕС ВОЗВРАТА Б СТЕК (В,Е>-АДРЕС ПГК ; СОХРАНЕНИЕ ВВЕДЕННОГО СИМВОЛА 20II4 ЕВ 2085 Fl 2086 5F 2087 Е5 2088 7Е 2089 БВ 20Bft CftC820 20BD FEFF 20BF CADF20 20С2 23 20C3 23 20C4 23 20C5 C3B820 20E8 23 20C9 5E 20Cft 23 20CB Si 20CC 217E20 20CF E3 20D0 EB 20DE E9 20DF El 20E0 7B 20E1 EB 20E2 02 20F0 03 20F1 IB 20F2 C37E20 XTRN D»E,3 XTRN D.E.4 XCHG POP PSU ; <A)-ВЕЕЯЕНШЙ СИМВОЛ i ПРОВЕРКА КОДА НА ПРИНАДЛЕЖНОСТЬ К "УПРАВЛЯЮЩИМ" пои Е»А PUSH Н «ИКЛ5: мои А»М СМР Е JZ ПЕР7 t ПРОВЕРКА НА ОКОНЧАНИЕ ПРОСМОТРА ТУК CPI OFFH JZ ПЕР8 ! ЕСЛИ КОНЕЦ ТУК 5 ПРОДОЛЖЕНИЕ ПРОСМОТРА Т>1С INX Н INX Н INX Н JMF «ИКЛЗ ВЫЗОВ ПОДПРОГРАММЫ ОБРАБОТКИ "УПРАВЛЯВШЕГО" СИМВОЛА ;<В7Е)-АПРЕС ТУК i СОХРАНЕНИЕ АДРЕСА ТУК i ЕСЛИ "УПРАВЛЯЮЩИЙ" СИМВОЛ ПЕР7: LXI XTHL XCHG XTRN PCHL ЗАПИСЬ СИМВОЛА В МАССИВ Н Е,М Н»ЦИКЛ4 В>Е>4 aioD-АДРЕС ВОЗВРАТА (H»L)-АДРЕС ТУК <H»L)-АДРЕС ПОДПРОГРАММЫ <В,Е)-ДЛИНА МАССИВА ПЕР8! XCHG STAX XTRN INX A»E BsEvS «ИКЛ4 (A)-КОЛ ВВЕДЕННОГО СИМВОЛА <Г1.Е)-АДРЕС ТАБЛИЦЫ <В»Е)-ЯЛИНА МАССИВА МОДИФИКАЦИЯ АДРЕСА МАССИВА МОДИФИКАЦИЯ ДЛИНЫ МАССИВА В этой программе в отличие от предыдущих программ проверка на достижение границы заполняемого массива выполняется не в конце итерации, а в начале. Этот прием позволяет корректно анализировать ситуацию, когда во входном параметре задается длина заполняемого массива, равная нулю. После вызова подпрограммы генерации кода полученный код сравнивается со всеми управляющими кодами, содержащимися в таблице. Если очередное сравнение оказывается успешным, то следующие два байта таблицы помещаются в регистровую пару (Н, L), в вершину стека загружается адрес начала итерации (адрес возврата) и выполняется команда PCHL. Тем самым осуществляется вызов подпрограммы обработки найденного управляющего символа. Параметры, передаваемые в подпрограммы обработки управляющих символов. 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.0111 |
|