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

; ПРОВЕРКИ ОЧЕРЕДНОГО БйИТй

2042 С1

ПЕР2: POP

2043 FEOD

2045 Сй7а20

ПЕРЗ ! ЕСЛИ "ВОЗВРАТ КАРЕТКИ"

2048 VhA-

. 7FH

204fi С26Б20

ПЕР4 ; ЕСЛИ НЕ "УПРАБЛадиЯ"

t ПРОВЕРКИ Hfi ПЕРЕСЕЧЕНИЕ НИЖНЕЙ ГРАНИЦЫ ПАССИВА

XTRR

В S <В»Е)-АДРЕС НАЧАЛА МАССИВА

2006 7В

2057 91

2058 7fi

2059 98

XTRR

2063 САЗС20

ЦИКЛЗ

; ЗАБОИ ПРЕДЫЛУВ1ЕГ0 БАЙТА

2066 ОБ

2067 13

2068 СЗЗС20

ЦИКЛЗ

i ЗАПИСЬ БАЙТА И ПРОВЕРКА ВЕРХНЕЙ ГРА1«Ы МАССИВА

206Б 02

ПЕР4: STAX

206С 03

206В IB

С . .

206Е 7fi

206F БЗ

2070 С23С20

«ИКЛЗ ; ПЕРЕХОД НА ПРОДОЛЖЕНИЕ

» ВОЗВРАТ ПО

ДОСТИЖЕНИЮ ВЕРХНЕЙ ГРАНИЦЫ МАССИВА

2073 С1

2074 ЗЕОО

2076 Б7

2077 С9

: ВОЗВРАТ no коду ЗАБЕГШ1ИЯ

2078 С1

ПЕРЗ: POP

2079 3EFF

AvOFFH

207Б Б7

207С С9

Байт, полученный после вызова внешней подпрограммы генерации кода, проверяется на равенство кодам ООН и 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
Яндекс.Метрика