Из предыдущей статьи видно, чтобы вывести текст на экран, мне пришлось воспользоваться функцией DOS, которая умеет это делать. Мне же предстоит ещё научиться работать с экраном компьютера. Но об этом позже.
Для себя я уяснил, что чтобы вызвать функцию DOS, нужно код этой функции прописать в регистре процессора С, после чего вызвать эту функцию командой процессора RST #10. Если функция имеет дополнительные параметры, то они так же передаются с помощью регистров процессора. По окончании работы функции DOS, в зависимости от состояния флагового регистра процессора (о котором также поговорим позже, сейчас это не нужно), в регистре А возвращается код ошибки, если таковые имеют место быть, либо просто 0, если ошибок нет.
Но вот проблема... Сейчас наша программа маленькая и запомнить пару кодов функций не составляет особого труда, а что делать, когда их станет значительно больше? Все не упомнишь... Для этого компилятор ассемблера имеет директиву EQU, которая позволяет метке присвоить некое значение и в дальнейшем в программе его использовать, делая код более наглядным.
Давайте перепишем наш код с учетом данной информации.
Согласитесь, код стал более осмысленным, когда функции имеют свои имена а не абстрактные числа:
PCHARS - это функция печати символов
EXIT - выход из программы
DSSRST - это вызов функции DOS
Да, теперь наш код стал более понятен, однако основная проблема так и осталась не решенной... Если переписать все функции DOS, это уже будет нагромождение меток, которые сами по себе будут мешаться при просмотре основного кода программы. А если писать код программы немного более сложной чем вывод одной строки на экран посредством функций DOS, то это будет головная боль программиста. Что бы этого избежать, компилятор Ассемблера умеет подключать файлы с необходимыми библиотеками посредством директивы include, где в кавычках указывается путь к файлу, который мы желаем подключить.
Для этой цели я создам файл dss.h в который перепишу все метки и соответствующие им кода функций Estex DSS (DOS).
В конце статьи я дам ссылки, где можно будет взять готовые файлы, а так же ссылка с описанием функций DOS, что бы знать какие параметры функция должна иметь на входе и что выдает на выходе.
Сейчас же перепишу код моей маленькой программы с учётом приведённой информации, добавив еще вызов одной функции WAIT, которая ожидает нажатия любой клавиши, прежде чем программа продолжит своё выполнение.
Если сейчас скомпилировать нашу программу так как это делали раньше (orgasm.exe main.asm main.exe -e), то получим тот же самый результат, за одним исключением...
Программа прежде чем завершиться, будет ждать нажатия клавиши.
Ссылки:
К слову в предыдущей статье я забыл дать ссылку еще на один ВАЖНЫЙ ресурс: