Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Labs / 4_Dos / Lab4

.pdf
Скачиваний:
21
Добавлен:
16.04.2013
Размер:
257.51 Кб
Скачать

1

Лабораторная работа по курсу "Организация ЭВМ и систем"

Использование прерываний DOS и BIOS

Цель работы: познакомиться с прерываниями DOS для ввода/вывода и прерываниями BIOS для работы с видеосистемой.

Вызовы DOS. В состав DOS входит большое количество программ, осуществляющих вывод на экран и ввод с клавиатуры, запись/чтение файла, чтение/установку текущего времени и многое другое. Вызов большинства перечисленных функций осуществляется командой

int 21h

Здесь 21h - номер прерывания, по которому вызывается программа-диспетчер MS DOS, вызывающая ту или иную функцию DOS. Перед вызовом этого прерывания необходимо занести в регистр AH номер требуемой функции, их краткий список приведен в Приложении 2. Если DOS не смогла выполнить требуемую функцию, флаг CF устанавливается в 1 и в регистр AX заносится код ошибки.

Пример 1. Программа dos.asm. Считать с клавиатуры строку символов и вывести ее на экран, после чего занести в регистр CL ее длину. Первую букву в строке преобразовать в большую, если она маленькая, и наоборот. Вывести преобразованную строку на экран.

sseg

segment stack 'stack'

sseg

db 64 dup (?)

ends

 

data

segment

buffer

db

80, 0

string

db

80 dup (0),'$'

message db

13, 10, '>$'

prompt

db 'Задание - ввести строку, преобразовать', 13, 10

 

db 'первую букву и вывести строку и ее длину',13,10,

data

db 'Введите строку: $'

ends

 

main

segment

 

assume

cs: main, ds: data, ss: sseg

start:

mov bx,

data

;Загрузка DS значением,

mov ds,

bx

;соответствующим сегменту данных

mov dx, offset prompt

;Печать приглашения

mov ah, 9h

 

 

int 21h

 

;Чтение строки

mov dx, offset buffer

mov ah, 0Ah

 

 

int 21h

 

;DI - адрес буфера

mov di, offset string

cmp byte ptr [di], 'A'

;Буква?

jl

nosym

 

;Нет (первый операнд меньше 'A')

xor byte ptr [di], 20h

;Преобр. первой буквы

nosym:

mov ax, 0

;AX - длина строки

mov al, buffer+1

add di, ax

 

;DI - адрес конца строки

mov byte ptr [di], '$'

;Добавить метку конца строки для вывода строки

mov dx, offset message

;Печать сообщения

mov ah, 9h

 

 

int 21h

 

;Печать строки

mov dx, offset string

int 21h

 

;В cl - длину строки

mov cl, buffer+1

 

movAH,4Ch

 

;Завершение программы

2

movAL,0 int 21h

main ends

end start

Прерывания BIOS. Базовая система ввода-вывода BIOS обеспечивает управление периферийным оборудованием ПК. BIOS размещается в ПЗУ BIOS (основная часть BIOS - это 64 Кбайт ОП, начиная с адреса F0000h), включает набор управляющих программ для основных периферийных устройств ПК. Программы BIOS обеспечивают управление аппаратурой на самом низком уровне и являются аппаратно-зависимыми. Они обращаются к портам (управляющим регистрам и аппаратным буферам) устройств ввода-вывода. Программы DOS образуют более высокий уровень управления компьютером. Например, для записи данных на диск с помощью BIOS требуется задать номер головки, цилиндра и сектора на конкретном дисководе; при обращении к DOS достаточно указать спецификацию файла. Программы обслуживания файловой системы, входящие в состав DOS, проанализируют содержимое диска, определят местонахождение требуемого файла и поставят ряд запросов к BIOS на выполнение операции записи.

Использовать функции DOS проще, однако BIOS обладает большими возможностями. Например, вывод текстовых строк на экран с помощью функций DOS 09h и 40h выполнить просто, но они не могут вывести графику, изменить цвет фона или символов, позиционировать курсор, очистить экран, переключить видеостраницу, изменить видеорежим. BIOS обеспечивает все эти возможности (прерывание 10h). В Приложении 3 приведены функции прерывания BIOS 10h для работы с видеосистемой, использованные в Примере 2. В файле BIOS 10h.doc

приведен краткий список функций прерывания BIOS 10h.

Пример 2. Программа bios.asm. Вывод на экран графического изображения с помощью прерывания BIOS 10h.

; Установить графический видеорежим

 

mov

AH,0h

 

 

mov

AL,10h

 

 

int

10h

 

; Вывести

на экран желтый прямоугольник

 

mov

AH,0Ch

; Функция вывода пиксела

 

mov

AL,0Eh

; Желтый цвет

 

mov

BH,0

; Номер видеостраницы

c2:

mov

CX,50

; Начальная x-координата

mov

DX,10

; Начальная y-координата

c1:

int

10h

; Инкремент по y

 

inc

DX

 

cmp

DX,330

; Дошли до границы по y?

 

jne

c1

; Нет, повторяем вывод точек

 

inc

CX

; Дошли до границы по y, инкремент x

 

cmp

CX,610

; Дошли до границы по x?

 

jne

c2

; Нет, повторяем вывод вертикальных линий

; Остановить программу для наблюдения результата

 

mov

AH,01h

 

 

int

21h

 

; Восстановить текстовый видеорежим

 

mov

AX,3

 

 

int

10h

 

Порядок выполнения работы

1.Напишите и выполните программу dos.asm, осуществляющую ввод-вывод при помощи вызовов DOS в соответствии с заданием своего варианта (см. Приложение 1).

2.Выполните программу bios.asm, используя упрощенные директивы сегментации

3.Найдите в обеих программах и выпишите с пояснениями 16-ричный код команд перехода

3

Jcc <метка вперед> и Jcc <метка назад>. Воспользуйтесь листингом ассемблера или информацией отладчика.

4.Покажите результаты выполнения обеих программ преподавателю.

5.*Модифицируйте Пример 2: выведите цветной параллелограмм.

Требования к отчету

1.При подготовке к лабораторной работе (дома) запишите в конспект: а) текст программы dos.asm для своего варианта;

б) полный текст программы bios.asm (с упрощенными директивами сегментации); в) все использованные функции DOS и BIOS с пояснениями;

г) все команды сравнения и условных переходов с пояснениями.

2.При выполнении работы занесите в отчет всю информацию, указанную в "Порядке выполнения".

3.Студент должен знать ответы на следующие вопросы:

Вопросы

1.Каково назначение вызовов (прерываний) DOS?

2.Каково назначение вызовов (прерываний) BIOS?

3.Знать команды сравнения и условных переходов.

ПРИЛОЖЕНИЕ 1. Варианты заданий к Примеру 1. Номер варианта равен номеру ПК.

1, 11, 21. Ввести с клавиатуры строку из двадцати символов. Поменять местами первые и последние 10 символов. Результат вывести на экран.

2, 12, 22. Ввести с клавиатуры один символ. Напечатать символ, код которого на 1 больше введенного. Непрерывно выводить этот символ до тех пор, пока пользователь не введет какой-либо символ.

3, 13, 23. Ввести с клавиатуры строку символов, вывести символы на экран в обратном порядке.

4, 14, 24. Ввести с клавиатуры строку, все буквы 'A' из исходной строки заменить на 'a'. Подсчитать и вывести на экран количество таких замен (от 0 до 9). Вывести результирующую строку на экран.

5, 15, 25. Ввести с клавиатуры строку английских букв, после чего вывести ее на экран в обратном порядке, преобразуя большие буквы в маленькие.

6, 16, 26. Ввести с клавиатуры две строки и, в соответствии с их длинами, напечатать: "Первая строка короче", "Вторая строка короче" или "Строки равной длины".

7, 17. Считать с клавиатуры строку символов, затем запросить еще один символ, подсчитать количество его появлений в строке (от 0 до 9) и вывести на экран.

8, 18. Считать с клавиатуры строку символов. В случае появления среди первых 9 символов символа * вывести на экран его порядковый номер.

9, 19. Считать с клавиатуры строку символов. Вывести на экран ее длину в виде шестнадцатеричного числа (от 0h до FFh).

10, 20. Моделирование ввода пароля: ввести строку символов, заменяя при вводе каждый символ на экране символом '*'. После окончания ввода пароля (при вводе символа возврата каретки 0Dh) напечатать пароль на экране.

* Необязательное задание. Оценивается дополнительными пунктами при условии, что студент полностью выполнил остальные задания.

4

ПРИЛОЖЕНИЕ 2. Некоторые функции прерывания MS-DOS INT 21h

Функция 01h: Ввод символа с клавиатуры с эхо-печатью. Функция ожидает ввода символа со стандартного устройства ввода (по умолчанию - клавиатура) и по получении символа помещает его в регистр AL. Одновременно с этим символ выводится на экран.

Функция 02h: Вывод символа на экран дисплея. Функция берет символ из регистра DL и выводит его на стандартное устройство вывода (по умолчанию - дисплей).

Функция 06h: Прямой ввод-вывод. Вводит с клавиатуры или выводит символ на экран. При отсутствии символа не ждет его ввода, а возвращает управление в программу. При вызове DL содержит код выводимого символа (00hFEh) для вывода; или DL=FFh для ввода. Код введенного символа помещается в AL. Если символа нет, то ZF=1 (установлен флаг нуля).

Функция 08h: Ввод символа с клавиатуры без эха. Функция ожидает ввода символа со стандартного устройства ввода (по умолчанию - клавиатура) и по получении символа помещает его в регистр AL. Введенный символ на экране не отображается.

Функция 09h: Вывод строки на экран дисплея. Функция выводит строку на стандартное устройство вывода. Полный адрес строки задается регистрами DS:DX. В конце строки должен быть символ '$'.

Функция 0Ah: Буферизованный ввод с клавиатуры. Функция вводит со стандартного устройства ввода строку символов до тех пор, пока не встретится символ возврата каретки 0Dh. Адрес области ввода задается парой DS:DX. В первом байте области ввода должно быть указано максимально допустимое число вводимых байтов, во втором байте после выполнения функции будет содержаться число фактически введенных символов. Введенная строка будет помещена в буфер, начиная с третьего байта. Символ возврата каретки помещается в конец строки.

ПРИЛОЖЕНИЕ 3. Некоторые функции прерывания BIOS 10h (видеосистема)

Функция 00h: Установка видеорежима. Устанавливает текущий видеорежим.

При вызове:

 

 

AH=00h

 

 

 

АL=видеорежим:

 

 

03h

текстовый, 80x25,

16

цветов

10h

графический, 640x350,

16

цветов (EGA)

12h

графический, 640x480,

16

цветов (VGA)

1Dh

графический, 800x600,

256 цветов (VGA)

38h

графический, 1024x768,

256 цветов (VGA)

Функция 0Ch: Запись пиксела. Записывает в видеобуфер точку заданного цвета в заданной графической позиции.

При вызове:

AH=0Ch

АL=цвет (номер цветового регистра) ВН=страница СХ=графический столбец ВХ=графическая строка

Источники информации

1.Рудаков П.И., Финогенов К.Г. Язык ассемблера: уроки программирования. - М.: ДИАЛОГ-

МИФИ, 2001. (Статьи 7, 9, 24)

---------------------------------------------------------------------------------------------------

© Лабораторная работа подготовлена Л.В. Илюшечкиной.

Соседние файлы в папке 4_Dos