Шаг 16.
Оптимизация с помощью ассемблера.
Использование прерываний. Обращение к функциям DOS

    На этом шаге мы рассмотрим обращение к функциям DOS.

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

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

#include <stdio.h>
//Строки, завершающиеся символом $ (ASCII&) и нулем (ASCIIZ)
char message[] =  "Welcome to BASM!$";
main()
{
puts(message);         //Отобразить строку ASCIIZ
asm {
mov ah, 9              //Задать функцию DOS с номером 9
mov dx, OFFSET message //Адресовать строку ASCII$
int 0x21               //Вызвать DOS через прерывание 0x21
}
return 0;
}
Текст программы можно взять здесь.

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


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

    В соответствии с необычными требованиями функции DOS с номером 9 строка должна завершаться символом денежной единицы ($), этот пережиток унаследован от предка DOS - операционной системы CP/M. Когда вы запустите программу, то увидите, что при выполнении строки puts(message); отобразится вся строка, включая символ $. Вы также увидите, как оператор asm тоже выведет строку, но без завершающего знака $.

    На следующем шаге мы рассмотрим вызов функций BIOS.




Предыдущий шаг Содержание Следующий шаг