- •Программное управление — основа автоматизации вычислительного процесса
- •2 Состав машинных команд
- •3 Режимы работы компьютеров
- •3.1 Однопрограммные и многопрограммные режимы
- •I.Система прерываний программ в пк
- •3.2 Адресация регистров и ячеек памяти в пк
- •3.3 Относительная адресация
- •II.Стековая адресация
- •4 Основные компоненты языка ассемблер
- •4.1Алфавит языка
- •4.2 Константы (числа и строки)
- •3.4 Элементы программирования на языке ассемблер
- •4.3 Директивы (псевдооператоры)
- •4.4 Модификаторы
- •4.5 Адресация регистров и ячеек памяти в ассемблере
- •4.6 Непосредственная адресация
- •4.7 Прямая адресация регистров мпп
- •4.8 Адресация ячеек оп
- •Основные команды языка ассемблер
- •A.Команды пересылки данных
- •I.Команды сложения, вычитания и сравнения
- •1.Команды приращения
- •A.Команды умножения
- •I.Команды безусловной передачи данных
- •4.9 Команды перехода к подпрограмме и выхода из подпрограммы
- •4.10 Команда перехода к подпрограмме: call opr
- •4.11 Команда выхода из подпрограммы
- •4.12 Команды условной передачи управления
- •4.13 Команды условной передачи управления для беззнаковых данных
- •4.14 Команды условной передачи управления для знаковых данных
- •4.15 Команды условной передачи управления для прочих проверок
- •4.16 Команды управления циклами
- •4.17 Команды прерывания
- •4.18Основные директивы ассемблера
- •4.19 Директивы определения идентификаторов
- •4.20 Директивы определения данных
- •Директивы определения сегментов и процедур
- •4.21 Директивы управления трансляцией
- •5 Краткие сведения о программировании процедур работы с устройствами ввода-вывода
- •5.1 Программирование работы с дисплеем
- •5.2 Видеооперации с прерыванием 10н bios
- •5.3 Видеооперации с прерыванием 21н dos
- •5.4 Программирование работы с клавиатурой
- •5.5 Программирование работы с принтерами
- •5.6 Печатающие устройства параллельного типа
- •5.7 Печатающее устройство последовательного типа
- •5.8 Программирование работы с файлами
- •5.9 Прерывания, используемые при работе с файлами на дисках
- •5.10 Некоторые аспекты создания исполняемых программ
- •5.11 Процедуры формирования программы
- •5.12 Структура исходной программы на языке ассемблера для получения исполняемой программы .Ехе
- •5.13 Основные сведения о листинге и его структуре
- •5.14 Особенности структуры машинных команд
- •5.14 Последовательность работы пк при выполнении программы
- •6 Краткие сведения об отладчике программ debug
- •6.1 Основные команды отладчика debug
Директивы определения сегментов и процедур
Сегмент определяется псевдооператорами:
имя_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 различных процедур работы с дисплеем (идентифицируются содержимым регистра АН). Приведем самые важные из них.
Перемещение курсора в заданную позицию: АН=2.
Координаты курсора (строка, столбец) предварительно засылаются соответственно в регистры DH, DL. В регистре ВН указывается номер страницы буфера: по умолчанию и в графическом режиме ВН=0.
Очистка экрана дисплея: АН=6 и А1_=0, или АН=7 и AL=0.
Чтение символа, находящегося в текущей позиции курсора, и его атрибута: АН=8. В регистре ВН указываются номер страницы буфера (для текстовых режимов). Считанный символ возвращается в AL, а его атрибут — в АН (атрибут символа — это его характеристики: цвет, цвет фона, яркость, инвертирование, подчеркивание, мигание и т. д.).
Задание режима изображения (текстовый, графический, цветность, формат, разрешающая способность и т. п.): АН=0. Режим изображения определяется содержимым регистра AL.
Запись нового атрибута символа и вывод символа в текущую позицию курсора: АН=9. Прочие регистры должны содержать:
AL — записываемый символ;
BL — его атрибут;
ВН — страницу буфера;
СХ — счетчик записываемых символов (число повторений символа).
Вывод символа в текущую позицию курсора: АН=АН или АН=9 и ВL=0. Содержимое AL, ВН и СХ аналогично п. 5.
Чтение текущего видеостатуса: AH=FH. Возвращает в: AL — текущий режим; АН - число столбцов на экране; ВН — активную страницу буфера.
Вывод строки символов: АН=13Н и AL=0. Прочие регистры должны содержать:
ES: ВР — указатель строки (ее начальный адрес в памяти);
СХ — длину строки;
DX — строку дисплея;
ВН — страницу буфера.
