Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
18
Добавлен:
20.06.2014
Размер:
143.87 Кб
Скачать

Министерство образования Российской Федерации

Коломенский институт

Московского Государственного

Открытого Университета

Кафедра "Автоматика и электроника в машиностроении"

Курсовая работа по дисциплине ЭВМ и ВС

(Пояснительная записка)

Выполнил: студент группы И-43 Астахов А.В.

Принял: преподаватель Конышев А.Г.

Принял: преподаватель

г. Коломна, 2009 г.

Задание

Разработать РП на языке ассемблера персональных компьютеров типа IBM PC, работающих под управлением операционной системы MS-DOS в реальном режиме. РП должна загружаться в оперативную память и выгружаться из неё командой с соответствующими ключами. Операции загрузки, выгрузки должны сопровождаться выводом на экран поясняющих сообщений.

Задание по варианту

Ключ загрузки - /Z. Ключ выгрузки - /V. РП обслуживает прерывание от таймера (вектор 1Ch) . ОП в ответ на каждый 64-й запрос выводит на экран текущее время в виде <ч>:<мин>:<с>, например, 10:11:00.

Содержание

Задание…………………………………………………………..стр.2

Введение……………………………………………………… ..стр.4

Текст программы……………………………………………….стр.8

Вывод……………………………………………………………стр.13

Литература……………………………………………………....стр.15

Основная часть

Введение:

Большой класс программ, обеспечивающих функционирование вычислительной

системы (драйверы устройств, программы шифрации и защиты данных,

русификаторы, интерактивные справочники и др.), должны постоянно находиться в

памяти и быстро реагировать на запросы пользователя или на какие-то события,

происходящие в вычислительной системе. Такие программы носят названия

программ, резидентных в памяти (Terminate and Stay Resident, TSR), или просто

резидентных. Сделать резидентной можно любую программу, однако ввиду того,

что резидентная программа должна быть максимально компактной, чаще всего в

качестве резидентных используют программы типа.СОМ.

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

прерыванием:

Int 21,31 - завершить и остаться резидентной;

AL - код возврата (errorlevel);

DX - размер резидентной части программы в параграфах.

Возможны разные способы для повторного запуска программы но наиболее употребительны следующие:

1. С помощью программных прерываний. То есть запускается обычная

программа, которая внутри себя содержит прерывание с вектором, адрес

которого есть точка входа в резидентную программу. Для этого в DOS

предусмотрена группа пользовательских программных прерываний

Int 60h...Int 66h с пустыми адресами прерывающих программ 0000:0000.

Изменить эти адреса можно с помощью прерывания:

Int 21,25 - установить новый адрес вектора прерывания

AL - номер изменяемого прерывания

DS:DX - новый адрес прерывающей программы

2. С помощью свободных аппаратных прерываний. То есть таких, где всю

обработку, вместо стандартного обработчика аппаратного прерывания,

делает наша резидентная программа.

Изменить адрес обработчика аппаратного прерывания можно с

помощью все того же прерывания Int 21,25.

Например с помощью прерывания от таймера пользователя с вектором

1C (возникает 18,2 раз в сек) можно запускать программу для вывода

показаний часов.

3. C помощью прерывания от клавиатуры IRQ1 с вектором 09. В этом случае резидентная программа запускается по заданной клавише.

Внутри резидентных программ, вызываемых аппаратным

прерыванием, не должно быть прерываний Int21h, так как резидентная

программа запускается в случайные моменты времени, когда основная

программа может выполнять свое Int21h. Тогда оно войдет само в себя,

что недопустимо, так как они используют общий стек. С меньшей степенью

вероятности это относится и к другим прерываниям. Даже когда ПК стоит,

COMMAND.COM на самом деле выполняет прерывание INT 21h (функция 0Ah),

ожидая ввода с клавиатуры.

Типичная структура резидентной программы:

text segment 'code'

assume CS:text, DS:text

org 100h

main proc

jmp init ;Переход на секцию инициализации

;Данные резидентной секции программы

. . .

entry: ;Текст резидентной секции программы

. . .

main endp

init proc ;Секция инициализации

mov DX, (init-main+10Fh)/16 ;Размер в параграфах

mov AH, 3100h ;Функция "Завершить и оставить в

int 21h ; памяти"

init endp

text ends

end main

Программа пишется в формате.СОМ, поэтому в ней предусматривается только

один сегмент, с которым связываются сегментные регистры CS и DS; в начале

сегмента резервируется 100h байт для PSP.

При запуске программы с клавиатуры управление передается (в соответствии

с параметром директивы end) на начало процедуры main. Командой jmp сразу же

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

в виде отдельной процедуры или входить в состав процедуры main. В секции

инициализации, в частности, подготавливаются условия для работы программы уже

в резидентном состоянии. Последними строками секции инициализации вызывается

функция DOS 31h, которая выполняет завершение программы с оставлением в

памяти указанной ее части. Размер резидентной части программы (в параграфах)

передается DOS в регистре DX. Определить размер резидентной секции можно,

например, следующим образом. К разности смещений init-main, которая равна

длине резидентной части программы в байтах, прибавляется размер PSP (100h) и

еще число 15 (0Fh) для того, чтобы после целочисленного деления на 16

результат был округлен в большую сторону.

С целью экономии памяти секция инициализации располагается в конце

программы и отбрасывается при ее завершении.

Функция 31h, закрепив за резидентной программой необходимую для ее

функционирования память, передает управление командному процессору и

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

резидентной в памяти, никак не отражается на ходе вычислительного процесса,

за исключением того, что уменьшается объем свободной памяти. Одновременно в

память может быть загружено любое число резидентных программ.

Соседние файлы в папке Кр и методичка Разработка резидентной программы в MS DOS