прерывания). Вы можете писать свои обработчики прерываний на С и C++, 
однако большинство программистов пользуются в таких случаях ассемблером для 
достижения наибольшей производителюостн. 
    Вы также можете вызывать обработчики прерываний с помощью инструкции 
ассемблера int. Например, для использования одной из функций DOS в программе 
вызывается диспетчер DOS: 

    asm int 0x21 // Вызвать диспетчер функций DOS 

    В младших адресах памяти ПК находится таблица 32-битовых адресных 
значений, называемая таблицей векторов. В ходе выполнения инструкции 
программного прерывания процессор 80x86 запоминает флаги и регистры в стеке и 
передает управление по адресу, который хранится в соответствующей номеру 
прерывания ячейке этой таблицы. Векторы обработчиков прерываний в программе 
чем-то похожи на стоянку автомобилей на размеченной площадке. 

    Обращение к функциям DOS 

    С помощью встроенного ассемблера ВASM в операторе asm можно легко вызвать 
функцию DOS. Используйте прием, продемонстрированный в листинге 17.9, в 
котором отображается строка "Welcome to BASM!$" двумя способами: с помощью 
функции С и процедуры DOS, выводящей строку. 

    Листинг 17.9.  BASMWELC.CPP (вызов DOS для вывода строки) 

    1:	#include <stdio.h> 
    2: 
    3:	// Строки, завершающиеся символом $ (ASCII$) и нулей (ASCIIZ) 
    4:	char messaged = "Welcome to BASM!$"; 
    5: 
    6:	main() 
    7:	{ 
    8:	  puts(message); // Отобразить строку ASCIZ 
    9:	  asm { 
    10:	     mov ah, 9 // Задать функцию DOS с номером 9 
    11:	     mov dx, OFFSET message // Адресовать строку ASCIIS 
    12:	    int 0x21 // Вызвать DOS через прерывание 0x21 
    13:	  } 
    14:	  return 0; 
    15:	} 

    Все функции DOS имеют идентификационные номера, подобные номеру 9, 
соответствующему функции вывода строки. В этой программе внутри оператора asm 
в строке 10 номер функции DOS записывается в регистр ah, регистру dx 
присваивается смещение первого байта строки, и вызывается диспетчер функций 
DOS с помощью инструкции int 0x21 в строке 12. 

    ЗАМЕЧАНИЕ 

   Для того чтобы узнать что делают функции DOS с другими номерами и что необходимо 
для их вызова,  загляните в справочное пособие по программироваанию в DOS.

    В соответствии с необычными требованиями функции DOS с номером 9 строка 
должна завершаться символом денежной единицы ($), этот пережиток унаследован 
от предка DOS — операционной системы СР/М. Когда вы запустите программу, то 
увидите, что при выполнении строки 8 отобразится вся строка, включая символ $. 
Вы также увидите, как оператор asm тоже выведет строку, но без завершающего 
знака доллара. 

    Вызов функций BIOS 

    Еще один набор процедур обеспечивает ввод-вывод для отдельных компонентов 
компьютера. Набор обработчиков прерываний и другие процедуры хранятся в ПЗУ и 
известны под названием BIOS (Basic Input-Output System — базовая система 
ввода-вывода). Чаще всего эти процедуры вызываются с помощью программных 
инструкций прерывания. 

    ПРЕДУПРЕЖДЕНИЕ 

    Процедуры BIOS выполняют критические операции над компьютерным 
оборудованием, включая низкоуровневое обслуживание дисководов гибких дисков и 
винчестера. Будьте предельно осторожны, когда вызываете эти процедуры. 
Малейшая ошибка в вызове процедуры BIOS может привести к уничтожению всей 
информации на диске. Никогда не обращайтесь к процедурам BIOS, не сохранив 
предварительно важной информации на дискетах. 


    452     Часть IV. Разработка приложений 
