Лабораторная работа № 5 «Изучение системы ввода-вывода»



Цель: Изучение принципов ввода и вывода информации.

Оборудование: ПК, ассемблер.

Краткие теоретические сведения

Вывод одиночных символов. Для вывода символа на экран можно использовать непосредственное обращение к функции ввода-вывода операционной системы или BIOS, например:

MOV АН,6

MOV DL,'C'

INT 21H

Здесь в регистр АН загружается код функции, указывающий операционной системе, что должен быть выведен символ, содержащийся в регистре DL. Выводимый символ заносится в регистр DL, по команде INT 21H происходит прерывание и управление передается DOS. Одновременно с появлением символа на экране курсор перемещается на одну позицию вправо. Затем управление возвращается прикладной программе и начинается выполнение команды, следующей за командой INT 21H. В регистр DL можно помещать также ASCII код символа. Например, заглавной букве А соответствует код 41Н.

В рассмотренном выше примере на экран выводится один символ, однако существует способ, при котором за одно обращение на экран выводится сразу несколько символов: эта возможность реализуется путем вызова функции вывода символьной строки. Соответствующая последовательность команд имеет вид

MOV AH.9H

MOV DX,OFFSET MSG

INT 21Н

Здесь в регистр АН помещается код вызываемой функции 9Н, а в регистр DX загружается адрес последовательности байтов, которая должна быть выведена на экран. При обработке прерывания управление передается операционной системе, и строка символов выдается на экран. Выводимая строка может состоять из любых символов, но должна заканчиваться знаком конца строки – $

Например, необходимо вывести на экран строку: THIS IS A MESSAGE Для описания строки, выводимой на экран, используется инструкция:

MSG DB ‘THIS IS A MESSAGES’,’$’

Здесь MSG – имя переменной, содержащей строку, DB – тип переменной (последовательность байтов), ‘$’ – конец строки.

Управление дисплеем. При других обращениях к дисплею, используется прерывание INT 10H, по которой управление передается соответствующей подпрограмме BIOS.

Выбор режима. Дисплей IBM PC допускает вывод изображения в различных форматах, как текстовых, так и графических. Задание режима производится с помощью следующей программы:

MOV АН,0

MOV AL,13H

INT 10H

В регистр АН загружается 0, что указывает на изменение режима вывода информации на экран. В регистр AL также заносится число, определяющее режим, в котором на экране будет выводиться информация.

Вывод точки на экран. Для вывода на экран точки в графическом режиме можно использовать непосредственное обращение к функции BIOS или запись в видеопамять, например:

MOV AL,4

MOV AH,0CH

INT 10H

В регистр АL загружается номер цвета выводимой точки (в различных видеорежимах число цветов может быть разным – 2, 16 или 256). В регистр АH загружается номер функции BIOS (0C – вывод точки). По команде INT 10H управление передается BIOS и производится вывод точки на экран.

Считывание с клавиатуры. Ввод данных с клавиатуры можно производить двумя способами: считывание отдельных символов и ввод целой строки символов. Для ввода одного символа можно использовать функции BIOS, например:

MOV AH,00H

INT 16H

В регистр АН загружается 0 – код функции BIOS для ввода 1 символа. По команде INT 16H происходит прерывание, и управление передается BIOS. Код введенного символа помещается в регистр AL.

Считывание строки производится иначе. Пока нажаты не все клавиши, управление программе не возвращается, а операционная система организует считывание данных с клавиатуры и запоминание кодов, соответствующих нажатым клавишам. Когда нажимается клавиша ENTER, управление передается основной программе вместе с последовательностью кодов, соответствующих нажатым клавишам. Такой процесс называется буферированным вводом с клавиатуры. Буферизованный ввод сопровождается эхо-отображением, т. е. при считывании кода нажатой клавиши символ, соответствующий этому коду, выводится на экран дисплея. Допустим, что была нажата клавиша А; в этом случае буква А появится на экране, а в буфер прикладной программы будет передан один байт данных — код, соответствующий букве А.

При использовании функции буферированного ввода необходимо указывать максимальное число символов, подлежащих считыванию, а при возврате из функции программе должно сообщаться фактическое число считанных с клавиатуры символов. Для обеспечения возможности обработки цепочки введенных символов пользователь, обращаясь к функции считывания строки, в качестве параметра передает адрес переменной, в которую будет помещена считанная строка. Строка может быть описана следующим образом:

BUF DB 10,0,0,0,0,0,0,0,0,0,0,0

В первом байте (число 10) указывается максимальное число клавиш, коды которых предполагается считывать в программе. Сюда же включается и код клавиши ENTER, которая должна нажиматься последней. Если пользователь попытается ввести больше символов, чем указано в буфере, раздастся сигнал звукового предупреждения, а очередной «лишний» код будет проигнорирован. Когда после завершения операции считывания управление будет вновь возвращено прикладной программе, второй байт строки будет содержать число считанных кодов. Таким образом, первые два байта не содержат самих кодов символов, соответствующих нажимавшимся клавишам. Эти представления находятся в следующих десяти байтах строки. Последним занесенным в буфер кодом будет код, соответствующий клавише ENTER.

Последовательность команд обращения к функции буферизованного ввода выглядит следующим образом:

MOV AH,.0AH

MOV DX.OFFSET BUF

INT 21H

В регистр АН загружается код (0АН) вызова функции ввода строки. Метка BUF указывает на описанную выше строку. По команде INT 21H управление передается операционной системе. По мере того как будут нажиматься клавиши на клавиатуре, символы, соответствующие этим клавишам, будут появляться на экране, а соответствующие им восьмибайтовые коды будут заноситься в строку BUF. После введения необходимого числа символов необходимо нажать клавишу ENTER. Код, соответствующий этой клавише, помещается в строку BUF, и управление передается прикладной программе.

Ход работы

1. Наберите в любом текстовом редакторе тексты программ и сохраните их с расширением .ASM.

2. Откомпилируйте программы.

3. Запустите программы.

4. Загрузите откомпилированные программы в отладчик. Просмотрите структуру программы, выполните ее в пошаговом режиме. Для программы из таблицы 5.3 запишите код введенного с клавиатуры символа. Для программы из таблицы 5.4 найдите в памяти введенную строку символов.

5. Ответьте на вопросы к лабораторной работе.

6. Сделайте вывод по проделанной работе.

Пример программы 5.1. Вывод текста на экран, используя функции операционной системы.

.model small .stack 100h .data st1 db 'Ok!',13,10,'$'   .code start: mov ax,@data mov ds,ax mov ah,09h     mov dx,offset st1   int 21h mov ah,4ch int 21h end start Выбираем модель памяти Задаем размер стека (256 байт)   На экран будет выведена строка – “Ok!”     Настроим сегментный регистр DS на сегмент данных Функция DOS для вывода на экран строки, адрес которой помещен в регистр DX Загрузим в DX адрес строки, которую надо вывенсти на экран Вызов DOS Функция DOS завершения программы Вызов DOS  

 

Пример программы 5.2. Рисование горизонтальной линии, используя функции BIOS.

.model small .stack 100h .code mov ah,00h mov al,13h int 10h mov cx,319 mov dx,100 lin: mov al,4 mov ah,0ch int 10h loop lin mov ah,4ch int 21h end     Задаем номер графического экрана (13h – EGA 320х240 256 цветов) Задаем число повторений цикла Задаем координаты точки   Задаем цвет точки (4 – красный) Функция BIOS для вывода точки на экран   Переход на метку lin Функция DOS завершения программы  

Пример программы 5.3. Ввод символа с клавиатуры, используя функции BIOS.

.model small .stack 100h .code mov ah,00h   int 16h mov ah,4ch int 21h end   Функция BIOS ввода с клавиатуры (ASCII код введенного символа в регистре AL) Вызов BIOS Функция DOS завершения программы  

 

Пример программы 5.4. Ввод строки символов с клавиатуры, используя функцию DOS.

.model small .stack 100h .data string DB 50 dup("$") .code mov ax,@data mov ds,ax mov dx,offset string mov ah,0ah int 21h   mov ah,4ch int 21h end   Подготовим место в памяти для введенной строки Настроим регистр DS на начало сегмента данных Настроим регистр DX на начало отведенной под строку области памяти Функция DOS ввода строки символов, ENTER – конец ввода Функция DOS завершения программы  

 

Вопросы к лабораторной работе

1) Можно ли изменить позицию, в которую будет выведена строка в программе 5.1?

2) Как изменить разрешение экрана и количество цветов в программе 5.2?

3) Как изменить цвет и позицию линии на экране в программе 5.2?

4) Как изменяется содержимое флагового регистра в процессе работы программ 5.3. и 5.4? Для чего производится сохранение в стек содержимого регистров на время обработки прерывания?

5) Как изменить программу 5.2, чтобы линия состояла из точек разного цвета?


Дата добавления: 2019-03-09; просмотров: 378; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!