Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МАВЦ.464319.001ТУ 20140414 Семенов.doc
Скачиваний:
11
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

Директивы определения сегментов и процедур

Сегмент определяется псевдооператорами:

имя_cer segment

…

имя_cer ends

В программе можно использовать четыре сегмента (по числу сегментных регист­ров) и для каждого указать соответствующий регистр сегмента псевдооператором ASSUME (assume — присвоить), например:

codeseg sedment

assume CS:codeseg, DS:dataseg, SS:stackseg

.

.

codeseg ends

В директиве Assume регистр_cer:имя_cer [...], в частности Assume cs: codeseg, указы­вается, что для сегмента имя_cer (codeseg) выбран регистр регистр__cer (CS).

После директивы Assume следует явным образом загрузить адрес начала сегмента данных в регистр DS:

mov AX, dataseg

mov DS, AX.

.Подобная же инициализация сегментных регистров CS и SS выполняется автоматически (по умолчанию). Процедура определяется псевдооператорами:

имя_проц proc [far]..

.

.

ret

имя_проц endp

При определении процедуры после ргос должен быть указан атрибут дистанции near или far; если этого атрибута нет, то по умолчанию подразумевается near. Обыч­но процедура должна заканчиваться командой ret (return), то есть процедура яв­ляется подпрограммой. Если процедура near, то обращение к ней (call) из того же сегмента; если proc far, то из любого сегмента (в этом случае командой ret из стека при возврате будет извлечено два слова: для IP и для CS).

4.21 Директивы управления трансляцией

Их несколько, наиболее часто используется END. END отмечает конец программы и ука­зывает ассемблеру, где завершить трансляцию. Формат процедуры:

END [имя_программы]

5 Краткие сведения о программировании процедур работы с устройствами ввода-вывода

Процедуры ввода-вывода в ПК выполняются, как правило, по прерываниям. Со­став и использование основных видов прерываний и служебных функций DOS прерывания 21Н рассмотрены в работах [10,35]. Ниже мы кратко остановимся на вопросах программирования ввода-вывода лишь прерываний для отображения ин­формации на дисплее, ввода с клавиатуры, вывода на принтер и работы с файлами.

5.1 Программирование работы с дисплеем

Задание режимов работы и обмен данными с дисплеем можно выполнять при пре­рываниях BIOS тип 10Н, а вывод данных на дисплей и при прерываниях DOS тип 21Н. Для уяснения отличий прерываний BIOS от прерываний DOS рассмотрим в качестве примера несколько функций видеопрерываний BIOS.

5.2 Видеооперации с прерыванием 10н bios

Это прерывание обеспечивает выполнение 16 различных процедур работы с дис­плеем (идентифицируются содержимым регистра АН). Приведем самые важные из них.

  1. Перемещение курсора в заданную позицию: АН=2.

Координаты курсора (строка, столбец) предварительно засылаются соответ­ственно в регистры DH, DL. В регистре ВН указывается номер страницы буфе­ра: по умолчанию и в графическом режиме ВН=0.

  1. Очистка экрана дисплея: АН=6 и А1_=0, или АН=7 и AL=0.

  2. Чтение символа, находящегося в текущей позиции курсора, и его атрибута: АН=8. В регистре ВН указываются номер страницы буфера (для текстовых режимов). Считанный символ возвращается в AL, а его атрибут — в АН (атрибут симво­ла — это его характеристики: цвет, цвет фона, яркость, инвертирование, под­черкивание, мигание и т. д.).

  3. Задание режима изображения (текстовый, графический, цветность, формат, разрешающая способность и т. п.): АН=0. Режим изображения определяется содержимым регистра AL.

  4. Запись нового атрибута символа и вывод символа в текущую позицию курсора: АН=9. Прочие регистры должны содержать:

    1. AL — записываемый символ;

    2. BL — его атрибут;

    3. ВН — страницу буфера;

    4. СХ — счетчик записываемых символов (число повторений символа).

  5. Вывод символа в текущую позицию курсора: АН=АН или АН=9 и ВL=0. Содержимое AL, ВН и СХ аналогично п. 5.

  6. Чтение текущего видеостатуса: AH=FH. Возвращает в: AL — текущий режим; АН - число столбцов на экране; ВН — активную страницу буфера.

  7. Вывод строки символов: АН=13Н и AL=0. Прочие регистры должны содержать:

    1. ES: ВР — указатель строки (ее начальный адрес в памяти);

    2. СХ — длину строки;

    3. DX — строку дисплея;

    4. ВН — страницу буфера.