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

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

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

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

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

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

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

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

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

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

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

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

Задание

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

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

  1. Ключ загрузки - /add. Ключ выгрузки - /г. РП запускается сочетанием клавишCtrl+G (прерывание от клавиатуры с вектором 9) с подключением ОП до системного ссамостоятельным завершением и выводит на экран значения флагов байта статуса кла­-виатуры (адрес [0040h]:[0017h]) .

Содержание

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

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

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

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

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

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

Введение:

Assembler - язык програмирования, с помощью которого можно написать такие программы, которые невозможно, или очень сложно написать на других языках програмирования. Например: генераторы ключей(keygen), системные мониторы, драйвера для оборудования или даже операционные системы. Конечно есть и такие языки програмирования как "C","Pascal","Delphi" и т.д., но они не обеспечивают надёжного контроля за потоками данных, адресами памяти или регистрами процессора, а также: все языки высокого уровня ("C","Pascal","Delphi" и т.д.) были разработаны под определённый вид операционной системы (на Turbo Pascal для DOS невозможно написать даже самую элементарную программу, которая работала бы под MacOS или Linux, также Pascal не предусматривает работу с загрузочными секторами диска или перекомпиляцию самого себя под определённую платформу.), assembler же (не все особи) может стать этим-же ассемблером, но работающим на неизвестной науке платформе, и делающий программы под эту-же платформу.

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

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

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

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

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

программ, резидентных в памяти (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

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