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