- •4) Mov esi,6*2 ; 2 байта – размер элементов
- •Индексная адресация со смещением — режим адресации, при котором полный адрес формируется из двух компонентов:
- •Базовая индексная адресация со смещением — режим адресации, при котором полный адрес формируется максимум из трех компонентов:
- •Xor ecx,ecx ;обнуление есx
- •Структуры
- •Организовать обращение к элементам структуры.
- •Цепочечные команды или команды обработки строк символов
- •Организация обращения к элементам записи.
- •Работа с записями
- •1) Для выделения элемента записи необходимо:
- •2) Чтобы поместить измененный элемент на его место в запись необходимо:
- •3. В конце работы файл следует закрыть.
- •4. Признаком ошибки при выполнении функции dos является взведенный флаг с (переноса).
- •2. Создание файла с усечением существующего до нулевой длины.
- •LpFileName — указатель на asciiz-строку с именем (путем) открываемого или создаваемого файла;
- •DwDesiredAccess — тип доступа к файлу:
- •3) Создать и открыть новый файл
- •4) Чтение из файла или устройства
- •5) Переместить указатель чтения/записи
- •1) HFile – хэндл того файла, в котором перемещается указатель.
- •7) Запись в файл или устройство
- •8) Закрыть файл
- •9) Удаление файла
- •Функция 01h – ожидание ввода символа с эхопечатью
- •Функция 0ah – получение строки символов
- •1) Создать каталог
- •2) Удалить каталог
- •5) Определить текущий каталог
- •Перечень функций прерывания 21h, работающих с файлами, которые имеют длинные имена и соответствующие функции api Win32.
- •Перечислим функции api Win32, имеющие отношение к работе с файловой системой.
- •1) В Win32 получить время создания, время последнего доступа и время последней модификации файла можно с помощью функции GetFileTime.
- •3) В Win32 имеется функция GetFileInformationByHandle, с помощью которой можно получить все атрибуты файла:
- •Обзор прерываний bios
- •Int 10h, функция 0Dh. Чтение пиксела.
- •02H/03h - Чтение/запись секторов.
- •Прямое программирование видеобуфера в текстовом режиме
- •Текстовый режим. Доступ к памяти
- •Организация памяти в графическом режиме 12h
- •Вычисление адреса Пикселя по экранным координатам.
- •Рисование с помощью регистров Графического Контроллера
- •Установка цвета отдельных пикселей.
- •Прокрутка областей экрана, копирование областей экрана.
- •Чтение отдельных пикселей с экрана.
- •Рисование с помощью регистров Указателя Последовательности
- •Установка цвета ячейки пикселей.
-
Задание шаблона записи, то есть определение набора битовых полей, их длин и, при необходимости, инициализация полей.
-
Определение экземпляра записи. Так же как и для структур, этот этап подразумевает инициализацию конкретной переменной типом заранее определенной с помощью шаблона записи.
-
Организация обращения к элементам записи.
Описание записи
Описание шаблона записи имеет следующий синтаксис:
имя_записи RECORD <описание элементов>
Здесь:
<описание эленентов> представляет собой последовательность описаний отдельных элементов записи согласно синтаксической диаграмме (рис. 2).
При описании шаблона память не выделяется, так как это информация для транслятора ассемблера о структуре записи. Так же как и для структур, местоположение шаблона в программе может быть любым, но при этом необходимо учитывать логику работы однопроходного транслятора.
Рис. 2. Синтаксис описания шаблона записи
Определение экземпляра записи
Для использования шаблона записи в программе необходимо определить переменную с типом данной записи, для чего применяется следующая синтаксическая конструкция (рис. 10.3).
Рис. 10.3. Синтаксис описания экземпляра записи
Рассмотрим несколько вариантов инициализации.
Пример: Если инициализировать поля не требуется, то достаточно указать ? при определении экземпляра записи:
...
iotest record
i1:1,i2:2=11,i3:1,i4:2=11,i5:2=00 ; 8 бит
...
flag iotest ? ;все поля записи после выполнения данной
; инициализации обнуляются
Пример_1: согласиться со значениями по умолчанию можно так:
iotest record i1:1,i2:2=11,i3:1,i4:2=11,i5:2=00 ; _11_1100
...
flag iotest<> ;согласились со значением по умолчанию
Пример_2: Изменить значение поля i2 можно так:
iotest record i1:1,i2:2=11,i3:1,i4:2=11,i5:2=00
...
flag iotest<,10,,,> ; переопределили i2
Пример_3: Переопределим поле i2:
iotest record i1:1,i2:2=11,i3:1,i4:2=11,i5:2=00
...
flag iotest{i2=10} ;переопределили i2, не обращая внимания
; на порядок следования других
; компонентов записи
Работа с записями
При работе с записями:
– Каждому имени элемента записи ассемблер присваивает числовое значение, равное количеству сдвигов вправо, которые нужно произвести для того, чтобы этот элемент оказался «прижатым» к началу ячейки. Это дает возможность локализовать его и работать с ним. Но для этого нужно знать длину элемента в битах.
– Ассемблер содержит оператор width, который позволяет узнать размер элемента записи в битах или полностью размер записи. Варианты применения оператора width:
– Сдвиг вправо производится с помощью команды сдвига shr.
А) width имя_элемента_записи — значением оператора будет размер элемента в битах;
Б) width имя_экземпляра_записи или width имя_типа_записи — значением оператора будет размер всей записи в битах.
mov al,width i2
...
mov ax,width iotest
– Ассемблер содержит оператор mask, который позволяет локализовать биты нужного элемента записи. Эта локализация производится путем создания маски, размер которой совпадает с размером записи. В этой маске обнулены биты во всех позициях, за исключением тех, которые занимает элемент в записи.
– Действия по преобразованию элементов записи производятся с помощью логических команд.
Непосредственно обратиться к элементу записи невозможно. Чтобы произвести обработку интересующего нас элемента, нужно сначала выделить его, сдвинуть при необходимости к младшим разрядам, выполнить требуемые действия и поместить обратно на свое место в записи.
Типовые алгоритмы для работы с элементами записи.