Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Функции DOS и BIOS для ввода/вывода
Ввод символа: Функции ДОС: Функция ДОС INT 21/01 – ввод с клавиатуры (Стандартного входного потока) символа с повтором его на экране (эхо-повтор), возвращает ASCII-код символа в регистре AL. Если имеется старшая часть кода, то есть ASCII-код расширенный (extended ASCII), используется для клавиш, не являющихся алфавитно-цифровыми: F1…F12, комбинации с ALT, CTRL, SHIFT; требуется двойной вызов данной функции (первый раз возвращается 0). Функции 03-08 имеют аналогичный формат. Функция ДОС INT 21/03 аналогичный формат, только ввод производится с последовательного порта (по умолчанию, COM1) Функция ДОС INT 21/07 – ввод с клавиатуры (нефильтрованный, нажатие CTRL-BREAK не определяется), без эхо-повтора на экране. Функция ДОС INT 21/08 – ввод с клавиатуры, без эхо-повтора на экране. Функция ДОС INT 21/0C – ввод с очисткой буфера (в AL – номер функции (01,06,07,08,0A)
Функции BIOS: Функции BIOS INT 16/00 – возвращает в AL – ASCII код, в AH – Scan Code (аппаратный шестнадцатеричный код нажатой клавиши), однако если нажата клавиша, использующая расширенный ASCII-код, то AL=0,AH=Расширенный ASCII-код. Функция BIOS INT 16/01 – устанавливает флаг ZF, если есть символ во входном потоке; в остальном аналогична функции 00. Может еще понадобиться функция 05 – поместить символ во входной поток (символ в CL)
Вывод символа: Функции ДОС: Функция ДОС INT 21/02 - вывод символа на экран (стандартный выходной поток), символ задается в DL, интерпретируются управляющие символы (08 – возврат курсора на одну позицию, 0А – переход на строку вниз и т.п.) Функция ДОС INT 21/04 – аналогичный формат, только вывод в последовательный порт. Функция ДОС INT 21/05 -тоже, стандартный вывод на принтер (в порт LPT). Функции BIOS: Функция BIOS INT10/0E – AL – выводимый символ, интерпретируются управляющие символы. (BL – цвет фона для графических режимов) Функция BIOS INT10/0A – тоже, но BH =0 (страница видеопамяти, основная), в CX можно задать количество повторений, управляющие символы не интерпретируются Функция BIOS INT 10/09 – тоже, но в BL задаются атрибуты (цвет) символа.
Функция в/в ДОС INT 21/06 – если DL = FF - то выполняется ввод, иначе вывод символа. Введенный символ возвращается в AL – как и в функциях 01,07,08; однако в отличие от них ДОС НЕ ОЖИДАЕТ, пока символ появится (будет нажата клавиша), если символа не появится, то на выходе будет установлен флаг ZF.
Пример использования: Цикл «пока не будет нажата какая-либо клавиша, продолжать действия» Cicl: Mov ah,06 Mov dl,0FFh Int 21h Jnz Symbol_Ready;Переход, если клавиша нажата …..; действия пользователя jmp Cicl Symbol_ready:
Функции BIOS и DOS для ввода/вывода строки символов: В ряде случаев целесообразно организовать ввод строки символов как последовательный ввод символов по отдельности (например, если строка может состоять только из определенных символов): Функция ДОС INT 21/09 – вывод строки, DS:DX – адрес строки, должна заканчиваться символом ‘ $ ’ Функция ДОС INT 21/0A – ввод строки, DS:DX буфер, организованный след. Образом – первый байт – максимальное количество символов в строке, во втором байте возвращается реальное количество введенных символов, начиная с третьего байта расположена сама строка, заканчивающаяся кодом «Enter»-а – 0Dh
Функции BIOS ввода строки с клавиатуры отсутствуют. Функции вывода есть, но достаточны громоздки (рекомендуется использовать посимвольный вывод) Функция BIOS INT 10/13 – вывод строки ES:Bp, длиной в CX, AL=0, - строка символов, курсор не двигается AL=1, - строка символов, курсор передвигается в конец строки AL=2, - последовательность симв., атриб., симв., атриб, курсор не двигается AL=3, - последовательность симв., атриб., симв., атриб, курсор передвигается в конец строки Пример – ввод строки, состоящей только из числовых символов Mov bx,offset string;адрес начала Nov_vvod: Mov ah,01 Int 21h; ввод Cmp al,’0’ Jl nov_vvod Cmp al,’9’ Jg nov_vvod Mov [bx],al Inc bx Jmp nov_vvod ……. String db 10 dup (?) Помимо ввода/вывода с клавиатуры программа также может получать данные с командной строки. То, что указывается после имени программы при её запуске, называется параметрами командной строки (они разделяются пробелами). В частности, при использовании нами Tlink.exe параметры командной строки – lab3.obj и /t. Командная строка при запуске программы расположена по адресу DS:0080h в формате Длина строки, строка, заканчивающаяся кодом 0Dh. Кроме процедур в программе также можно использовать макросы – последовательность команд, на которую компилятор заменяет название макроса (макрокоманды) в тексте программы. Например, чтобы не писать много раз при выводе на экран последовательность из 3-х команд, можно оформить их в виде следующей макрокоманды.
Print macro x Mov dx,offset x Mov ah,09 Int 21h Endm Описание макрокоманды делается вначале (после org 100h и перед start:). Тогда, если приходится выводить в программе много разных сообщений, можно каждый раз писать одну команду вместо трех:
Сам машинный код от этого не изменится, просто сократится время набирания программы. Компилятор ассемблера, встретив в тексте Print заменит его на последовательность 3-х команд, описанных в макросе, а «х» (параметр макрокоманды в описании) заменит на msg1. Работа с экраном. Экран (дисплей) с точки зрения программиста на ассемблере – тоже массив цифровой информации. Этот массив хранится в специальной области памяти, называемой видеопамять. Содержимое «текстовой» видеопамяти (то есть отображение экрана в текстовом режиме) начинается с адреса B800:0000, графической A000:0000. Видеоадаптер считывает данные области памяти и отображает на экране информацию в соответствии с режимом работы (текстовым или графическим). Экран для программиста как бы состоит из отдельных ячеек, которые имеют свои координаты, отсчитываемые по горизонтали и вертикали (столбцы и строки). Координаты начинаются с 0. В текстовом режиме в ячейке может быть записан какой-либо символ, всего таких ячеек в зависимости от режима либо 80х25, либо 40х25 (столбцов х строк) в зависимости от режима экрана. В графическом режиме – точка (пиксель), которых опять же в зависимости от режима может быть от 320х200 до 1024х768 и более (по горизонтали х по вертикали). В текстовой видеопамяти за каждую «ячейку» отвечают 2 байта – в первом содержится ASCII-код символа, во второй – байт атрибутов. Байт атрибутов определяет цвет символа и фона. Соответственно по адресу B800:0000 находится ASCII-код первого символа (в верхнем левом углу), B800:0001 – цвет его и фона, B800:0002 – второй символ и т.д. Байт атрибутов организован следующим образом –
Бит интенсивности отвечает за яркость символа (1 – яркий), признак мерцания (1 – символ мерцает на экране). Биты R – red – красный, G – green – зеленый, B – blue – синий отвечают за соответствующие цвета. С помощью их комбинаций (как и в фотографии, где изображение формируется из трех основных цветов) и определяется цвета символа и фона. Например, 001 –синий, 010 – зеленый, 100 – красный, 011 – желтый и т.п. В графической видеопамяти каждый байт (для режимов с количеством цветов до 16, иначе используются несколько байт) отвечает за отдельный пиксель и обозначает его цвет – адресу A000:0000 соответствует цвет точки с координатами (0,0) – левый верхний угол экрана, A000:0001 – точке с координатами (0,1) и т.д.
Установка видеорежима
|
||||||||||||||
Последнее изменение этой страницы: 2016-12-17; просмотров: 1311; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.191.211.66 (0.009 с.) |