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


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


Обычно неупорядоченные таблицы используют в качестве временных для хранения небольшого количества элементов (до 20). Для таблиц большего размера такая организация поиска неэффективна, поэтому для них следует применять другие способы локализации нужного элемента.

Приемы работы с неупорядоченной таблицей продемонстрируем на примере следующей задачи. Необходимо прочитать содержимое файла maket.txt и обо всех десятичных и шестнадцатеричных числовых константах собрать информацию о значении константы и номере строки, в которой данная константа встретилась. Вывести информацию о десятичных константах на экран. Для того чтобы избежать возни с несущественными деталями, введем следующие ограничения:

  • содержимое файла — идентификаторы и константы, разделенные не более чем одним пробелом, перед первым или последним идентификатором или константой в строке также следуют по одному пробелу;
  • для удобства преобразования предполагаем, что длина и количество строк файла maket.txt находятся в диапазоне 0..99, а общая длина файла — не более 240 байт.

Поле текущего состояния представляет собой запись, битовые поля которой означают следующее:

  • биты 0 и 1 — состояние элемента: 00 — свободен; 01 — используется; 10 — удален;
  • бит 2 — тип константы: 0 — десятичная константа; 1 — шестнадцатеричная константа;
  • бит 3 — 0 — не последний элемент таблицы; 1 — последний элемент таблицы.

:prg02_05.asm - программа на ассемблере демонстрации работы с неупорядоченной таблицей ;Вход: файл maket.txt с идентификаторами, среди которых присутствуют десятичные

и шестнадцатеричные константы. ;Выход: вывод информации о десятичных константах на экран.

state_tab struc

last_off dw 0 ;адрес первого байта за концом таблицы

elem_free dw 0 ;адрес первого свободного элемента (Offffh - все занято)

ends

constant struc

state db 0 ;поле состояния элемента таблицы

db 02dh форматирование вывода на экран key db 10 dup (' ') :ключ. он же значение константы

db 02dh форматирование вывода на экран

line db 2 dup (' ') :строка файла, в которой встретилась константа endjine db Odh.Oah.'S' :для удобства вывода на экран ends .data




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