Какие процедуры есть в паскале для прямого обращения к функциям ms dos и bios
Для управления аппаратными прерываниями в IBM PC используются два ПКП типа К580ВН59А. К каждому из ПКП можно подключить до 8 устройств и, таким образом, в системе можно использовать до 16 аппаратных прерываний (Максимальный приоритет имеет прерывание IRQ0 (системный таймер). Прерывания IRQ0 – IRQ7 соответствуют векторам прерываний - 8H -0FH, а IRQ8 - IRQ15 – 70H - 77H.
табл. 6). Одна часть аппаратных прерываний IBM PC жестко закреплена за стандартными устройствами (таймер, клавиатура и т.д.), другая - зарезервирована и может использоваться системой для дополнительных устройств (звуковая карта и т.д.).
Максимальный приоритет имеет прерывание IRQ0 (системный таймер). Прерывания IRQ0 – IRQ7 соответствуют векторам прерываний - 8H -0FH, а IRQ8 - IRQ15 – 70H - 77H.
Номер прерывания (IRQ) | Устройство |
таймер | |
клавиатура | |
ПКП | |
COM1 | |
COM2 | |
фиксированный диск | |
контроллер гибких дисков | |
LPT1 | |
CMOS и часы реального времени | |
- | |
10-12 | резерв |
математический сопроцессор | |
контроллер фиксированных дисков | |
резерв |
В адресном пространстве ввода-вывода МП ПКП занимают два адреса: 20Н и 21Н.
Выполнение работы
К п. 1. Текст основной программы на языке Turbo Pascal может выглядеть следующим образом:
В приведенной программе используются функции стандартного модуля Crt.
К п. 2. Turbo Pascal предусматривает возможность использования стандартных функций ОС MS DOS. Единственным механизмом обращения к функциям DOS является вызов программного прерывания. При возникновении программного прерывания, в большинстве случаев необходимо передать процедуре обработки прерывания некоторые параметры, в которых конкретизируется запрос нужной функции. Эти параметры, а также выходная информация (результат обработки прерывания) передаются из программы в процедуру и обратно через регистры ЦП. В составе модуля Dos Турбо-Паскаля для этих целей определен специальный тип данных:
Case integer of
0: (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags: Word);
Для обращения к функциям DOS в Турбо-Паскале используются следующие процедуры:
процедура Intr -вызывает программное прерывание с заданным номером:
процедура MSDOS -инициирует прерывание с номером 33 ($21):
Программное прерывание $21 дает доступ к большому количеству функций DOS (85 функций). Процедура MSDOS эквивалентна вызову Intr с номером $21.
Var r: Registers;
Writeln (‘версия DOS:’, r.AL,’.’,r.AH);
К п.3. Для использования собственных подпрограмм обработки прерываний необходимо выполнить следующие действия:
· разработать подпрограмму обслуживания прерывания;
· в начале работы программы сохранить старый вектор прерывания в переменной типа Pointer;
· задать новый вектор прерывания, указывающий на разработанную подпрограмму;
· вызывать программное прерывание нужно в соответствии с правилами, описанными в п.2 лабораторной работы;
· при завершении работы программы восстановить “старый” вектор прерывания.
Турбо-Паскаль предоставляет возможность разработки процедур обработки прерывания на языке высокого уровня. Процедура обработки прерывания должна содержать служебную директиву Interrupt (прерывание), например:
Procedure ProcInt (Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word); Interrupt;
Директива Interrupt обеспечивает автоматическое сохранение содержимого регистров ЦП в стеке при вызове процедуры обработки прерывания и извлечение их из стека перед выходом из процедуры. Это необходимо для того, чтобы процедура обработки прерывания не искажала работу прерванной программы.
Формальные параметры в заголовке процедуры должны перечисляться в указанном порядке. Количество перечисляемых параметров - не должно превышать 12. Если в списке пропущен какой-либо параметр, то должны быть пропущены и все предшествующие ему параметры.
Для связи с процедурами прерываний используются векторы прерываний. Следующие процедуры модуля Dos позволяют прочитать содержимое вектора или установить его новое значение.
Процедура GetIntVec -возвращает вектор прерывания с указанным номером:
Процедура SetIntVec- устанавливает новое значение вектора прерывания:
Для получения адреса входа в процедуру обработки прерывания необходимо использовать функцию Addr, например:
К п.4. Часто в программах для отсчета временных интервалов удобно использовать системный таймер, прерывание от которого формируется 18,2 раза в секунду. Перекрытие стандартного прерывания от таймера нецелесообразно, т.к. таймер в системе играет важную роль.
Для добавления своего кода к прерыванию от таймера удобно использовать пустое специальное прерывание BIOS $1C, которое вызывается прерыванием от таймера и ничего не делает, пока вы не напишете для него свой код. Вы должны изменить вектор прерывания $1C так, чтобы он указывал на процедуру в вашей программе. При завершении работы программы, вы должны восстановить исходное значение вектора (см. п.3.).
Любая процедура обработки прерывания (и особенно от таймера) должна выполняться быстро и не содержать длительных операций ввода-вывода. Поэтому основное назначение разработанного дополнения к прерыванию должно заключаться в подсчете и/или контроле числа обработанных прерываний от таймера. Прерывание от таймера обрабатывается каждые »0,055с. Таким образом, интервал времени в 1с, можно получить, обработав 18 прерываний от таймера. Например, используя глобальную переменную и изменяя ее значение при обработке прерывания (число обработанных прерываний от таймера), можно контролировать ее текущее значение в основной программе и там же выполнять необходимые действия (менять цвет фона, символов и т.д.).
К п.5. Значения векторов прерывания хранятся в оперативной памяти компьютера, т.е. представляют собой последовательность байтов. В языке Pascal для прямого доступа к любому участку оперативной памяти предварительно объявлены массивы Mem, MemW и MemL. Компоненты массива Mem – значения типа Byte; массива MemW – типа Word; массива MemL – типа Longint. Для обращения к элементам этих массивов необходимо указать индекс, который представляет собой абсолютный адрес ячейки памяти. Абсолютный адрес состоит из двух выражений типа Word; первое дает адрес начала сегмента, а второе задает смещение внутри этого сегмента. Эти выражения разделяются двоеточием. Например:
Начальные адреса процедур можно получить, как отмечалось выше, с помощью функции Addr, которая возвращает значение типа Pointer. Но тип Pointer нельзя распечатать с помощью стандартных процедур. Для преобразования типа Pointer используют функции Seg(X) и Ofs(X), которые возвращают значения типа Word соответственно для начального адреса сегмента и смещения в сегменте для объекта Х (переменной, процедуры или функции).
Операционная система управляет программами, периферийными устройствами, словом, всем. Важную роль здесь играют прерывания. Прерывание представляет собой сигнал процессору, вырабатываемый программой, каким-либо устройством или самим процессором. Этот сигнал приостанавливает выполнение программы и запускает соответствующую функцию операционной системы для выполнения необходимых системных действий. Необходимость прерываний вызвана двумя причинами – специальными запросами на выполнение системных действий, например по вводу и выводу данных, а также возникновением ошибок при выполнении программ. Прерываниям присваиваются номера, например $10. Прерывания от $1F включительно зарезервированы для BIOS, а начиная с $20 до $62 - для операций MS-DOS. Прерывания хранятся в специальной таблице прерываний. В таблице 1 приведен перечень некоторых прерываний.
Прерывание из-за ошибки деления на нуль
Прерывания из-за переполнения при умножении
Функция печати копии экрана
Исключительная ситуация «неопределенный код операции»
Исключительная ситуация «код операции ESC»
Список установленного оборудования
Обслуживание дискового ввода- вывода
Обслуживание последовательного ввода вывода
Обслуживание ввода- вывода с клавиатуры
Программа начальной загрузки системы
Обслуживание системного таймера и часов
Часы таймера пользователя
Вызов функции MS-DOS
Адрес завершения программы
Адрес выхода Control-C
Адрес аварийного завершения из-за фатальной ошибки
Функция чтения по абсолютному адресу на диске
Функция записи по абсолютному адресу на диске
Функция «завершить и оставить резидентной»
В Паскале есть две процедуры для прямого обращения к функциям MS-DOS и BIOS -MSDos и Intr. Прерывания зависят от состояния регистров центрального процессора и заносят в эти регистры результат своей работы. Регистр – это внутреннее запоминающее устройство процессора для временного хранения обрабатываемой или управляющей информации. В модуле System имеется специальный тип Registers, который описывается следующим образом:
сase Integer of
0: (AX, BX, CX, BP, SI, DI, DS, ES, Flags: Word);
1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);
тип Registers представляет собой запись, состоящую только из вариативной части. В табл. Дан список регистров процессора 80х86.
Регистры общего назначения
Регистры данных (16-битные = 8 + 8 бит)
Базовый (индексный) регистр
Индексные регистры и регистровые указатели (16 бит)
Указатель базы регистра
Регистр- индекс источника
Регистр- индекс назначения
Сегментные регистры (16 бит)
Регистр командного указателя (16 бит)
Флаговый регистр
Сегментом называется область памяти размером 64 Кбайт, которая начинается по любому адресу, кратному 16. В области памяти, выделяемой программе, имеется три основных сегмента:
Сегмент кода содержит машинные команды, которые будут выполняться. Первая выполняемая команда находится в начале кодового сегмента и операционная система для выполнения программы передает управление по адресу данного сегмента.
Сегмент данных содержит данные и рабочие области, необходимые программе.
Сегмент стека содержит адреса для возврата в операционную систему и для возврата из программ в главную программу.
Особенность регистров общего назначения заключается в том, что возможна их адресация как в целом (т.е. одним словом), так и каждой однобайтовой части (например, AL- младшая половина, а AH – старшая половина). Регистр AX является сумматором и применяется для всех операций ввода – вывода, некоторых арифметических и строковых операций. Регистр BX может использоваться для расширенной адресации и вычислений. Регистр CX необходим для управления числом повторений циклов и операций сдвига. Регистр DX применяется для некоторых операций ввода- вывода и тех арифметических операций над большими числами, которые используют два регистра DX:AX. Регистровые указатели SP и BP обеспечивают системе доступ к данным в сегменте стека, реже они используются для вычислений. Индексные регистры SI (индекс источника) и DI (индекс назначений) могут применяться для расширенной адресации и операций сложения и вычитания. Регистр командного указателя содержит смещение указателя на команду, которая должна быть выполнена.
Флагом называют признак, установленный программно с целью указания особенностей выполнения стандартных операций,- это одноразрядный индикатор, отражающий выполнение или невыполнение определенного условия.
Процедуры, предназначенные для работы с регистрами процессора и прерывания MSDos и Intr модуля DOS:
Procedure MSDos (var regs: Registers);
Procedure Intr (number : Byte ; var regs: Registers);
Процедура Intr предназначена для обращения к прерыванию с указанным номером (первый параметр). Перед выполнением прерывания процедура загружает регистры процессора значением соответствующих полей записи regs. После выполнения прерывания содержимое этих регистров вновь записывается в соответствующую переменную. Процедура MSDos эквивалентна вызову процедуры Intr для прерывания $21.
Для прерывания $21 имеется несколько сотен функций MS-DOS , предназначенных для работы с файлами и дисками. Процедуры Паскаля, использующие все эти низкоуровневые операции, дают гораздо более удобные и безопасные способы их выполнения.
К работе с прерываниями следует прибегать, если в этом действительно есть необходимость. Это потенциально опасно, так как функции напрямую обращаются к операционной системе и выполняют системные операции. Неаккуратное обращение с ними может привести к потере части информации на дисках, и другим неприятным последствиям.
Цель: приобретение практических навыков программирования прерываний с использованием процедур для прямого обращения к функциям MS-DOS и BIOS.
Теоретическая часть
Операционная система управляет программами, периферийными устройствами, словом, всем. Важную роль здесь играют прерывания. Прерывание представляет собой сигнал процессору, вырабатываемый программой, каким-либо устройством или самим процессором. Этот сигнал приостанавливает выполнение программы и запускает соответствующую функцию операционной системы для выполнения необходимых системных действий. Необходимость прерываний вызвана двумя причинами – специальными запросами на выполнение системных действий, например по вводу и выводу данных, а также возникновением ошибок при выполнении программ. Прерываниям присваиваются номера, например $10. Прерывания от $1F включительно зарезервированы для BIOS, а начиная с $20 до $62 - для операций MS-DOS. Прерывания хранятся в специальной таблице прерываний. В таблице 1 приведен перечень некоторых прерываний.
Прерывание из-за ошибки деления на нуль
Прерывания из-за переполнения при умножении
Функция печати копии экрана
Исключительная ситуация «неопределенный код операции»
Исключительная ситуация «код операции ESC»
Список установленного оборудования
Обслуживание дискового ввода- вывода
Обслуживание последовательного ввода вывода
Обслуживание ввода- вывода с клавиатуры
Программа начальной загрузки системы
Обслуживание системного таймера и часов
Часы таймера пользователя
Вызов функции MS-DOS
Адрес завершения программы
Адрес выхода Control-C
Адрес аварийного завершения из-за фатальной ошибки
Функция чтения по абсолютному адресу на диске
Функция записи по абсолютному адресу на диске
Функция «завершить и оставить резидентной»
В Паскале есть две процедуры для прямого обращения к функциям MS-DOS и BIOS -MSDos и Intr. Прерывания зависят от состояния регистров центрального процессора и заносят в эти регистры результат своей работы. Регистр – это внутреннее запоминающее устройство процессора для временного хранения обрабатываемой или управляющей информации. В модуле System имеется специальный тип Registers, который описывается следующим образом:
сase Integer of
0: (AX, BX, CX, BP, SI, DI, DS, ES, Flags: Word);
1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);
тип Registers представляет собой запись, состоящую только из вариативной части. В табл. Дан список регистров процессора 80х86.
Регистры общего назначения
Регистры данных (16-битные = 8 + 8 бит)
Базовый (индексный) регистр
Индексные регистры и регистровые указатели (16 бит)
Указатель базы регистра
Регистр- индекс источника
Регистр- индекс назначения
Сегментные регистры (16 бит)
Регистр командного указателя (16 бит)
Флаговый регистр
Сегментом называется область памяти размером 64 Кбайт, которая начинается по любому адресу, кратному 16. В области памяти, выделяемой программе, имеется три основных сегмента:
Сегмент кода содержит машинные команды, которые будут выполняться. Первая выполняемая команда находится в начале кодового сегмента и операционная система для выполнения программы передает управление по адресу данного сегмента.
Сегмент данных содержит данные и рабочие области, необходимые программе.
Сегмент стека содержит адреса для возврата в операционную систему и для возврата из программ в главную программу.
Особенность регистров общего назначения заключается в том, что возможна их адресация как в целом (т.е. одним словом), так и каждой однобайтовой части (например, AL- младшая половина, а AH – старшая половина). Регистр AX является сумматором и применяется для всех операций ввода – вывода, некоторых арифметических и строковых операций. Регистр BX может использоваться для расширенной адресации и вычислений. Регистр CX необходим для управления числом повторений циклов и операций сдвига. Регистр DX применяется для некоторых операций ввода- вывода и тех арифметических операций над большими числами, которые используют два регистра DX:AX. Регистровые указатели SP и BP обеспечивают системе доступ к данным в сегменте стека, реже они используются для вычислений. Индексные регистры SI (индекс источника) и DI (индекс назначений) могут применяться для расширенной адресации и операций сложения и вычитания. Регистр командного указателя содержит смещение указателя на команду, которая должна быть выполнена.
Флагом называют признак, установленный программно с целью указания особенностей выполнения стандартных операций,- это одноразрядный индикатор, отражающий выполнение или невыполнение определенного условия.
Процедуры, предназначенные для работы с регистрами процессора и прерывания MSDos и Intr модуля DOS:
Procedure MSDos (var regs: Registers);
Procedure Intr (number : Byte ; var regs: Registers);
Процедура Intr предназначена для обращения к прерыванию с указанным номером (первый параметр). Перед выполнением прерывания процедура загружает регистры процессора значением соответствующих полей записи regs. После выполнения прерывания содержимое этих регистров вновь записывается в соответствующую переменную. Процедура MSDos эквивалентна вызову процедуры Intr для прерывания $21.
Для прерывания $21 имеется несколько сотен функций MS-DOS , предназначенных для работы с файлами и дисками. Процедуры Паскаля, использующие все эти низкоуровневые операции, дают гораздо более удобные и безопасные способы их выполнения.
К работе с прерываниями следует прибегать, если в этом действительно есть необходимость. Это потенциально опасно, так как функции напрямую обращаются к операционной системе и выполняют системные операции. Неаккуратное обращение с ними может привести к потере части информации на дисках, и другим неприятным последствиям.
Практическая часть
Запустить на выполнение.
Пояснить работу процедур модуля DOS, предназначенных для выполнения системных операций (прерываний), обращения к памяти и портам ввода- вывода.
Ответить на контрольные вопросы
Задача 1 В качестве примера работы с прерываниями рассмотрим пример простой программы, в которой используется функция $2С для считывания показаний системных часов.
Пояснить работу процедур модуля DOS, предназначенных для выполнения системных операций (прерываний), обращения к памяти и портам ввода- вывода.
Ответить на контрольные вопросы
Задача 1 В качестве примера работы с прерываниями рассмотрим пример простой программы, в которой используется функция $2С для считывания показаний системных часов.
write (‘Системные часы показывают ’);
writeln('Объем памяти = ', r.АХ, ' Кбайт')
write1n ('Версия операционной системы: г.АL, '.', г.АН)
Задача 4. С помощью следующих двух процедур программист может прочитать содержимое любого вектора или установить его новое значение.
Процедура GETINTVECT. Возвращает вектор прерывания с указанным номером; формат обращения GETINTVECT(< N >, < вектор >> Здесь < N >- выражение типа ВYТЕ, содержащее номер прерывания; < вектор >-переменная типа РOINTER, в которой возвращается адрес точки входа в процедуру обработки прерывания.
for i:= 0 to 255 do
if (Seg(p^) <> 0) or (Ofs(p^) <> 0) then
write1n('N = ', i:3, 'Seg = ', Seg(p^):5, 'Ofs =', Ofs(p^):5);
Прямое обращение к памяти и портам ввода-вывода
В Турбо-Паскале имеется пять предварительно объявленных массивов: МЕМ, МЕМW, МЕМL, РОRТ и РОRТW. Первые три обеспечивают доступ к любому участку оперативной памяти по абсолютному адресу, два другие - доступ к портам ввода-вывода. Компонентами массива МЕМ являются данные типа ВYТЕ, массива МЕМW - типа WORD, массива МЕМL - типа LONGINT. Обращение к элементам этих массивов, т.е. их индексация, имеет специальный вид: каждый индекс представляет собой абсолютный адрес и состоит из двух выражений типа WORD; первое дает сегментную часть адреса, второе - смещение; выражения разделяются двоеточием:
Mem[$0000:$1000]:= 0;
DataMem:= MemW[Seg(p):Ofs(p)];
MemLong:= MemL[64:i*SizeOf(rea1)];
Задача 5. Как следует из технического описания операционной системы МS DOS, в ПЗУ BIOS по адресу $F000:$FFFE зашит байт-идентификатор типа компьютера. Таким образом можно определить тип компьютера, на котором запускается программа:
Case Mem[$F000:$FFFE] of
$F9: writeIn('совместимый c PC');
Компонентами массива РОRТ являются байты, а массива РОRТW - слова. Индексами этих массивов должно быть выражение типа ВYТЕ, указывающее номер нужного порта. Присвоение значения элементу массива РОRТ или РОRТW приведет к записи в порт, упоминание элемента в выражении - к чтению из порта. Компоненты массивов РОRТ и РОRТW нельзя передавать в качестве параметров процедурам или функциям. Эти идентификаторы нельзя употреблять без индексных выражений.
Контрольные вопросы
Что представляют собой прерывания?
Какие номера прерываний зарезервированы за BIOS. MS-DOS?
Какие процедуры есть в Паскале для прямого обращения к функциям MS-DOS и BIOS?
Особенность регистров общего назначения
Процедуры, предназначенные для работы с регистрами процессора и прерывания MSDos и Intr модуля DOS
С помощью каких процедур можно прочитать любой вектор?
Охарактеризовать пять предварительно объявленных массивов: МЕМ, МЕМW, МЕМL, РОRТ и РОRТW.
Попов,И.И. Операционные системы, среды и оболочки: Учебное пособие[Тескт]/И.И.Попов, Т.Л.Партыка - М.:ФОРУМ: ИНФРА-М,2009 -400с
Олифер, В.Г. Сетевые операционные системы / В.Г. Олифер, А.А. Олифер – Спб.: Питер, 2006- 545с.
Спицына,О.И. Операционные системы и среды: лекционные материалы[Текст]/О.И.Спицына –Старый Оскол:ООО ТНТ, 2004-80с.
Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.
Операционная система управляет программами, периферийными устройствами, словом, всем. Важную роль здесь играют прерывания. Прерывание представляет собой сигнал процессору, вырабатываемый программой, каким-либо устройством или самим процессором. Этот сигнал приостанавливает выполнение программы и запускает соответствующую функцию операционной системы для выполнения необходимых системных действий. Необходимость прерываний вызвана двумя причинами – специальными запросами на выполнение системных действий, например по вводу и выводу данных, а также возникновением ошибок при выполнении программ. Прерываниям присваиваются номера, например $10. Прерывания от $1F включительно зарезервированы для BIOS, а начиная с $20 до $62 - для операций MS-DOS. Прерывания хранятся в специальной таблице прерываний. В таблице 1 приведен перечень некоторых прерываний.
Прерывание | Владелец | Назначение |
$00 | BIOS | Прерывание из-за ошибки деления на нуль |
$04 | BIOS | Прерывания из-за переполнения при умножении |
$05 | BIOS | Функция печати копии экрана |
$06 | BIOS | Исключительная ситуация «неопределенный код операции» |
$07 | BIOS | Исключительная ситуация «код операции ESC» |
$10 | BIOS | Обслуживание видеокарты |
$11 | BIOS | Список установленного оборудования |
$12 | BIOS | Размер памяти |
$13 | BIOS | Обслуживание дискового ввода- вывода |
$14 | BIOS | Обслуживание последовательного ввода вывода |
$16 | BIOS | Обслуживание ввода- вывода с клавиатуры |
$17 | BIOS | Обслуживание принтера |
$19 | BIOS | Программа начальной загрузки системы |
$1A | BIOS | Обслуживание системного таймера и часов |
$1B | BIOS | Клавиши Control-Break |
$1C | BIOS | Часы таймера пользователя |
$21 | MS-DOS | Вызов функции MS-DOS |
$22 | MS-DOS | Адрес завершения программы |
$23 | MS-DOS | Адрес выхода Control-C |
$24 | MS-DOS | Адрес аварийного завершения из-за фатальной ошибки |
$25 | MS-DOS | Функция чтения по абсолютному адресу на диске |
$26 | MS-DOS | Функция записи по абсолютному адресу на диске |
$27 | MS-DOS | Функция «завершить и оставить резидентной» |
В Паскале есть две процедуры для прямого обращения к функциям MS-DOS и BIOS -MSDos и Intr. Прерывания зависят от состояния регистров центрального процессора и заносят в эти регистры результат своей работы. Регистр – это внутреннее запоминающее устройство процессора для временного хранения обрабатываемой или управляющей информации. В модуле System имеется специальный тип Registers, который описывается следующим образом:
сase Integer of
0: (AX, BX, CX, BP, SI, DI, DS, ES, Flags: Word);
1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);
тип Registers представляет собой запись, состоящую только из вариативной части. В табл. Дан список регистров процессора 80х86.
Регистры общего назначения | |
Регистры данных (16-битные = 8 + 8 бит) | |
Регистр | Назначение |
AX = AH AL | Сумматор |
BX = BH BL | Базовый (индексный) регистр |
CX = CH CL | Счетный регистр |
DX = DH DL | Регистр данных |
Индексные регистры и регистровые указатели (16 бит) | |
Регистр | Назначение |
SP | Указатель стека |
BP | Указатель базы регистра |
SI | Регистр- индекс источника |
DI | Регистр- индекс назначения |
Сегментные регистры (16 бит) | |
Регистр | Назначение |
CS | Сегмент кода |
DS | Сегмент данных |
SS | Сегмент стека |
ES | Дополнительный сегмент |
Регистр командного указателя (16 бит) | |
IP | |
Флаговый регистр |
Сегментом называется область памяти размером 64 Кбайт, которая начинается по любому адресу, кратному 16. В области памяти, выделяемой программе, имеется три основных сегмента:
1. Сегмент кода содержит машинные команды, которые будут выполняться. Первая выполняемая команда находится в начале кодового сегмента и операционная система для выполнения программы передает управление по адресу данного сегмента.
2. Сегмент данных содержит данные и рабочие области, необходимые программе.
3. Сегмент стека содержит адреса для возврата в операционную систему и для возврата из программ в главную программу.
Особенность регистров общего назначения заключается в том, что возможна их адресация как в целом (т.е. одним словом), так и каждой однобайтовой части (например, AL- младшая половина, а AH – старшая половина). Регистр AX является сумматором и применяется для всех операций ввода – вывода, некоторых арифметических и строковых операций. Регистр BX может использоваться для расширенной адресации и вычислений. Регистр CX необходим для управления числом повторений циклов и операций сдвига. Регистр DX применяется для некоторых операций ввода- вывода и тех арифметических операций над большими числами, которые используют два регистра DX:AX. Регистровые указатели SP и BP обеспечивают системе доступ к данным в сегменте стека, реже они используются для вычислений. Индексные регистры SI (индекс источника) и DI (индекс назначений) могут применяться для расширенной адресации и операций сложения и вычитания. Регистр командного указателя содержит смещение указателя на команду, которая должна быть выполнена.
Флагом называют признак, установленный программно с целью указания особенностей выполнения стандартных операций,- это одноразрядный индикатор, отражающий выполнение или невыполнение определенного условия.
Процедуры, предназначенные для работы с регистрами процессора и прерывания MSDos и Intr модуля DOS:
Procedure MSDos (var regs: Registers);
Procedure Intr (number : Byte ; var regs: Registers);
Процедура Intr предназначена для обращения к прерыванию с указанным номером (первый параметр). Перед выполнением прерывания процедура загружает регистры процессора значением соответствующих полей записи regs. После выполнения прерывания содержимое этих регистров вновь записывается в соответствующую переменную. Процедура MSDos эквивалентна вызову процедуры Intr для прерывания $21.
Для прерывания $21 имеется несколько сотен функций MS-DOS , предназначенных для работы с файлами и дисками. Процедуры Паскаля, использующие все эти низкоуровневые операции, дают гораздо более удобные и безопасные способы их выполнения.
К работе с прерываниями следует прибегать, если в этом действительно есть необходимость. Это потенциально опасно, так как функции напрямую обращаются к операционной системе и выполняют системные операции. Неаккуратное обращение с ними может привести к потере части информации на дисках, и другим неприятным последствиям.
Практическая часть
1. Ввести программу.
2. Запустить на выполнение.
3. Пояснить работу процедур модуля DOS, предназначенных для выполнения системных операций (прерываний), обращения к памяти и портам ввода- вывода.
4. Ответить на контрольные вопросы
5. Оформить отчет
Задача 1 В качестве примера работы с прерываниями рассмотрим пример простой программы, в которой используется функция $2С для считывания показаний системных часов.
Читайте также: