В ассемблере существуют команды, которые позволяют скрыть от программиста действия по выделению и установке отдельных полей записи.
Для установки значения некоторого поля записи используется команда setfield с синтаксисом:
Для выборки значения некоторого поля записи используется команда getfield с синтаксисом:
Ассемблер даёт возможность переопределить область памяти для объекта с другими типом и именем с помощью специального типа данных, называемого объединением. Объединение — тип данных, позволяющий трактовать одну и ту же область памяти как имеющую разные типы и имена.
При описании объединений в программе сначала описывается шаблон, в котором с помощью директив описания данных перечисляются имена и типы полей:
имя_объединения UNION
<описание полей>
имя_обьединения ENDS
Отличие объединений от структур состоит в том, что при определении переменной типа объединения память выделяется в соответствии с размером максимального элемента. Обращение к элементам объединения происходит по их именам, но при этом все поля в объединении накладываются друг на друга. Одновременная работа с элементами объединения исключена. В качестве элементов объединения можно использовать и структуры.
Метод работы с файлами в системе MS DOS называется методом описателя или дескриптора. Идея работы с файлами методом описателя в MS DOS заключается в следующем:
1. Вначале файл должен быть открыт, при этом должно быть указано имя файла - либо полное (полный путь), либо краткое. В последнем случае файл берется из текущего каталога. В конце имени файла должен стоять код 0.
2. После того как файл был удачно открыт, ему присваивается описатель - число от 5 до 256 (записывается в регистр АХ). Дальнейшая работа с файлом будет вестись через этот описатель. Под таблицу описателей отводится 20 байт, поэтому программа не может открыть одновременно более 20 файлов.
Количество одновременно открытых файлов (включая предопределенные файлы) не может превышать 20, хотя количество описателей может быть больше. Поскольку 5 первых описателей всегда открыто, то получается, что можно одновременно открыть не более 15 файлов.
Описатель файла – это некий индекс, по которому можно найти область памяти, выделяемую для работы с данным файлом. Эта область памяти необходима для того, чтобы буферизовать ввод и вывод в этот файл,что делает работу с ним более быстрой. При записи в файл данные записываются сначала в буфер и, только если он переполнен, записываются на диск.
При закрытии файла содержимое буфера записи сбрасывается на диск, и далее этот буфер может использоваться для работы с другим файлом. Данные незакрытого файла могут оказаться потерянными.
При открытии выделяются буфера отдельно на чтение и запись. В MS DOS имеется функция 68Н, с помощью которой можно сбрасывать буфера, выделенные для записи, на диск, не закрывая файла. Эту функцию часто используют для того, чтобы обезопасить себя от возможной потери данных. Аналог ее имеется во всех языках высокого уровня.
DOS поддерживает как работу с длинными именами, так и с короткими именами файлов и каталогов.
При открытии или создании файла, DOS возвращает в регистр АХ описатель файла или HANDLE -двухбайтное число. Все операции с данным файлом после этого можно производить, зная только это число.
Стандартным устройствам ввода-вывода по умолчанию присваиваются свои описатели - от 0 до 4. Вот эти описатели:
● STDIN стандартное устройство ввода (клавиатура) - 0,
● STDOUT стандартное устройство вывода (экран) -1,
● STDERR устройство для вывода ошибок (обычно экран) - 2,
● AUX асинхронный порт(СОМ1) - 3,
● PRN печатающее устройство (LPT1) - 4.
Это позволяет перенаправить ввод или вывод с одного устройства на другое.
Можно выделить четыре аспекта работы с файлами в программах на ассемблере:
– работа с системой файлового ввода-вывода MS DOS, использующей короткие имена;
– работа с системой файлового ввода-вывода MS DOS, использующей длинные имена (длиной до 255 символов);
– работа с системой файлового ввода-вывода Win 32;
– использование файлов особого вида, поддерживаемых Win 32 — проецированных на память.