
- •Команды и директивы
- •Общая структура программы на ассемблере
- •Основные элементы языка ассемблер:
- •Прямая адресация
- •Базовые команды передачи управления
- •Косвенный ближний (внутрисегментный) переход
- •Переходы по условию
- •Команды перехода по условию
- •Цикл со счетчиком
- •Процедуры
- •Доступ к параметрам
- •Средства обработки чисел с плавающей запятой
- •Архитектура сопроцессора
- •Форматы команд
Форматы команд
(……..)
Команда INT
Команды прерывания позволяют воспользоваться встроенными системными ресурсами из программы пользователя. Под системными ресурсами понимаются программы, входящие в главную исполнительную программу ЭВМ, называемую BIOS (Basic Input/Output System). В эту систему входят: запоминание символов, введенных с клавиатуры, изображение символов на экране дисплея, обмен данными между устройствами. Чтобы обратиться к этим возможностям, пользовательская программа должна быть прервана и выполнена системная функция, а затем выполнение пользовательской программы должно быть продолжено со следующей после обращения к системным функциям командам. Для организации ввода или вывода информации используется прерывание вызываемое при выполнении команды Int, при этом есть команды INTO, IRET. Формат команды INT содержит номер вектора прерывания. Номер вектора прерывания насчитывает 256 значений (0-FF).
Таблица векторов прерывания
Адреса программ прерывания называются векторами. Каждый вектор имеет длину 4 байта, в первом слове хранится значение IP-адреса, а во втором значение регистра сегмента команд. Все вместе взятые адреса называются таблицей векторов, которая в свою очередь относится к так называемым системным составляющим, записываемым в памяти автоматически в процессе начальной загрузки ПК. Адреса в таблице могут быть разные на различных компьютерах. Вектора хранятся как «слова наоборот». Сначала хранится смещение, а потом, непосредственно, сегмент. Общая схема выполнения прерывания. Прерывания заносят в стек содержимое: содержимое флагового регистра, содержимое регистра ip и содержимое регистра cs. Далее операция выделяет 4-байтовый элемент, соответствующий описываемому прерыванию и заносит 2 байта в регистр ip и 2 байта в регистр cs. Адрес, который получается в регистровой паре cs, ip представляет собой адрес начала подпрограммы в области BIOS, которая получает управление. Возврат из этой подпрограммы осуществляется командой iret, которая восстанавливает флаги, содержимое регистров ip и cs из стека и передает управление на команду следующую за выполненной командой прерывания. Номер, следующий за мнемокодом int сообщает процессору, место нахождения вектора в таблице, процессор переходит на адрес процесса, указанного в таблице, затем выполняет прерывание, возвращаясь в исходную программу. Команда возврата прерывания iret отдает управление вызывающей программе. Программу обработки прерываний иногда называет драйвер прерываний. Независимо от вектора прерывания, перечисленные действия выполняются совершенно одинаково для внутренних, аппаратных и программных прерываний, хотя причины возбуждения прерываний имеют различную природу. При реализации операции ввода/вывода через прерывание BIOS нужно иметь в виду, что многие функции могут быть модифицированы системой BIOS данного компьютера. Подпрограммы обработки прерываний в процессе своей работы могут портить регистры, поэтому рекомендуется до вызова прерываний сохранить в стек нужные регистры, а затем их извлечь оттуда. Вектора прерываний можно условно разделить на следующие группы: вектор внутренних прерываний процессора, вектор аппаратный прерываний, программы BIOS, обслуживания аппаратуры ПК, программы DOS, адреса системных таблиц BIOS.
Буфер клавиатуры – кольцевой буфер из 15 символов, который Dos использует для хранения кодов нажатых клавиш. Это сделано для того, чтобы исключить потерю символов при очень быстром вводе, когда программа может не успеть отслеживать нажатие всех клавиш. Наиболее важными характеристиками ввода являются: 1) ожидание нажатия клавиши; 2) эхо-символы - символы, отражаемые на дисплее при вводе; 3) распознавание – прекращает ли функция ввод при нажатии клавиш Ctrl+Break; 4) фильтрация управляющих символов – клавиша Enter,Tab,BackSpace.
Функции даты и времени
Часы реального времени применяются для определения, установления текущей даты и времени, также установки будильника с целью выполнения каких-либо действий и для вызова прерываний каждую миллисекунду.
Таймер предоставляет возможность для программирования на уровне портов ввода/вывода. На уровне DOS и BIOS часы реального времени и системный таймер используют только как средство определения/установки текущего времени и организации задержек.
Работа с файлами
Язык ассемблер не содержит средств для работы с файлами. Если такая необходимость возникает, то тогда программа должна содержать фрагменты кода, в которых производится обращение к средствам операционной системы, осуществляющим взаимодействие с файловой системой. Одна из основных функций Dos в качестве операционной системы – организация доступа к дискам, как к набору файлов и директорий. Используется 2 метода доступа к файлам: 1) метод управляющего блока файлов (FCB); 2) метод дескриптора файла. Метод управляющего блока файлов используется для обращения к файлам, находящимся в текущем каталоге. Метод дескриптора файлов позволяет получить доступ к любому файлу, независимо от того, где он находится. Дескриптор – 16-разрядный номер, используемый для идентификации открытого файла или устройства. Дескриптор сохраняется в регистре ax, как уникальный номер файла, по которому в дальнейшем будет происходить обращение к нему. Идея работы с файлами методом дескриптора (описателя) заключается в следующем: 1) вначале файл должен быть открыт, при этом должно быть указано имя файла и полный путь (можно краткий). Путь – это строка с нулевым окончанием, содержащая полностью или частично пункты: дисковод, путь, имя файла, расширение файла и нулевой байт. После того, как файл будет удачно открыт, ему присвоится дескриптор, представляющий из себя число от 5 до 256, и вся дальнейшая работа происходит через него. Пять первых дескрипторов предопределены и их не надо открывать. Файл обязательно нужно закрыть.