Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
3. Порядок выполнения работы
1. Область видеопамяти (Video Display Area) для цветного монитора в текстовом режиме начинается с адреса В800[0]. (а) Используйте команду DEBUG D для просмотра этой области памяти. Заметьте, что за каждым символом в этой области следует байт атрибутов (07Н для черно-белого режима). Используйте дополнительные команды D для просмотра всей области видеопамяти. (б) Используйте команду DEBUG F (Fill – заполнить) для вывода на экран 50 звездочек (символов * – код 2АН). Например, следующая команда заполняет всю видеопамять 4000 (FA0H) сердечками (03) и атрибутами (где 16H соответствует коричневым символам на синем фоне):
F B800:0 LFA0
2. Рассмотрим следующие инструкции машинного языка:
В0 1С D0 E0 ВЗ 12 F6 ЕЗ ЕВ F6
Эти инструкции выполняют следующие действия.
(а) помещают 1СН в регистр AL,
(б) смещают регистр AL на один бит влево (эквивалент умножения на 2),
(в) помещают 12Н в регистр BL,
(г) умножают AL на BL.
Используйте команду DEBUG E для ввода этой программы, начиная с адреса CS:100. Затем введите D CS:100 для просмотра введенного кода. После этого введите R и последовательными командами Т выполните программу до достижения инструкции JMP. Каков конечный результат в регистре АХ?
3. Используйте DEBUG для ввода следующей программы в машинных кодах:
Код (с адреса 100Н): А0D0 E0 F6A3
Данные (с адреса 200Н): 1E
Эта программа выполняет следующие действия: (а) помещает значение байта DS:0200H (1E) в регистр AL; (б) сдвигает содержимое AL на один бит влево; (в) умножает AL на байт, содержащийся в ячейке с адресом DS:0201H (16), (г) помещает произведение из АХ в слово, начинающееся с адреса DS:0202H.
Введите команды D для просмотра введенных кода и данных. После этого введите команду R и последовательными командами Т выполните программу до достижения инструкции JMP. Каков конечный результат в регистре АХ? Введите еще одну команду D DS:0200 и посмотрите, в каком виде произведение хранится в памяти.
4. Для пункта 2, введите команды, записывающие программу на диск под именем (см. приложение 1).
5. Используйте команду DEBUG А для ввода следующих инструкций:
MOV DX,2E
ADD DX, IF
SHL DX,01
SUB DX, BA
JMP 100.
Дизассемблируйте эти инструкции и проследите их выполнение вплоть до JMP, и просмотрите значение в регистре DX после выполнения программы.
6. Используйте DEBUG для создания и выполнения программы, выводящей на экран фразу "Coffee Break". Начните с А 100 для ввода инструкций и с А 120 для ввода фразы (не забудьте про ограничитель $).
7. Используйте DEBUG для создания и запуска программы, запоминающей три введенных с клавиатуры символа и выводящей их на экран.
(а) Начните с А 100.
(б) Используйте INT 16 для помещения символа в AL и скопируйте его из AL в ячейку с адресом [200].
(в) Опять используйте INT 16 для помещения символа в AL и скопируйте его из AL в ячейку с адресом [201].
(г) В третий раз используйте INT 16 для помещения символа в AL и скопируйте его из AL в ячейку с адресом [202].
(д) Используйте команду Е 123 '$' для установки ограничителя $ после трех введенных символов.
(е) Наконец, используйте INT 21 для вывода символов.
4. Требования к отчету
Отчет по лабораторной работе должен содержать:
а) титульный лист;
б) условие задания;
в) текст программ на языке Ассемблера;
г) ответы на контрольные вопросы.
5. Контрольные вопросы
1. Объясните назначение следующих команд DEBUG: (а) А, (б) U, (в) Р, (г) Т, (д) Q, (e) D, (ж) R, (з) Е.
2. Укажите команды DEBUG, с помощью которых можно сделать следующее.
(а) Просмотреть содержимое всех регистров.
(б) Просмотреть содержимое регистра IP и установить его в 0100Н.
(в) Просмотреть данные, хранящиеся в памяти, начиная со смещения 2ВСН в сегменте данных.
(г) Просмотреть данные, находящиеся в памяти, начиная с ячейки с адресом 3AFH. (Замечание: разделите этот адрес на части, соответствующие сегменту и смещению.)
(д) Дизассемблировать символьный код по адресам от 100Н до 12ВН.
(е) Ввести 24А63ВН в сегмент данных, начиная с адреса 18АН.
3. Укажите машинный код, выполняющий следующие действия: (а) прибавление непосредственного значения 03А8Н к АХ, (б) помещение значения 2СА4Н в регистр АХ.
4. Предположим, введена такая команда DEBUG:
Е CS:100 B8
Значение 45 на самом деле должно было быть 54. Укажите команду, изменяющую только этот байт, которая исправляет сделанную ошибку.
5. Предположим, что в DEBUG введена следующая команда:
Е CS:100 B8 05 1ВС ЕВ F8
(а) Какие три символьных инструкции здесь закодированы? (Первая программа в работе содержит подсказку.)
(б) При исполнении этой программы вы обнаруживаете, что в регистр АХ помещается значение 4705 вместо ожидаемого 0547. В чем состоит ошибка и как ее исправить?
(в) Исправив ошибку, нужно повторно выполнить программу, начиная с первой инструкции. Какие команды DEBUG необходимо использовать?
6. Каково назначение инструкции INT?
ЛАБОРАТОРНАЯ РАБОТА № 2
УПРАВЛЕНИЕ ВЫВОДОМ ТЕКСТОВОЙ ИНФОРМАЦИИ НА ЭКРАН
1. Цель работы
Целью настоящей работы является изучение возможностей базовой системы ввода-вывода при выводе текстовой информации на экран монитора.
2. Теоретическая часть
Видеосистема компьютера включает в себя ряд аппаратных и программных средств, позволяющих получать на экране монитора текстовые и графические изображения.
К аппаратным средствам можно отнести сам видеомонитор – цветную электронно-лучевую трубку со схемами питания и управления, а также видеоконтроллер или видеоадаптер – электронную плату, обеспечивающую вывод на экран, а также программное управление видеосистемой.
В текстовом режиме изображение обычно состоит из 25 строк по 80 символов в строке, хотя имеется возможность увеличивать число строк до 40 за счет уменьшения высоты отображаемых символов.
Система выделяет участок памяти для Области видеоадаптера или буфера. В текстовом режиме область видеоадаптера занимает 4 Кбайт, 2 Кбайта из которых предназначены для хранения символов, и еще 2 Кбайта – для атрибутов каждого символа, например, инвертирования, мигания, повышенной яркости или подчеркивания. Область видеоадаптера разбита на «страницы» экрана, пронумерованные от 0 до 7. Поскольку таблицы, описывающие форму символов, загружаются в память программно, имеется возможность работать с символами любой конфигурации. Обычно используется стандартная кодовая таблица символов, содержащая знаки английского и русского алфавитов, знаки препинания, специальные машинные знаки, символы псевдографики и некоторые математические символы.
Программные средства управления экраном включают в себя видеодрайвер BIOS, к которому можно обратиться из прикладной программы с помощью прерывания INT 10h, и который обеспечивает нижний уровень управления (вывод символов, работа с курсором, переключение режимов видеоадаптера и т. д.), а также функции DOS, активизируемые с помощью прерывания INT 21h и предоставляющие более высокий уровень сервиса в текстовом режиме.
Для установки графического режима или возврата в текстовой режим используется прерывание BIOS INT 10h, как это показано в двух следующих примерах:
MOV AH,00 ;Режим MOV AH,00 ;Режим
MOV AL,03 ;Цвет+текст MOV AL,04 ;Графика среднего
INT 10h INT 10h ; разрешения
2.1. Текстовой (алфавитно-цифровой) режим
Текстовой режим предназначен для обычных вычислений с выводом букв и цифр на экран. Этот режим одинаков для черно-белых и цветных мониторов, за исключением того, что цветные мониторы не поддерживают атрибут подчеркивания. Текстовой режим обеспечивает работу с полным набором ASCII кодов (256 символов) для всех мониторов. Каждый символ на экране может отображаться в одном из 16 цветов на одном из восьми цветов фона.
Бордюр экрана может иметь также один из 16 цветов.
Тремя основными цветами являются красный, зеленый и синий. Их можно комбинировать друг с другом для получения восьми цветов, включая черный и белый. Используя два уровня яркости для каждого цвета, получим всего 16 цветов:
I R G B I R G B
Черный Серый
Синий Ярко-синий
Зеленый Ярко-зеленый
Голубой Ярко-голубой
Красный Ярко-красный
Сиреневый Ярко-сиреневый
Коричневый Желтый
Белый Ярко-белый
Таким образом, любые символы могут быть отображены на экране в одном из 16 цветов. Фон любого символа может иметь один из первых восьми цветов. Если фон и текст имеют один и тот же цвет, то текст получается невидимым. Используя байт-атрибут, можно получить также мигающие символы. В приведенной ниже таблице атрибут BL означает мигание, RGB – соответственно красный, зеленый и синий цвета, I - выделение яркостью:
фон текст
Атрибут: BL R G B I R G B
Номера битов:
Мигание и выделение яркостью относятся к тексту. Ниже приведены некоторые типичные значения атрибутов:
Текст по фону Бит:
BL R G B I R G B Шест.
Черный по черному 00
Синий по черному 01
Красный по синему 14
Голубой по зеленому 23
Светло-сиреневый по белому 7D
Серый по зеленому, мигание AB
Байт-атрибут используется аналогично показанному для чернобелого монитора. Тип монитора можно определить из программы с помощью команды INT 11h. Для черно-белого монитора код 07 устанавливает нормальный атрибут. Для цветных мониторов можно использовать любую из цветовых комбинаций. Цвет на экране, сохраняется до тех пор, пока другая команда не изменит его. Для установки цвета можно использовать в команде INT 10h функции АН = 06, АН = 07 и АН = 09. Например, для вывода пяти мигающих звездочек светло-зеленым цветом на сиреневом фоне возможна следующая программа:
MOV AH,09 ;Функция вывода на экран
MOV AL,'*' ;Выводимый символ
MOV ВН,00 ;Страница 0
MOV BL,0DAh ;Атрибут цвета
MOV СХ,05 ;Число повторений
INT 10h ;вызвать BIOS
2.2. Вывод на экран средствами BIOS
Средства вывода на экран реализуются драйвером BIOS, программное обращение к которому осуществляется с помощью прерывания 10h. При работе в текстовом режиме обычно используются следующие функции драйвера:
02h - установить позицию курсора;
03h - прочитать позицию курсора;
05h - установить видеостраницу;
06h - прокрутить вверх экран;
07h - прокрутить вниз экран;
08h - прочитать символ и атрибут в позиции курсора;
09h - вывести символ и атрибут в позицию курсора;
0Ah - вывести символ в позицию курсора;
0Eh - вывести символ в режиме телетайпа;
10h, подфункция 10h - переключить бит мерцание/яркость;
13h - вывести строку в режиме телетайпа.
2.2.1. Установка позиции курсора
AH = 02. Эта функция устанавливает курсор в любую позицию на экране в соответствии с координатами строки и столбца. Номер страницы обычно равен 0, но может иметь значение от 0 до 3 при 80 столбцах на экране:
MOV AH,02 ; Установить положение курсора
MOV BH,00 ; Страница 0
MOV DH, строка ; Номер строки
MOV DL, столбец ; Номер столбца
INT 10h ; Вызвать BIOS
2.2.2. Чтение текущей позиции курсора
AH = 03. Прикладная программа может определить положение курсора на экране (строку и столбец) следующим образом:
MOV AH,03 ; Определить положение курсора
MOV BH,00 ; Страница 0
INT 10h ; Вызвать BIOS
После возврата из прерывания регистр DH будет содержать номер стоки, а регистр DL - номер столбца.
2.2.3. Выбор активной страницы
AH = 05. В текстовом режиме с форматом экрана 80х25 устанавливается до 4 страниц (от 0 до 3), а для формата 40х25 – до 8 страниц (от 0 до 7):
MOV AH,05h ; Установить активную страницу
MOV AL, страница ; Номер страницы
INT 10h ; Вызвать BIOS
2.3.4. Прокрутка экрана вверх
AH = 06. С помощью этой функции в заданном месте экрана создаются цветные прямоугольные окна заданного размера. Если в созданные ранее окна выведен какой-либо текст, то с помощью этой функции его можно прокручивать вверх. При этом верхние строки уходят с экрана, а чистые строки вводятся снизу. Для прокрутки любого количества строк необходимо установить соответствующее значение в регистре AL. Регистр BH содержит атрибут для символов.
Значения в регистрах CX и DX определяют координаты левого верхнего и правого нижнего углов сдвигаемого окна соответственно.
Следующие команды выполняют прокрутку всего экрана на одну строку:
MOV AH,06h ; Прокрутить экран вверх
MOV AL,01 ; На одну строку
MOV BH,07 ; Атрибут нормальный: черно-белый
MOV CH,00 ; Номер строки левого верхнего угла
MOV CL,00 ; Номер столбца левого верхнего угла
MOV DH,18h ; Номер строки нижнего правого угла
MOV DL,4Fh ; Номер столбца нижнего правого угла
INT 10h ; Вызов BIOS
2.2.5. Прокрутка экрана вниз
AH = 07. Для текстового режима прокрутка экрана вниз означает удаление нижних строк и вставку чистых строк сверху. Регистр AH должен содержать 07, значения остальных регистров аналогичны функции 06 для прокрутки вверх.
2.2.6. Чтение символа и атрибута в текущей позиции курсора
Для чтения символа и байта-атрибута из видеопамяти используются следующие команды:
MOV AH,08 ; Запрос на чтение символа и атрибута
MOV BH,00 ; Страница 0
INT 10h ; Вызвать BIOS
Данная функция возвращает в регистре AL значение символа, а в регистре AH – его атрибут.
2.2.7. Вывод символа и атрибута в текущую позицию курсора
AH = 09h. Для вывода на экран символов с их атрибутами можно воспользоваться следующими командами:
MOV AH,09h ; Функция вывода
MOV AL, символ ; Выводимый символ
MOV BH, страница ; Номер страницы
MOV BL, атрибут ; Атрибут
MOV CX, повторение ; Число повторений
INT 10h ; Вызвать BIOS
В регистр AL должен быть помещен выводимый символ. Значение в регистре CX определяет число повторений символа на экране. Вывод на экран последовательности различных символов требует организации цикла. Кроме того, при выводе каждого символа необходимо дополнительно передвигать курсор в следующий столбец.
2.2.8. Вывод символа в текущую позицию курсора
AH = 0Ah. Эта функция аналогична функции 09, с той лишь разницей, что функция 0A не устанавливает атрибут.
MOV AH,0Ah ; Функция вывода
MOV AL, символ ; Выводимый символ
MOV BH, страница ; Номер страницы
MOV CX, повторение ; Число повторений
INT 10h ; Вызвать BIOS
2.2.9. Вывод в режиме телетайпа
AH = 0E. Для выполнения этой функции необходимо установить в регистре AH шестнадцатиричное значение 0E, в регистр AL поместить выводимый символ и номер страницы – в регистр BH. Данная функция автоматически передвигает курсор, переводит символы на следующую строку, выполняет прокрутку экрана и сохраняет текущие атрибуты.
2.2.10. Выделение мерцанием и яркостью
AH = 10h. Подфункция 03h этой функции, в отличии от описанных выше функций вывода символов на экран, воздействует сразу на весь экран, влияя на отображение тех символов, у которых установлен старший бит атрибута фона. Функция позволяет либо приписать этот бит яркости фона, давая тем самым возможность выводить на экран 16 цветов фона, либо назначить его атрибуту мерцания символа. В последнем случае цвет фона может принимать только 8 значений.
MOV AH,10h ; Функция
MOV AL,03h ; Подфункция мерцание-яркость
MOV BL,0 ; 0 - яркость, 1 - мерцание
INT 10h ; Вызов BIOS
2.2.11. Вывод символьной строки
AH = 13h. Данная функция позволяет выводить на экран символьные строки с установкой атрибутов и перемещением курсора:
MOV AH,13h ; Функция вывода
MOV AL, сервис ; 0, 1, 2 или 3
MOV BH, страница ;
LEA BP, адрес ; Адрес строки в ES:BP
MOV CX, длина ; Длина строки
MOV DX, экран ; Координаты на экране
INT 10h ; Вызов BIOS
Значения в регистре AL указывают:
0 - использовать атрибут и не перемещать курсор
1 - использовать атрибут и переместить курсор
2 - вывести символ, затем атрибут и не перемещать курсор
3 - вывести символ, затем атрибут и переместить курсор
2.2.12. Вывод символьной строки средствами DOS
Вывод текста на экран средствами DOS требует определения текстового сообщения в области данных, установки в регистре АН значения 09 (вызов функции DOS) и указания команды DOS INT 21Н. В процессе выполнения операции конец сообщения определяется по ограничителю ($), как показано ниже:
NAMSTUD DB ’Имя студента’,’$’
.
.
MOV АН,09 ;3апрос вывода на экран
LEA DX, NAMSTUD ;3агрузка адреса сообщения
INT 21H ;Вызов DOS
Знак ограничителя '$' можно кодировать непосредственно после символьной строки, как показано в примере, внутри строки 'Имя покупателя?$' или в следующем операторе DB '$'. Используя данную операцию, нельзя вывести на экран символ доллара "$", Кроме того, если знак доллара будет отсутствовать в конце строки, то на экран будут выводиться все последующие символы, пока знак "$" не встретится в памяти.
Команда LEA загружает адрес области NAMSTUD в регистр DX для передачи в DOS адреса выводимой информации. Адрес поля NAMSTUD, загружаемый в DX по команде LEA, является относительным, поэтому для вычисления абсолютного адреса данных DOS складывает значения регистров DS и DX (DS:DX).
2.2.13. Вывод символов таблицы ASCII
Большая часть из 256 символов ASCII имеют символьное представление и могут быть выведены на экран. Некоторые значения, например, 00H и FFH, не соответствуют никаким выводимым символам и представляются на экране как пробел, хотя пробел имеет в ASCII особый код – 20Н. Ниже приведена программа, которая выводит на экран все символы ASCII-таблицы.
TITLE A08DISAS (СОМ) Вывод набора символов ASCII
.MODEL SMALL
.CODE
ORG 100H
BEGIN: JMP SHORT A10MAIN
ASCHAR DB 00, '$'
; Главная процедура:
.286
A10MAIN PROC NEAR
CALL B10SCREEN ;Очистка экрана
CALL C10CURSOR ;Установка курсора
CALL D10DISPLY ;Вывод символов
MOV AX,4C00H ;Завершение работы
INT 21H
A10MAIN ENDP
; Очистка экрана и установка атрибутов:
BIOSCREEN PROC NEAR
PUSH A ;Сохранение значений регистров
MOV AX,0600H ;Прокрутка целого экрана
MOV BH,07 ;Атрибуты: белый шрифт на черном фоне
MOV CX,0000 ;Верхний левый угол
MOV DX,184FH ;Нижний правый угол
INT 10Н ;Вызов обработчика прерывания
POP A ;Восстановление значений регистров
RET ;Возврат к точке вызова
BIOSCREEN ENDP
; Установка курсора в ячейку 08,00:
C10CURSOR PROC NEAR
PUSHA ;Сохранение значений регистров
MOV АН,02Н ;Запрос на установку курсора
MOV ВН,00 ;Страница 0
MOV DX,0800H ;Строка 8, столбец 0
INT 10Н ;Вызов обработчика прерывания
POPA ;Восстановление значений регистров
RET ;Возврат к точке вызова
C10CURSOR ENDP
; Вывод символов ASCII 00Н - FFH, кроме символов от 08Н до 0DH:
D10DISPLY PROC
PUSHA ;Сохранение значений регистров
MOV СХ,256 ;Подготовить 256 повторений
LEA DX, ASCHAR ;Указать адрес ASCHAR
D20: CMP ASCHAR,08Н ;Код символа меньше 08Н?
JB D30 ;Да, вывести
CMP ASCHAR, 0DH ;Код символа меньше или равен 0DH?
JBE D40 ;Да, пропустить
D30: MOV АН,09Н ;Вывод ASCII-символа
INT 21Н
D40: INC ASCHAR ;Перейти к следующему символу
LOOP D20 ;Уменьшить значение в СХ,
;повторить, если не ноль
POPA ;Восстановление значений регистров
RET ;Возврат к точке вызова
D10DISPLY ENDP
END BEGIN
3. Порядок выполнения работы
3.1. С помощью отладчика DEBUG создать и выполнить ассемблерную программу, которая устанавливает сиреневый фон всего экрана и задает в центре экрана красное окно меньшего размера.
3.2. Доработайте программу по пункту 3.1, чтобы вывести в центр окна свою фамилию и инициалы.
3.3. Оттранслируйте, скомпонуйте и выполните программу по пункту 3.2.
3.4. Оттранслировать программу, приведенную в разделе 2.2.13, скомпоновать ее и преобразовать в файл типа. СОМ для выполнения.
4. Требования к отчету
Отчет по лабораторной работе должен содержать:
а) титульный лист;
б) условие задания;
в) текст программ на языке Ассемблера;
г) ответы на контрольные вопросы.
5. Контрольные вопросы
1. Сколько цветов можно обеспечить для фона и для текста на стандартном цветном графическом адаптере (CGA) в текстовом режиме?
2. Напишите байты-атрибуты в двоичном формате для: а) ярко-голубого на сиреневом; б) желтого на коричневом; в) серого на красном с миганием.
3. Напишите команды для вывода пяти символов карточной масти "бубны" в текстовом режиме ярко-зеленым цветом на сиреневом фоне.
4. Определите данные и напишите команды, необходимые для вывода на экран функцией 9Н прерывания INT 21H сообщения “What is the current date (mm/dd/yy)?. После вывода на экран сообщения должен подаваться звуковой сигнал.
ЛАБОРАТОРНАЯ РАБОТА № 3
СИСТЕМНЫЕ СРЕДСТВА ДЛЯ ВЫВОДА ИНФОРМАЦИИ НА ЭКРАН В ГРАФИЧЕСКОМ РЕЖИМЕ
1. Цель работы
Целью настоящей работы является изучение возможностей базовой системы ввода-вывода при выводе графической информации на экран монитора.
2. Теоретическая часть
Для генерации цветных изображений в графическом режиме используются минимальные точки растра – пикселы или пэлы. Цветной графический адаптер CGA имеет три степени разрешения: а) низкое разрешение (не поддерживается в ROM) обеспечивает вывод 100 строк по 160 точек (т. е. четыре бита на точку). Каждая точка может иметь один из 16 стандартных цветов; б) среднее разрешение для стандартной цветной графики обеспечивает 200 строк по 320 точек. Каждый байт в этом случае представляет четыре точки (т. е. два бита на точку); в) высокое разрешение обеспечивает 200 строк по 640 точек. Поскольку в данном случае требуется 16К байт памяти, высокое разрешение достигается только в черно-белом (BW) режиме. Каждый байт здесь представляет восемь точек (т. е. один бит на точку). Нулевое значение бита дает черный цвет точки, единичное – белый.
В графическом режиме ROM содержит точечные образы только для первых 128 ASCII-кодов. Команда INT 1Fh обеспечивает доступ к 1К байтовой области в памяти, определяющей остальные 128 символов (8 байт на символ). Отображение графических байтов в видеосигналы аналогично как для среднего, так и для высокого разрешения. Память объемом 16 Кбайт для цветного дисплея позволяет хранить дополнительные страницы (экраны). Имеется четыре страницы для экранов на 80 столбцов или восемь страниц для экранов на 40 столбцов. Графический режим обеспечивает низкое разрешение (не поддерживается в ROM), среднее разрешение (для цветной графики) и высокое разрешение (для черно-белой графики). Точка растра (минимальный элемент графического изображения) представляется определенным числом битов в зависимости от графического адаптера и разрешающей способности (низкой, средней или высокой). Для графики среднего разрешения на цветном графическом адаптере CGA можно выбрать четыре цвета, один из которых принадлежит к 16 возможным цветам, а три других формируют цветовую палитру.
2.1. Режим средней разрешающей способности
При среднем разрешении каждый байт представляет четыре точки, пронумерованные от 0 до 3:
Байт: |C1 C0|C1 C0|C1 C0|C1 C0|
Пикселы: | 0 | 1 | 2 | 3 |
В любой момент для каждой точки возможны четыре цвета от 0 до 3. Ограничение в четыре цвета объясняется тем, что двухбитовая точка имеет четыре комбинации значений битов: 00, 01, 10 и 11. Можно выбрать значение 00 для любого из 16 возможных цветов фона или выбрать значения 01, 10 и 11 для одной из двух палитр. Каждая палитра имеет три цвета:
С1 С0 Палитра 0 Палитра 1
0 0 фон фон
0 1 зеленый голубой
1 0 красный сиреневый
1 1 коричневый белый
Для выбора цвета палитры и фона используется INT 10h. Таким образом, если, например, выбраны фон желтого цвета и палитра 0, то возможны следующие цвета точки: желтый, зеленый, красный и коричневый. Байт, содержащий значение , соответствует красным точкам. Если выбрать цвет фона синий и палитру 1, то возможны цвета синий, голубой, сиреневый и белый. Байт, содержащий значение , отображает синюю, голубую, сиреневую и белую точки.
2.2. Функции прерывания BIOS INT 10h для графики
Функция AH = 00 команды INT 10h устанавливает графический режим. Функция AH = 11 команды INT 10h позволяет выбрать цвет палитры и вывести на экран графический символ. Код в регистре – AH определяет функцию AH = 00; Установка режима. Нулевое значение в регистре AH и 04 в регистре AL устанавливает стандартный цветной графический режим:
MOV AH,00 ;Функция установки режима
MOV AL,04 ;Разрешение 320х200
INT 10h
Установка графического режима приводит к исчезновению курсора с экрана.
AH = 0Bh: Установка цвета фона и цветовой палитры. Число в регистре ВН определяет назначение регистра ВL: ВН = 00 выбирает цвета фона и бордюра в соответствии с содержимым регистра ВL. Цвет фона от 1 до 16 соответствует шестнадцатеричным значениям от 0 до F; ВН = 01 выбирает палитру соответственно содержимому регистра ВL (0 или 1):
MOV AH,0Bh ;Ф-ция установки цвета
MOV ВН,01 ;Выбор палитры
MOV BL,00 ;0 (зеленый, красный, корич.)
INT 10h ;Вызвать BIOS
Палитра, установленная один раз, сохраняется, пока не будет отменена другой командой. При смене палитры весь экран меняет цветовую комбинацию. При использовании функции AH = 0Вh в текстовом режиме значение, установленное для цвета 0 в палитре, определяет цвет бордюра.
AH = 0Ch: Вывод точки на экран. Использование кода 0Ch в регистре AH позволяет вывести на экран точку в выбранном цвете (фоне и палитре). Например, для разрешения 320х200 загрузим в регистр DX вертикальную координату (от 0 до 199), а в регистр СХ – горизонтальную координату (от 0 до 319). В регистр AL поместим цвет точки (от 0 до 3):
MOV AH,0Сh ;Функция вывода точки
MOV AL, цвет ;Цвет точки
MOV СХ, столбец ;Горизонтальная координата
MOV DX, строка ;Вертикальная координата
INT 10h ;Вызвать BIOS
AH = 0Dh: Чтение точки с экрана. Данная функция позволяет прочитать точку для определения ее цвета. В регистр DX должна быть загружена вертикальная координата (от 0 до 199), а в регистр СХ – горизонтальная (от 0 до 319). В регистре AH должно быть значение 0Dh. Функция возвращает цвет точки в регистре AL.
2.3. Вывод в цветном графическом режиме
Программа, приведенная ниже, использует команду INT 10h для установки графического режима, выбора зеленого фона и вывода на экран точек (40 строк по 320 столбцов). В программе происходит увеличение значения цвета на 1 для каждой строки. Так как в определении цвета участвуют только три правых бита, цвета повторяются через каждые семь строк.
MOV AH,00 ;Устан. режима графики
MOV AL,0Dh для EGA (CGA=04)
INT 10h
MOV AH,0Bh ;Установить палитру
MOV BH,00 ;Фон
MOV BL,02 ;Зеленый
INT 10h
MOV BX,00 ;Начальные цвет,
MOV CX,00 ;столбец
MOV DX,00 ;и строка
A50: MOV AH,0Ch ;Функция вывода точки
MOV AL, BL ;Установить цвет
INT 10h ;BХ, СХ и DХ сохраняются
INC CX ;Увеличить столбец
CMP CX,320 ;Столбец 320?
JNE A50 ;Нет - цикл,
MOV CX,00 ;Да - сбросить
INC BL ;Изменить цвет
INC DX ;Увеличить строку
CMP DX,40 ;Строка 40?
JNE A50 ;Нет - цикл,
RET ;Да - завершить
После выполнения программы дисплей остается в графическом режиме. Восстановление текстового режима возможно либо с помощью команды DOS MODE (МОDЕ С080), либо пользовательской СОМ-программой, в которой для этой цели используется команда INT 10h.
3. Порядок выполнения работы
С помощью ассемблера выполнить программу, приведенную в пункте 2.3. На основе этой программы составить и выполнить процедуру, которая устанавливает графический режим экрана со средней разрешающей способностью с установкой цветов и выводит в его центре геометрическую фигуру в виде окрашенного квадрата.
4 Требования к отчету
Отчет по лабораторной работе должен содержать:
а) титульный лист;
б) условие задания;
в) текст программ на языке Ассемблера;
г) ответы на контрольные вопросы.
5. Контрольные вопросы
1. Объясните разницу в количестве цветов, возможных при низ-ком, среднем и высоком разрешении.
2. Напишите команды для установки графического режима с разрешающей способностью:
а) 320х200 в адаптере CGA и б) 640х200 в адаптере EGA.
3. Напишите команды для установки синего фона в графическом режиме.
4. Напишите команды для чтения точки на 12-й строке и 13-м столбце в графическом режиме.
5. Модифицируйте приведенную программу для:
а) графического режима на вашем мониторе;
б) красного фона; в) строк с 10-й по 30-ю;
г) столбцов с 20-го по 300-й.
ЛАБОРАТОРНАЯ РАБОТА № 4
ПРОГРАММИРОВАНИЕ СИСТЕМНЫХ ФУНКЦИЙ BIOS И DOS ДЛЯ РАБОТЫ С КЛАВИАТУРОЙ
2.1. Цель работы
Целью настоящей работы является изучение возможностей базовой системы ввода-вывода и дисковой операционной системы для программирования ввода информации с клавиатуры.
2.2. Теоретическая часть
2.2.1. Системные функции BIOS для работы с клавиатурой
Базовая система ввода-вывода (BIOS) имеет три функции для работы с клавиатурой. Они являются частью клавиатурного драйвера и выполняются с помощью прерывания 16h. Номер конкретной функции задается в регистре AН. Результат выполнения функции получается в регистрах AL и AH.
2.2.1.1. Чтение очередного символа
Функция AH=00h помещает в регистр AL очередной ASCII-код символа, введенного с клавиатуры, а в регистр AH заносит скэнкод этого символа. Если буфер клавиатуры пуст, то компьютер ожидает нажатия клавиши. Если клавиша или комбинация клавиш генерирует расширенный код, то в регистр AL помещается 0, а в регистр AH расширенный код. Введенный символ на экране не отображается.
MOV AH,00h
INT 16h
2.2.1.2. Справка о наличии символа
Функция AH=01h сбрасывает флаг нуля в 0 (ZF=0), если в буфере клавиатуры есть символ для чтения, и устанавливает флаг в 1, если буфер пуст. Этот символ и его скэн-код будут помещены в регистры AL и AH соответственно. Символ остается в буфере.
MOV AH,01h
INT 16h
2.2.1.3 Определение текущего состояния клавиатуры
Функция 02h помещает в регистр AL содержимое первого из двух байтов состояния клавиатуры с абсолютными адресами 417h и 418h. Если нужно узнать содержимое второго байта, его необходимо прочитать из памяти.
Содержимое первого байта (417h):
Бит клавиша значение, когда бит = 1
7 Ins ; режим вставки включен
6 CapsLock ; фиксация верхнего регистра
5 NumLock ; фиксация цифровой клавиатуры
4 ScrollLock ; прокрутка экрана включена
3 Alt ; клавиша нажата
2 Ctrl ; клавиша нажата
1 Shift ; клавиша нажата
Содержимое второго байта (418h):
7 Ins ; клавиша нажата
6 CapsLock ; клавиша нажата
5 NumLock ; клавиша нажата
4 ScrollLock ; клавиша нажата
3 Ctrl-NumLock ; режим паузы
Остальные биты не используются.
MOV AH,02h
INT 16h
Системные функции, осуществляемые прерыванием 16h, принадлежат к числу тех, которые позволяют создавать программы, не зависящие от операционной системы.
Тем не менее целесообразней пользоваться более гибкими возможностями системных функций для работы с клавиатурой, вызываемых с помощью прерывания 21h.
2.2.2 Системные функции DOS для работы с клавиатурой
Функции DOS для чтения с клавиатуры различаются, главным образом, по трем признакам:
а) ожидают ли ввода или нет;
б) выводят ли после чтения символ на экран;
в) проверяется ли при их выполнении наличие "Ctrl-Break" или нет.
2.2.2.1 Ввод с клавиатуры с эхоотображением
Функция 01h ожидает ввода символа, если буфер клавиатуры пуст, а затем выводит его на экран в текущую позицию курсора. Введенный символ помещается в регистр AL. Если AL содержит 00Н, это означает, что получен расширенный ASCII-код, второй байт которого будет прочитан при следующем выполнении функции. При выполнении функции осуществляется проверка наличия "Ctrl-Break". Клавиша Esc игнорируется. Клавиша Backspace сдвигает курсор на одну позицию влево, но символ, находящийся в этой позиции, не стирается. Клавиша Enter вызывает перемещение курсора в первую позицию текущей строки (нет автоматического перевода строки).
MOV AH,01h ; номер функции
INT 21h ; ожидаем нажатия клавиши
CMP AL,0 ; расширенный код?
JE EXT_CODE ; если да, то на процедуру обработки
.....расширенного кода
EXT_CODE: INT 21h ; получаем в AL номер кода
CMP AL,77 ; проверка на (-->)
JNE C_R ; если нет, то следующая проверка
JMP CUR_RIT ; если да, то на процедуру
C_R: CMP AL,75 ; и т. д.
2.2.2.2 Ввод символа без ожидания
Некоторые программы, работающие в реальном времени, не могут останавливаться и ждать нажатия клавиши. Такие программы принимают символ из буфера, только тогда, когда это им удобно, например, это игровые программы.
Функция 6 прерывания 21h – единственный способ получить введенный символ без ожидания. Эта функция не дает эха на экране и не распознает Ctrl-Break. Перед вызовом прерываний в DL должно быть помещено FFh. Иначе функция 6 будет печатать символ, находящийся в DL в текущую позицию курсора. Если символ принят, то он помещается в AL. Нулевое значение говорит о расширенном коде, и прерывание должно быть повторено.
MOV AH,6 ; номер функции
MOV DL, FFh ; запрос ввода с клавиатуры
INT 21H ; получение символа
JZ NO_CHAR ; переход, если нет символа
CMP AL,0 ; проверка на расширенный код
JE EXT_COD ; переход, если расширенный код
...........
EXT_COD: INT 21h
2.2.2.3. Прямой ввод с клавиатуры без эхо
Функции 7 и 8 прерывания 21h ожидают ввода символа, если буфер клавиатуры пуст. Появление символа на экране не отображается. При этом функция 8 распознает Ctrl-Break, а функция 7 не реагирует на него. В обоих случаях символ возвращается в AL. Когда в AL содержится 0, получен расширенный код. Нужно повторить прерывание, и в AL появится второй байт расширенного кода.
MOV AH,7 ; номер функции
INT 21h ; ожидаем ввод символа
CMP AL,0 ; проверка на расширенный код
JE EXT_COD ; переход на процедуру, иначе код
символа в AL
2.2.2.4. Проверка состояния клавиатуры
Функция 0B помещает значение FF в регистр AL, если буфер клавиатуры содержит один или более символов, и значение 0, когда буфер пуст.
MOV AH,0Bh ; номер функции
INT 21h ; вызываем прерывание
CMP AL, FFh ; сравниваем с FF
JE GET_KEY ; переход, если буфер не пуст
2.2.2.5. Получение строки символов
Функция 0A позволяет вводить строку длиной до 254 символов, выдавая эхо на экран. Эта функция продолжает ввод поступающих символов до тех пор, пока не нажата клавиша Enter. DS:DX указывает на адрес памяти, куда должна быть помещена строка. Первый байт в этой позиции должен содержать число байтов, отводимых для этой строки. После того как строка введена, второй байт даст число реально введенных символов. Сама строка начинается с третьего байта.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 |


