Анимация
JavaScript
|
Главная Библионтека Инициализация и прокрутка окна вверх Выводит окно с заданными координатами путем вывода пробелов с заданным атрибутом или прокручивает содержимое окна вверх на заданное число строк. Работает только с активной видеостраницей. При вызове: АН = 06h; AL - число строк прокрутки; если AL = О, окно очищается; ВН - атрибут; СН - координата Y верхнего левого угла; CL - координата X верхнего левого угла; DH - координата Y нижнего правого угла; DL - координата X нижнего правого угла. Инициализация и прокрутка окна вниз Выводит окно с заданными координатами путем вывода пробелов с заданным атрибутом или прокручивает содержимое окна вниз на заданное число строк. Работает только с активной видеостраницей. При вызове: АН = 07h; AL - число строк прокрутки; если AL = О, окно очищается; ВН - атрибут; СН - координата У верхнего левого угла; CL - координата X верхнего левого угла; DH - координата У нижнего правого угла; DL - координата X нижнего правого угла. lOh (подфункция 03h) Переключение бита "мерцание-яркость" Задает функциональное назначение старшего разряда кода атрибута. При вызове: АН = lOh; AL = 03h; - назначение старшего бита кода атрибута: 0 - яркость фона, 1 - мерцание символа. Установка позиции курсора Устанавливает курсор в заданную позицию на указанной странице. При вызове: АН = 02h; ВН - страница; DH - строка; DL - столбец. Определение позиции курсора Определяет положение курсора на указанной странице. При вызове: АН = 03h; ВН-страница. При возврате: СН - первая строка развертки курсора; CL - последняя строка развертки курсора; DH - строка текущей позиции курсора; DL - столбец текущей позиции курсора. 05h ......................................................................................... Переключение видеостраниц Задает активную видеостраницу. При вызове: АН = 05h; AL - страница. Ассемблер в задачах защитъ! информацт Вывод строки символен Записывает строку на текущую страницу, начиная с указанной позиции. При выводе кодов управляющих символов выполняются соответствующие им действия. При вызове: АН = 13h; AL - режим: 0 - атрибут в BL, строка содержит только коды символов, курсор не смещается посх записи; 1 - атрибут в BL, строка содержит только коды символов, курсор смещается после записи; 2 - строка содержит чередующиеся коды символов и атрибутов, курсор не смещается после записи; 3 - строка содержит чередующиеся коды символов и атрибутов, курсор смещается после записи; ВН - страница; СХ - длина строки символов без учета байтов атрибутов; DH - номер строки; DL - номер столбца; Е S : BP- адрес строки. Воспользовавщись знанием логической структуры видеобуфера (рис. 1.2.8), можно вывести текст на экран с помощью команд пересылки данных (например MOVS), не прибегая ни к каким системным функциям. 12.11. Программирование портов ввода-вывода Как уже отмечалось в разделе 1.1, ЦП и память взаимодействуют с внешними устройствами (или УВВ) через порты ввода-вывода (ВВ). Типы портов ВВ: порты ВВ для буферирования входных и выходных данных; порты ВВ для хранения информации о состоянии ИБ и УВВ (см. рис. 1.1.1), так называемые регистры-состояния; опрашивая эти регистры, профамма узнает, что ИБ или УВВ имеет данные для ввода в процессор или готово принимать данные из процессора: Ш порты ВВ для восприятия приказов (примеры приказов: EOI - сброс "самой приорИ" тетной" " 1" в регистре 1SR контроллера прерываний, BSR - установка/сброс разрядов в БИС параллельного периферийного адаптера). Глава 1 • Основы программирования на Ассемблере IBM PC 69 Взаимодействие с портами осуществляется командами ввода-вывода IN и OUT, которые обеспечивают передачу байта или слова. Операндом-приемником в команде ввода IN и операндом-источником в команде вывода OUT могут быть только регистр AL (при передаче байта) или АХ (при передаче слова). Программный ВВ заключается в непрерывной проверке состояния ИБ или УВВ и выполнении операций чтения при обнаружении состояния наличия данных для ввода в процессор и операций вывода при обнаружении состояния готовности принимать данные от ЦП. На рис. 1.2.9 показана типичная структура ИБ при выполнении операций параллельного ввода-вывода. В состав ИБ входят два порта ВВ первого типа: порт ввода (буфер-НЬ1Й регистр входных данных и буфер с третьим состоянием для подключения к двунаправленной шине данных DB) и порт вывода (буферный регистр выходных данных); порт ВВ второго типа (регистр состояния и буфер с третьим состоянием для подключения к двунаправленной шине данных). Селектор адреса, анализирует код на шине адреса АВ и при обнаружении адресов регистра входных данных, регистра выходных данных или регистра состояния (соответственно АО, Al к А2) вырабатывает единичный сигнал на одном из одноименных своих выходов. В режиме DMA работа селектора адреса блокируется сигналом AEN. Блок управления обеспечивает формирование сигналов записи в регистр выходных данных и чтения регистра входных данных, а также переключение битов готовности к вводу ( OBF - Output Buffer Full) и выводу {IBF - Input Buffer Full) регистра состояний. На рис. 1.2.9 показаны также входные и выходные сигналы УВВ: DI (Data Input) - байт данных (входные данные для ЦП) с выхода УВВ; STB (Strobe) - сигнал стробирования байта DI; DO (Data Output) - байт данных (выходные данные ЦП) на входе УВВ; C(Acknoledge) - сигнал подтверждения приема данных с выхода УВВ; а также сигнал RES (Reset) системного сброса. Ассемблер в задачах защить1 информаци Г11- Р„с1а9.С.рукгура.и.ерфеОсноаоблока,ИВ,приз.,полиеиииоперациОпараллельногоззода Логические вьфажения для сигналов чтения регистра входных данных, чтения Р-стра соояни! и записи в регистр выходнь.х данных имеют вид. Глава 1 • Основы программирования на Ассемблере IBM PC 71 RdByteIn = AO&I(M, RdStatus = A2&IOR, WrByteOut = A\SLlOW. Логические выражения сигналов установки и сброса разрядов готовности регистра состояний: SetRdyIn = STB, SetRdyOut = WrByteOut, ResetRdyIn - RdByteIn + Res, ResetRdyOut = Ack + Res. При/мер ==== Ввод строки байтов длиной не более InBufSize в буфер InBuf, == ==== строка заканчивается при обнаружении символа ODh. ============ ==== При переполнении буфера выводится сообщение Mess. ========== ==== Rdyin - байт, содержащий 1 в разряде OBF , ==== ==== RdyOut - байт, содержащий 1 в разряде IBF. ==== InBuf DB Mess DB MessLen = $ Count DW les mov mov InBufSize+2 DUP (?) Buffer overflow !, ODh, OAh Mess di, InBuf Count, di cx, InBufSize+1 NextlnByte: mov Ячейка для хранения фактической длины строки ES: DI -> InBuf Максимальное число повторений операции ввода байта Движение по строке в сторону старших адресов dx, А2 test jz === Про верк. Адрес регистра состояния готовности ко вводу === al, dx al, RdyIn CheckRdyIn ; Чтение регистра состояния ; Проверка разряда готовности ; Повторять до обнаружения OBF = 1 0 1 2 3 4 5 6 7 8 [ 9 ] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |