Информатика: Методические указания к лабораторным работам. Часть 2. Ассемблер, страница 4

Базовая система ввода - вывода включает в себя набор подп­рограмм низкого уровня, предназначенных в основном для работы с внешними устройствами ЭВМ.  Интерфейс с BIOS организован  через несколько векторов прерывания.  В лабораторной работе использу­ются подпрограммы работы с дисплеем (вектор 10h).

Номер подпрограммы (номер функции) задается в регистре АН, необходимые параметры - в регистрах ВХ, СХ, DX. Все подпрограм­мы сохраняют регистры,  кроме SI,  DI и регистров, используемых для передачи параметров.

Основные функции BIOS для работы с дисплеем:

1. Позиционирование курсора на экране в заданную позицию.

Входные параметры - АН = 2 (номер функции)

                    ВН = 0 (номер страницы)

                    DH = номер строки (0...24)

                    DL = номер столбца (0...79)

Выходные параметры: нет

2. Чтение текущей позиции курсора

Входные параметры:    АН = 3

         ВН = 0

Выходные параметры:  DH = номер строки

         DL = номер столбца

3. Чтение с экрана символа и его атрибутов в текущей пози­ции курсора

  Входные параметры:   АН = 8

        ВН = О

Выходные параметры:   AL = код символа       

          АН = атрибуты символа

4. Вывод символа с заданными атрибутами в позиции курсора.

Входные параметры:      АН = 9

ВН = О

BL = атрибуты символа

AL = код символа

СХ = счетчик символов (количество)

Выходные параметры: нет

5. Вывод символа в позиции курсора со старыми атрибутами

Входные параметры:      АН = 10

ВН = О

AL = код символа

СХ = счетчик (количество символов)

Выходные параметры: нет

6. Вывод символа и перемещение курсора в .следующую позицию ("Телетайп")

Входные параметры:      АН = 14

ВН =0

AL = код символа

BL = атрибуты символа

Выходные параметры: нет

Байт атрибутов имеет следующую структуру:

биты 0-3 - цвет символа (0-Fh)

биты 4-6 - цвет фона (0-7h)

бит 7    - признак мигания (0/1)

3. Методические указания

В лабораторной работе требуется написать ассемблерную про­цедуру,  вызываемую  из  СИ-программы  и выполняющую операции с дисплеем. Ввод исходных данных и вывод результата выполняются в СИ-программе. Обратите внимание,  что при  пошаговой  отладке  программы возможна ее  неправильная  работа, поскольку содержимое экрана меняется после каждого  шага.  Поэтому  окончательную  проверку правильности работы  программы  следует проводить в режиме нор­мального выполнения (Run).

Необходимо предусмотреть  в  головной программе заполнение экрана произвольной информацией (например, вывод 24 раза строки текста длиной 80 символов).

Для возможности совместной пошаговой отладки оба программ­ных модуля должны быть включены в один файл проекта (см. описа­ние лабораторной работы N 2).

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

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

- прототип ассемблерной функции

- ввод исходных данных с подсказками (если требуется)

- заполнение экрана символьной информацией

- вызов ассемблерной функции

- вывод результата работы функции

2. Написать  ассемблерную функцию,  выполняющую операции в соответствии с вариантами, приведенными ниже.

3. Выполнить компиляцию и компоновку программы и произвес­ти ее пошаговую отладку и проверку работы в реальном времени.

Задания к лабораторной работе.

Вариант 1.

Написать функцию для вывода строки текста с заданными        ат­рибутами  сверху  вниз  с заданной позиции на экране.  Прототип функции:

void varl(char *str, int row, iht col, int attr);

str - строка для вывода

row - номер ряда

col - номер колонки

attr - байт атрибутов

Вариант 2.

Написать функцию  для  копирования с экрана строки текста, начиная с заданной позиции. Прототип функции:

void var2(char *str, int row, int col, int len);

str - строка, куда нужно поместить считанные данные

row – номер ряда

col - номер колонки

len - количество считываемых символов

Вариант 3.

Написать функцию, которая меняет на экране атрибуты строки символов в заданном месте экрана. Прототип функции:

void var3(int row, int col, int len, int attr);

row - номер ряда

col - номер колонки

len - длина строки

attr - атрибуты строки

Вариант 4.

Написать функцию, которая выводит на экран в заданном мес­те строку символов с разными атрибутами. Прототип функции: