Бройдо В.Л. Вычислительные системы, сети и телекоммуникации (2002) (1186248), страница 70
Текст из файла (страница 70)
После директивы Аввоше следует явным образом загрузить адрес начала сегмента данных в регистр 05: шоч АК. батдяед шоч 05. АК гВВ Глава9. Прог аммноеуп авлвнив — основа автоматизации Подобная же инициализация сегментных регистров С5 и 55 выполняется автоматически (гш умолчанию). Процедура определяется псевдооператорами: иия проц ргос [Гаг]..
гео иия прап епср При определении процедуры после ргос должен быть указан атрибут дистанции пеаг или гаг; если этого атрибута нет, то по умолчанию подразумевается пеаг, Обычно процедура должна заканчиваться командой гес (геснгп), то есть процедура является подпрограммой, Если процедура пеаг, то обращение к ней (са] ] ) из того же сегмента; если ргос 1а г, то из любого сегмента (в этом случае командой гес из стека при возврате будет извлечено два слова: для 1Р и для С5). Директивы управления трансляцией Их несколько, наиболее часто используется ЕН0.
ЕНВ отмечает конец программы и указывает ассемблеру, где завершить трансляцию. Формат процедуры: ЕИО [иия програиия] Краткие сведения о программировании процедур работы с устройствами ввода-вывода Процедуры ввода-вывода в ПК выполняются, как правило, по прерываниям. Состав и использование основных видов прерываний и служебных функций 1)05 прерывания 21Н рассмотрены в работах [10, 35). Ниже мы кратко остановимся на вопросах программирования ввода-вывода лишь прерываний для отображения информации на дисплее, ввода с клавиатуры, вывода на принтер и работы с файлами. Программирование работы с дисплеем Задание режимов работы и обмен данными с дисплеем можно выполнять при прерываниях В105 тип 10Н, а вывод данных на дисплей и при прерываниях 1)05 тип 21Н.
Лля уяснения отличий прерываний В105 от прерываний Е)05 рассмотрим в качестве примера несколько функций видеопрерываний В!05. Видеооперации с прерыванием 1ОН В108 Это прерывание обеспечивает выполнение 16 различных процедур работы с дисплеем (идснтифицируготся содержимым регистра АН). Приведем самые важные из ннх.
1. Перемещение курсора в заданную позицию: АН=2. Координаты курсора (строка, столбец) предварительно засылаются соответственно в регистры 1)Н, 01. В регистре ВН указывается номер страницы буфера: по умолчанию и в графическом режиме ВН=В. 2. Очистка экрана дисплея: ЯНе6 и АЕ=0, или АН=7 и ЯЕ=О. 299 Элементы программирования на языке ассемблер 3. Чтение символа, находящегося в текушей позиции курсора, и его атрибута: АН=В. В регистре ВН указываются номер страницы буфера (для текстовых режимов). Считанный символ возвращается в А1., а его атрибут — в АН (атрибут символа — это его характеристики: цвет, цвет фона, яркость, инвертирование, подчеркивание, мигание и т.
д.). 4. Залание режима изображения (текстовый, графический, цветность, формат, разрешающая способность и т. и.): АН=О. Режим изображения опрелеляется солержимым регистра А1.. 5. Запись нового атрибута символа и вывод символа в текусцую позицию курсора: АН 9. Прочие регистры должны содержать; О АŠ— записываемый символ; О ВŠ— его атрибут; О ВН вЂ” страницу буфера; О СХ вЂ” счетчик записываемых символов (число повторений символа). 6.
Вывод символа в текущую позицито курсора: АН-АН или АН=9 и ВС=О. Содержимое А1., ВН и СХ аналогично п. 5. 7. Чтение текущего видеостатуса: АНе ЕН. Возврашает в: АС вЂ” текутций режим; АН— число столбцов на экране; ВН вЂ” активную страницу буфера. В. Вывод строки символов: АН=13Н и АС=О. Прочие регистры должны содержать: О Е5:ВР— указатель строки (ее начальный адрес в памяти); О СХ вЂ” длину строки; О ОХ вЂ” строку дисплея; О ВН вЂ” страницу буфера. Видеооперации с прерыванием 21Н ООВ 1. Вывод символа на экран дисплея: АН-2 или АН=б и ОС<»ЕЕН.
В регистре 1)(.должен быть АЗСП-код символа. Пример фрагмента программы (вывод символа «С»); воч АН, б воч ОС, 43Н ; 43Н вЂ” это А5С1! код символа <С» тпс 21Н 2. Вывод строки символов: АН-9 (чаше всего используемая функция). В регистрах 05: ОХ должен быть начальный адрес строки символов, которая должна заканчиваться символом 5.
Пример фрагмента программы (вывод строки 'вывод строки сымволовэ ): Техт ОЬ 'вывод строки сииволовд' еоч ЯН, 9 люч ОХ, оттвеС Се»С : оттвеС техт — это адрес , выводииой строки !пС 21Н 3. Вывод на экран текстового файла: АН=4ОН. Стандартные файловые указатели определяют тип и устройство ввода-вывола: О 0 Вводе клавиатуры; О 1 Вывод на экран дисплея; зоо Глава 9. П ог аммнов и авление — основаавтоматизации 01 2 Вывод на экран сообщения об ошибке; 3 Ввод-вывод на внешнее устройство; сз 4 Вывод на печать. Для ввода используется функция ЯН=ЗЕН прерывания 21Н, для вывода используется функция АН=40Н прерывания 21Н. В регистр СХ предварительно заносится число вводимых-выводимых байтов, а в регистр РХ записывается начальный адрес поля памяти для ввода-вывода.
В случае успешного завершения процедуры ввода-вывола обнуляется флаг переноса СР, а в регистр АХ возвращается количество фактически переданных байтов. При неудачной операции флаг СР устанавливается в 1, а в регистр АХ заносится код ошибки. Приведенный ниже пример содержит фрагмент программы для вывода на экран текстового файла Тех1, солержащего 50 байт. техт бр 50 боры П ч ЯН, 40Н еоч ВХ. 1 ;указание устройства вывода воч СХ. 50 ,указание числа выводииых байт ыоч рх.
оттает техт .указание начального адреса :поля памяти содержащего текст тпт 21Н Программирование работы с клавиатурой При программировании работы с клавиатурой могут быть использованы преры- вания16Н 8105ипрерывания 21Н(АН= 1, 6. 7, В. А. В. С) Р05. Прерывание 16Н 8105 предусматривает достаточно простые операции обмена данными с клавиатурой, полезные при написании программ, выполняемых независимо от операционной системы РОЯ. Так, при АН=О и 1 считываются из буфера клавиатуры всап-кол клавиш в регистр ЯН и АГАСИ-код клавиш в регистр АС; при ЯН=2 в АС возвращается байт состояния клавиатуры — состояние управляющих клавиш: 5ЫЙ, Стт(, А11, 5сгой Соси, Нцсп Соси и1пвет1; при АН=З вЂ” устанавливаются режимы работы клавиатуры в 1ВМ РС)г.
Ввод с клавиатуры по прерыванию 21Н РОВ предполагает: 1. Чтение символа с клавиатуры (с ожиланием ввода) и отображением символа на экране дисплея: АН=1 или ЯН=6 и О 5=0 ГЕН; то же, но без отображения символа на экране дисплея; АН-7 или АН-8. Считанный символ (АВСП-код) — в регистре А1., (зсап-код не формируется). Если к моменту запроса на чтение символа клавиша еще не нажата, то управление прерванной программе не будет возвращено до тех пор, пока клавиша не будет нажата. Если код клавиши расширенный (клавиши Е1 — Е10, А11, СИ и т.д.), то необходимо повторное чтение. Пример фрагмента программы чтения символа: яоч ЯН, 1 тпт 21Н 2. Чтение строки символов с буферизацией: АН-ОАН. Для инициализации такого чтения необхолимо: а задать буфер, указав в нем число символов строки, подлежащих вводу, директивой; Ьыу ОВ п,0, 0.....О.
0 (Ьыу — имя поля, которое, в принципе, может зо1 Элементы программирования на языке ассемблер пюч АН. ЗГН яюч ВХ, 0 яюч ОХ, 50 воч Ох, оггзеь техт указание устройства ввода :указание кисла вводиких байтов ;указание началвного адреса ,пола паияти дпя ввода тпт 21Н Программирование работы с принтерами При работе с печатагощими устройствами могут бьгть использованы прерывания: 14Н и 17Н 8105 и 21Н (АН-4 и 5) 005. Следует различать программирование для печатающих устройств параллельного типа (информация передается на принтер побайтно по 8-битной шине) и печатающих устройств последовательного типа (инфор- быть и любым другим); количество нулей в директиве должно быть на два больше, чем п (и — максимальное количество вводимых символов), на место следующего «О» будет после ввода записано количество фактически введенных символов, на место последующих «О» будут введены АВСП-коды символов строки и еще один «О» для кода клавиши БО1ег — 13; 00 занести в регистр 05; 0Х адрес буфера.
При выполнении рассматриваемого прерывания управление прерванной (основной) программе возвращено не будет до тех пор, пока не нажаты все клавиши и клавиша 8птег. При нажатии каждой очередной клавиши ее кодзаписывается в буфер клавиатуры и отображается на дисплее, но из буфера поступит в основную программу (в поле Ьпу) только после нажатия клавиши Блгег. Если до Бп(ег клавиш нажато больше, чем указано в буфере, то раздастся звонок и лишние символы восприняты не будут. Пример фрагмента программы чтения строки символов: ЬЛ ОВ 9 .О .О .0 .0,0 .0 .0 .0 .0 .0 0 Яоч АН. ОАН иоч ОХ, оусзег Ьот тпт 21Н В поле буфера будут записаны АВСП-коды символов строки, и если в программе предусмотрены операции над двоичными кодами символов (цифр) строки, то необходимо преобразовать АВСП-коды в двоичный код числа, используя, например, процедуру 518281Н.
3. Чтение состояния клавиатуры: АН=ОВН. В регистр АЬ записывается О, если буфер клавиатуры имеет хотя бы один символ. 4. Очистка буфера клавиатуры и вызов функции: АН=ОСН. Обнуляется буфер клавиатуры и инициируется выполнение одной из 5 функций прерывания 21Н; в этом случае номер вызываемой функции должен быть записан не в регистре АН, а в регистре А! (АЬ=1.б.7. 8 или ОА). 5. Ввод с клавиатуры текстового файла: Аныйгн. Используются функции расширенного управления файлами М5-РО5 по файловому указателю.
Пример фрагмента программы для ввода с клавиатуры текстового файла Теис, содержащего 50 байт: техт ОЬ 50 дорГ' Ч ,задание поля паняти для ввода 302 Глава 9. П ог аммное управление — основа автоматизации мация передается по одному проводу последовательно по одному биту), подсое- диияемых к любому последовательному порту микропроцессора. Печатающие устройства параллельного типа Осиовиые прерывания для печатающего устроиства параллельного типа: (3 17Н В!05 (помер принтера цредварительио указывается в регистре РХ): ° послать один символ в устройство печати: АН=0.