
- •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
- •Вычисление адреса Пикселя по экранным координатам.
- •Рисование с помощью регистров Графического Контроллера
- •Установка цвета отдельных пикселей.
- •Прокрутка областей экрана, копирование областей экрана.
- •Чтение отдельных пикселей с экрана.
- •Рисование с помощью регистров Указателя Последовательности
- •Установка цвета ячейки пикселей.
Структуры
Структура — это тип данных, состоящий из фиксированного числа элементов разного типа. Структура не является переменной, она только схема переменной.
Для использования структур в программе необходимо выполнить следующее:
-
Задать шаблон структуры, то есть определить новый тип данных, который впоследствии можно использовать для определения переменных данного типа.
-
Определить экземпляр структуры (инициализация конкретной переменной с заранее определенной (с помощью шаблона) структурой). На этом этапе даётся указание транслятору выделить память и присвоить этой области памяти символическое имя. Описать структуру в программе можно только один раз, а определить — любое количество раз.
-
Организовать обращение к элементам структуры.
Описание шаблона структуры
Описание шаблона структуры имеет следующий синтаксис:
имя_структуры STRUC
<описание полей>
имя_структуры ENDS
Здесь <описание полей> представляет собой последовательность директив описания данных db, dw, dd, dq и dt. Их операнды определяют размер полей и при необходимости начальные значения.
Структуры не резервируют пространство в сегменте данных и не записывают ни одного байта в конечную программу.
Местоположение шаблона в программе может быть произвольным, но, следует располагать шаблон структуры до того места, где определяется переменная с типом данной структуры.
Смоделируем базу данных сотрудников некоторого отдела. Все поля базы данных символьные. Определим структуру записи этой базы данных следующим шаблоном:
worker struc ;информация о сотруднике
nam db 30 dup (" ") ;фамилия, имя, отчество
position db 30 dup (" ") ;должность
age db 2 dup (" ") ;возраст
standing db 2 dup (" ") ;стаж
salary db 4 dup (" ") ;оклад в гривнах
birthdate db 8 dup (" ") ;дата рождения
worker ends
Определение данных с типом структуры
Для определения переменной с типом данной структуры используется используется следующая синтаксическая конструкция:
[имя переменной] имя_структуры <[список значений]>
Здесь:
имя переменной — идентификатор переменной данного структурного типа. Задание имени переменной необязательно. Если его не указать, будет просто выделена область памяти размером в сумму длин всех элементов структуры.
список значений — список начальных значений элементов структуры, разделенных запятыми. Его задание необязательно. Если список указан не полностью, то все поля структуры для данной переменной инициализируются значениями из шаблона, если таковые заданы. Допускается инициализация отдельных полей, но в этом случае пропущенные поля должны отделяться запятыми. Если при определении новой переменной с типом данной структуры нет необходимости менять значение полей в ее шаблоне, то нужно просто написать угловые скобки. К примеру:
victor worker <>.
Определим несколько переменных с типом описанной выше структуры:
.data segment
sotr1 worker <’Гурко Андрей Вячеславовича’,’художник’,'33','15','1800','26.01.64'>
sotr2 worker <’Михайлова Наталья Геннадьевна’, ,'30','10','1680','27.10.58'>
sotr3 worker<’Cтenaнов Юрий Лонгинович’,’художник’,’38’,'20','1750','01.01.58'>
sotr4 worker<’Юрова Елена Александровна’,'связист', ,'2', ,'09.01.66'>
sotr5 worker<> ;здесь все значения по умолчанию
Методы работы со структурой
Для того чтобы сослаться в команде на поле некоторой структуры, используется специальный оператор — символ «.» Он используется в следующей синтаксической конструкции:
адресное_выражение.имя_поля_структуры
Здесь:
адресное_выражение — идентификатор переменной некоторого структурного типа или некое выражение (рис. 1);
имя_поля_структуры — имя поля из шаблона структуры. Это смещение поля от начала структуры.
Таким образом оператор. вычисляет выражение:
(адресное_выражение) + (имя_поля_структуры)
Рис. 1. Синтаксис адресного выражения в операторе обращения к полю структуры.
К примеру, требуется извлечь в ax значения поля с возрастом. Из-за принципа хранения данных «старший байт по младшему адресу» старшая цифра возраста будет помещена в аl, а младшая — в ah. Для корректировки достаточно использовать команду xchg al,ah:
mov ax,word ptr sotr1.age ;в ах возраст sotr1
xchg ah,al
;a можно и так:
lea bx,sotrl
mov ax,word ptr [bx].age
xchg ah,al
Определим массив из 10 структур типа worker:
mas_sotr worker 10 dup (<>)
Размер в байтах, занимаемый полями структуры можно получить с помощью оператора type. После того, как стал известен размер экземпляра структуры, организовать индексацию в массиве структур можно следующим образом. К примеру:
worker struc
...
worker ends
...
mas_sotr worker 10 dup (<>)
...
mov bx,type worker ;bx=77
lea di,mas_sotr
;извлечь и вывести на экран возраст всех сотрудников:
mov сх,10
cycl:
mov dl,[di].age
add di,bx ;к следующей структуре в массиве mas_sort
loop cycl
Лекция №9. Структуры. Записи. Объединения. Работа с файлами.
Пример: Выполним копирование поля nam третьего сотрудника в поле nam пятого сотрудника:
worker struc
...
worker ends
mas_sotr worker 10 dup (<>)
...
mov ebx,offset mas_sotr
mov esi,(type worker)*2 ;si=77*2
add esi,ebx
mov edi,(type worker)*4 ;di=77*4
add edi,ebx
mov cx,30
rep movsb [edi].nam,[esi].nam