Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Лабораторная работа №2. Тема: «Работа с функциями BIOS

Читайте также:
  1. A) дохода лица, работающего по найму и b) дохода самозанятого лица.
  2. III. Работа над темой
  3. Quot;Бедные и средний класс работают ради денег". "Богатые заставляют деньги работать на себя".
  4. Quot;РАБОТА" ЛЮБВИ
  5. V. Самостоятельная работа студентов.
  6. V.Игра «Мы работаем на фабрике».
  7. VIII. Самостоятельная работа студентов

Тема: «Работа с функциями BIOS.
Доступ к регистрам и флагам через псевдопеременные»

(2 часа)

Язык С поддерживает доступ к внутренним регистрам микропроцессора (МП) через псевдопеременные, ссылка на которые в С-программе компилируется в ссылку на внутренний регистр МП. Перечислим имена псевдопеременных:

_AX; _AL; _AH;

_BX; _BL; _BH;

_CX; _CL; _CH;

_DX; _DL; _DH;

_SI; _DI; _BP; _SP;

_CS; _ES; _DS; _SS.

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

...

unsigned cur_code_seg, cur_data_seg, cur_stack_seg, cur_es_seg;

cur_code_seg = _CS;

cur_data_seg = _DS;

cur_stack_seg = _SS;

cur_es_seg = _ES;

...

Псевдопеременная может также использоваться в левой части оператора присваивания. Но необходимо помнить, что:

1. Невозможно непосредственно присвоить значение регистрам CS, IP;

2. Изменение значений сегментных регистров DS, SS, ES приводит к непредсказуемым последствиям для программы и требует особой осторожности;

3. Установленные в регистры значения могут быть неявно переопределены последующими операторами программы и к моменту использования в других выражениях будут содержать не ранее присвоенное, а случайное значение;

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

Пример:

Вывод символа на экран с помощью псевдопеременных:

#include<dos.h>

void main(){

/*используется 10-е прерывание и выводится символ на активную видеостраницу*/

_AH=0x0e;

_AL='N';

/*вызывает 10-е прерывание*/

geninterrupt(0x10);

}

Функция void geninterrupt(int intr_num) выполняет обращение к обработчику прерывания с номером intr_num. Для задания необходимых значений регистрам и получения значений из обработчика следует использовать псевдопеременные. Достоинством функции является минимальный размер и максимально возможная производительность кода при выполнении прерывания.

Недостаток – это возможность переопределения при загрузке регистров ранее установленных значений.

Задание:

1. Написать программу вывода пяти символов, используя псевдопеременные.

2. Написать программу, используя псевдопеременные, в которой необходимо реализовать функцию AH=01h (0x01) прерывания 10h BIOS, чтобы установить размер/форму курсора (текст), причем если курсор виден, то он мерцает. Для этого в качестве входа используются регистры CH и CL, где CH = начальная строка (значения от 0 до 1Fh; 20h=подавить курсор) CL = конечная строка (0-1Fh).


Дата добавления: 2015-07-11; просмотров: 86 | Нарушение авторских прав


Читайте в этой же книге: Лабораторная работа №6 | Лабораторная работа №7 | Задание на выполнение | Лабораторная работа №8 | Лабораторная работа №9 |
<== предыдущая страница | следующая страница ==>
Лабораторная работа №1| Лабораторная работа №3

mybiblioteka.su - 2015-2024 год. (0.005 сек.)