- •V.1 Язык программирования asm-51
- •2. Структурное программирование на языке Assembler
- •3. Использование сегментов в ассемблере
- •4. Программы и подпрограммы. Связь по управлению и по данным
- •5. Прерывания и их обработка.
- •Контроллер прерываний и микропроцессоры 80х86.
- •6. Сопроцессор и его программирование
- •7. Виртуальная память
- •9. Лабораторные работы
- •Лабораторная работа № 1
- •Изучение среды программирования turbo assembler
- •И отладчика программ debuGger
- •Лабораторная работа № 2. Программирование циклов и условий. Работа с массивами.
- •Лабораторная работа № 3. Программы и подпрограммы. Связь по управлению и по данным
- •Лабораторная работа № 4. Сопроцессор и его программирование
- •Лабораторная работа 5 Использование средств bios на языке Ассемблер
- •Краткие сведения о прерываниях bios
Лабораторная работа 5 Использование средств bios на языке Ассемблер
С помощью Ассемблера выполнить следующие задания, используя прерывания BIOS int 10h и int 16h.
№ |
ЗАДАНИЕ |
1 |
Ввести символьный массив, отсортировать и вывести на экран. |
2 |
Ввести символьный массив, и вывести на экран встречающиеся в нем буквы по алф. |
3 |
Ввести символьный массив, и вывести на экран отдельно гласные и согласные по алфавиту |
4 |
Ввести символьный массив, и вывести на экран отдельно гласные и согласные в том порядке, как они встречаются. |
5 |
Ввести символьный массив, и вывести на экран буквы в порядке убывания частоты встречаемости. |
6 |
Ввести символьный массив, и вывести на экран, и вывести его в обратном порядке. |
7 |
Ввести символьный массив, и вывести на экран буквы в порядке возрастания частоты встречаемости. |
8 |
Ввести символьный массив, и вывести на экран его анаграмму (перемешать буквы). |
9 |
Ввести символьный массив, и вывести на экран по словам, выводя каждое слово разным цветом. |
10 |
Ввести символьный массив, и вывести на экран содержащиеся в нем слова в столбик. |
11 |
В графическом режиме нарисовать замкнутый многоугольник, пользуясь курсорными клавишами. |
12 |
В графическом режиме нарисовать произвольную кривую, пользуясь курсорными клавишами. |
13 |
В графическом режиме нарисовать множество пикселов на экране, пользуясь курсорными клавишами. |
14 |
В графическом режиме заполнить экран произвольными символами, пользуясь курсорными клавишами. |
15 |
В графическом режиме отредактировать содержимое экрана, вставляя или стирая пиксели и пользуясь курсорными клавишами. |
16 |
В графическом режиме нарисовать геометрическую фигуру и вывести надпись, пользуясь курсорными клавишами. |
17 |
В графическом режиме нарисовать схематическое изображение кошки, пользуясь курсорными клавишами. |
18 |
В графическом режиме нарисовать схематическое изображение дерева, пользуясь курсорными клавишами. |
19 |
В графическом режиме нарисовать схематическое изображение домика, пользуясь курсорными клавишами. |
20 |
В графическом режиме нарисовать схематическое изображение самого себя, пользуясь курсорными клавишами. |
Краткие сведения о прерываниях bios
Перед вызовом соответствующей функции необходимо занести передаваемые ей параметры в требуемые регистры. В частности, код функции заносится в регистр AH, а код подфункции – в регистр AL. Результат выполнения функции также заносится в регистры. Например, чтобы поместить код символа, вводимого с клавиатуры, в переменные scancod и asciicod, необходимо задать в регистре AH код функции 00, выполнить команду прерывания INT с параметром 16h, а затем извлечь информацию из регистров AH (скен-код символа) и AL (ascii-код символа), и перемеcтить их в память для переменных :
……………………………………………………………………………………………………
mov ah,0
int 16h
mov scancod,ah
mov asciicod,al
……………………………………………………………………………………………………
Опишем сразу остальные функции прерывания 16h:
Функция 01h. Получение состояния клавиатуры. Возвращает состояние буфера без извлечения из него символа.
Вход: AH=01h.
Выход: если буфер пуст, флаг ZF=1;
если в буфере есть ожидающие символы, то ZF=0, а скен- и ascii- коды символа находятся в регистрах AL и AH, как и для функции 00.
Функция 01h. Получение флагов клавиатуры. Возвращает байт состояния управляющих клавиш.
Вход: AH=02h.
Выход: AL=флаги. Биты байта флагов имеют следующие значения:
0 – нажата левая клавиша Shift
1 – нажата правая клавиша Shift
2 – нажата клавиша Ctrl
3 – нажата клавиша ALT
4 – включён режим Scroll Lock
5 – включён режим Num Lock
6 – включён режим Caps Lock
7 – включён режим Insert
Функции прерывания 10h (функции видеорежимов).
Функция 00h. Установка видеорежима.
Вход: AH=00h
AL=видеорежим.
03h – текстовый, 80x25, 16 цветов
12h – графический, 640х480, 16 цветов (VGA)
12h – графический, 320х200, 256 цветов (VGA)
Функция 02h.Установка позиции курсора.
Данная функция работает как в текстовом, так и в графическом режимах. Однако, в графическом режиме курсор не виден.
Вход: AH=02h
BH=номер видеостраницы (0–3)
DH=номер видеостроки (строки в текстовом режиме нумеру-
ются снизу вверх от 1, строки в графическом режиме нумеруются
сверху вниз от 0.)
DL=номер видеостолбца
Функция 09h.Запись символа и атрибута в позицию курсора.
Данная функция также работает как в текстовом, так и в графическом режимах.
Вход: AH=09h
AL=символ
BH=номер видеостраницы
BL=атрибут (текстовый режим), или цвет (графический реж.)
CX=коэффициент повторения
В текстовом режиме каждый символ, выводимый на экран, задаётся двумя байтами: байтом кода и байтом атрибута. Байт атрибута содержит информацию о цвете и яркости фона и символа в виде irgbIRGB, где irgb – биты яркости, красного, зелёного и синего цветов для фона, а IRGB соответственно – для символа. В графическом режиме код цвета представляет номер цветового регистра палитры, в котором содержится подробная информация по воспроизведению заданного цвета.
Функция 09h. Запись пиксела в заданную графическую позицию.
Вход: AH=0ch
AL=цвет
BH=номер видеостраницы
CX=графический столбец
DX=графическая строка