Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование прерываний.doc
Скачиваний:
3
Добавлен:
16.11.2019
Размер:
125.95 Кб
Скачать

Вызов прерываний из программ

В языке Си есть 4 основных функции для вызова прерываний:

int86 – выполняет прерывания процессоров i80x86 (и старших моделей);

int86xвыполняет прерывания процессоров i80x86 с указанием значения сегментного регистра;

intdosвыполняет прерывание MS-DOS INT21h;

intdosxвыполняет прерывание MS-DOS INT21h с указанием значения сегментного регистра.

#include <DOS.H> // Для работы с

// прерываниями требуется

// заголовочный файл dos.h.

int int86 (int intno,

union REGS *inregs,

union REGS *outregs);

int int86x (int intno,

union REGS *inregs,

union REGS *outregs,

struct SREGS *segregs);

здесь intnoномер прерывания,

union REGS *inregs,

union REGS *outregs

указатели на объединения (союзы); inregs позволяет заносить значения в регистры, outregs получать возвращаемые в регистрах значения после выполнения прерывания.

union REGS

{

struct WORDREGS x;

struct BYTEREGS h;

};

где

struct WORDREGS // двухбайтовые

// регистры

{

unsigned int ax;

unsigned int bx;

unsigned int cx;

unsigned int dx;

unsigned int si;

unsigned int di;

unsigned int cflag;

};

struct BYTEREGS // однобайтовые

// регистры

{

unsigned char al, ah;

unsigned char bl, bh;

unsigned char cl, ch;

unsigned char dl, dh;

};

struct SREGS // сегментные регистры

{

unsigned int es;

unsigned int cs;

unsigned int ss;

unsigned int ds;

};

Многочисленные функции прерывания INT21h выполняются с помощью функций Си:

Int intdos (union regs *inregs,

union REGS *outregs);

Int intdosx (union regs *inregs,

union REGS *outregs,

struct SREGS *segregs);

Все 4 функции Си возвращают данные, которые остаются после их выполнения в регистре AX.

Архітектура центрального процесора

Intel8086/88

01.12Регістри загального призначення

15 8 7 0

AX

AH

AL

(Аккумулятор)

BX

BH

BL

(База)

CX

CH

CL

(Лічильник)

DX

DH

DL

(Дані)

Регістри сегментів

CS

Регістр сегмента коду

DS

Регістр сегмента даних

SS

Регістр сегмента стека

ES

Рег. додаткового сегмента

Регістри зсуву

IP

Покажчик команд

SP

Покажчик стека

BP

Покажчик бази

SI

Індекс джерела

DI

Індекс призначення