11.7 Функции MS-DOS. Функция 01H. 3. Функции управления памятью;. 4. Функции управления процессами;. 3. Функции управления памятью;
11. 7 Функции MS-DOS Функции MS-DOS – это различные сервисные возможности, которые операционная система MS-DOS предоставляет пользовательским программам через прерывание DOS 21H и некоторые другие прерывания. Функции MS-DOS облегчают выполнение таких стандартных операций, как ввод с клавиатуры, вывод на экран, работа с файлами, операции с памятью и т. д. Каждая функция MS-DOS имеет свой номер и набор параметров. Для выполнения функции необходимо ее номер занести в регистр AH, в другие регистры занести необходимые параметры и вызвать прерывание DOS командой INT 21H. Некоторые функции возвращают результаты своего выполнения в различных регистрах или ячейках памяти. Некоторые функции имеют возможность возвращать состояние своего выполнения, т. е. выполнилась ли функция успешно или в процессе ее выполнения возникла какая-то ошибка. По функциональному назначению функции MS-DOS можно разделить на следующие категории: 1. Функции ввода-вывода; 2. Функции для работы с файлами; 3. Функции управления памятью; 4. Функции управления процессами; 5. Функции настройки даты/времени; 6. Другие функции. Функции ввода-вывода позволяют выполнять операции по вводу с клавиатуры и выводу на экран или другие устройства (принтер, коммуникационный порт). Функции управления памятью предназначены для получения и изменения информации о выделенных блоках памяти, выделения и освобождения блоков памяти. Функции управления процессами включают такие функции, как завершение программы, завершение резидентной программы, запуск программы, получение сегмента префикса программного сегмента и т. п. Функции настройки даты/времени позволяют получить или установить дату и время DOS, а начиная с DOS 3. 3, эти функции можно использовать и для установки даты/времени BIOS.
Функции ввода-вывода, рассмотренные ниже, являются низкоуровневыми функциями DOS и в некоторых случаях могут вызываться из обработчиков аппаратных прерываний.
Функция 01H Назначение: чтение символа с клавиатуры с отображением на экране. Функция 01H ожидает ввода с клавиатуры очередного символа и помещает его в регистр AL, при этом символ отображается на экране. Если после вызова функции в регистре AL содержится значение 0, то была нажата клавиша с расширенным ASCII кодом (например, F1, Home, стрелка вниз и т. д. ). В этом случае для получения расширенного ASCII кода необходимо вызвать функцию 01H еще раз. Пример использования функции 01H: MOV AH, 01H INT 21H
Функция 02H Назначение: выводит символ на экран и передвигает курсор. ASCII код символа заносится в регистр DL. Если задан ASCII код клавиши Backspace (08H), функция 02H передвигает курсор назад (влево). Пример использования функции 02H: MOV AH, 02H MOV DL, ‘A’ INT 21H Функция 05H Назначение: выводит символ на стандартный принтер (LPT1). ASCII код символа заносится в регистр DL. Чтобы переназначить вывод на другой порт (например, COM1), следует воспользоваться командой DOS MODE. Пример использования функции 05H: MOV AH, 05H MOV DL, ‘*’ INT 21H
Функция 06H Назначение: ввод-вывод символа. Если регистр DL содержит значение 0FFH, то функция читает символ с клавиатуры в регистр AL, не ожидая ввода. Если очередного символа для чтения с клавиатуры нет, то функция 06H устанавливает флаг нуля ZF. Если после вызова функции в регистре AL содержится значение 0, то была нажата клавиша с расширенным ASCII кодом. Если регистр DL содержит любое значение, кроме 0FFH, действие функции 06H аналогично функции 02H. Примеры использования функции 06H: MOV AH, 01H MOV DL, 0FFH INT 21H
MOV AH, 01H MOV DL, ‘w’ INT 21H
Функция 07H
Эта функция аналогична функции 01H, но не выводит символ на экран. Пример использования функции 07H: MOV AH, 07H INT 21H
Функция 09H Назначение: вывод на экран строки символов. В регистровую пару DS: DX заносится адрес (сегмент: смещение) строки символов, выводимой на экран. Строка должна заканчиваться символом ‘$’, который не отображается на экране, а служит признаком конца строки для DOS. Функция 09H обрабатывает ASCII код клавиши Backspace, так же, как и функция 02H. Для перевода на новую строку необходимо последовательно вывести символы с кодами 0DH, 0AH (переход на новую строку, курсор в начало строки). Пример использования функции 09H: STR DB ‘Hello! ’ ; выводимая строка . . . MOV AH, 09H MOV AX, SEG BUF MOV DS, AX ; настройка DS: DX MOV DX, OFFSET BUF ; на строку STR INT 21H
Функция 0AH Назначение: буферизованный ввод строки символов с клавиатуры. В регистровую пару DS: DX заносится адрес (сегмент: смещение) буфера, куда будет помещена введенная с клавиатуры строка символов. Первый байт буфера должен содержать максимальную длину строки (от 1 до 254). По окончании ввода строки буфер выглядит так, как показано на рис. 10.
Рис. 10. Вид буфера после ввода строки
Реальная длина строки показывает, сколько символов содержит введенная строка, не считая символа перевода строки (0DH). В конце введенной строки в буфере всегда будет помещаться ASCII код символа перевода строки (0DH). Если при вводе строки достигнута ее максимальная длина, то при попытке ввести следующий символ прозвучит звуковой сигнал. Если реальная длина строки равна 0, то буфер содержит только символ перевода строки. При вводе строки специальные клавиши (Esc, F3, F5, Ins, Backspace и т. д. ) обрабатываются так же, как и в командной строке DOS. Пример использования функции 0AH: BUF DB 10 ; максимальная длина строки DB 10 DUP (? ); сам буфер ввода . . . MOV AH, 0AH MOV AX, SEG BUF MOV DS, AX ; настройка DS: DX MOV DX, OFFSET BUF ; на буфер ввода INT 21H
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|