Сборник по задачам и примерам Assembler


Поиск в таблице - часть 3


s_tab state_tab <> tab constant 19 dup (<>)

constant <8.> последний элемент таблицы - бит 3=1 end_tab=$-tab

filename db 'maket.txf.0 handle dw 0 :дескриптор файла buf db 240 dup С ') xlat_tab db Odh dup (OO).Odh ;признак конца строки

db 'O'-Oeh dup (0)

db ':'-'0'+l dup CO') ;признак цифры 0..9

db 'H'-':' dup (0). " :признак буквы 'Н'

db 'h'-'H' dup (0). 'h' ;признак буквы 'h' db Offh-'h1 dup (00)

curjine db 0

.code

:открываем файл mov ah. 3dh

movdx,offset filename

int 21h

jc exit :ошибка (cf=l)

mov handle.ax ;читаем файл:

movah.3fh :функция установки указателя

mov bx,handle

mov ex,240 ;читаем максимум 240 байт

lea dx.buf

int 21h

jc exit

mov ex.ax фактическая длина файла в сх инициализируем дескриптор таблицы s_tab

lea si.tab :адрес таблицы в si

mov s_tab.elem_fгее.si ;первый элемент таблицы - свободен

add si .end_tab

mov s_tab.last_off,si :адрес первого байта за концом таблицы

lea bx.xlat_tab

leadi. buf

cканируем до первого пробела: push ds popes

cycll: mov al. ' ' repne scasb -.сканирование до первого пробела

jcxz displ .цепочка отсканирована -> таблица заполнена push сх :классифицируем символ после пробела (команда XLAT):

mov al.[di]

xlat

emp al. '0':первый символ после пробела - 0

je ml

cmpal.Odh :первый символ после пробела - Odh

je m2 :все остальное либо идентификаторы, либо неверно записанные числа

pop сх

jmpcycll ml: :первый символ после пробела - 0..9:

mov si.di ;откуда пересылать

fmov al. ' ' push di repne scasb сканирование до первого пробела mov cx.di dec ex subcx.si ;сколько пересылать lea di.tab emp s__tab.elem_free.0ffffh :есть свободные элементы? je displ : свободных элементов нет

mov di,s_tab.elem_free :адрес первого свободного элемента push di

lea di.[di].key rep movsb ;пересыпаем в элемент таблицы

deed! ;Какого типа это константа?

emp byte ptr [di].'h' popdi

je m4

and [di].state.Ofbh ;десятичная константа

jmp $+5 m4: or [di].state.100b ;шестнадцатеричная константа

mov al ,cur_line :текущий номер строки в al




Начало  Назад  Вперед



Книжный магазин