Сегмент определяется псевдооператорами:
имя_сег segment
...
имя_сег ends
В программе можно использовать 4 сегмента (по числу сегментных регистров) и для каждого указать соответствующий регистр сегмента псевдооператором ASSUME (assume — присвоить), например:
codeseg sedment
assume CS:codeseg, DS:dataseg, SS:stackseg
.
.
codeseg ends
В директиве ASSUME регистр_сег:имя_сег [,..], в частности, ASSUME cs:codeseg, указывается, что для сегмента имя_сег (codeseg) выбран регистр регистр_сег (CS).
После директивы ASSUME следует явным образом загрузить адрес начала сегмента данных в регистр DS:
mov AX, dataseg
mov DS, AX
Подобная же инициализация сегментных регистров CS и SS выполняется автоматически (по умолчанию).
Процедура определяется псевдооператорами:
имя_процедуры proc [far]...
...
ret
имя_процедуры endp
При определении процедуры после ключевого слова proc должен быть указан атрибут дистанции nearили far; если этого атрибута нет, то по умолчанию подразумевается near. Обычно процедура должна заканчиваться командой ret (return). Если процедура объявлена как near, то обращение к ней (call) должно производиться из того же сегмента; если procfar, то из любого сегмента (в этом случае командой ret из стека при возврате будет извлечено два слова: для IP и для CS).
|
|
Директивы управления трансляцией
Их несколько, наиболее часто используется END. Директива END отмечает конец программы и указывает ассемблеру, где завершить трансляцию. Формат: END [имя_программы].
Краткие сведения о программировании процедур работы с устройствами ввода-вывода
Процедуры ввода-вывода в ПК выполняются, как правило, по прерываниям. Состав и использование основных видов прерываний и служебных функций DOS прерывания 21H рассмотрены в работах [10, 35]. Ниже мы кратко остановимся на вопросах программирования ввода-вывода лишь прерываний для отображения информации на дисплее, ввода с клавиатуры, вывода на принтер и работы с файлами.
Программирование работы с дисплеем
Задание режимов работы и обмен данными с дисплеем можно выполнять при прерываниях BIOS типа 10H, а вывод данных на дисплей и при прерываниях DOS типа 21H. Для уяснения отличий прерываний BIOS от прерываний DOS рассмотрим в качестве примера несколько функций видеопрерываний BIOS.