
Министерство образования Российской Федерации
Коломенский институт
Московского Государственного
Открытого Университета
Кафедра "Автоматика и электроника в машиностроении"
Курсовая работа по дисциплине ЭВМ и ВС
(пояснительная записка)
Выполнил: студентка группы И-43 Алаева М.А.
Принял: преподаватель Конышев А.Г.
Принял: преподаватель
г. Коломна, 2009 г.
Задание
Разработать РП на языке ассемблера персональных компьютеров типа IBM PC, работающих под управлением операционной системы MS-DOS в реальном режиме. РП должна загружаться в оперативную память и выгружаться из неё командой с соответствующими ключами. Операции загрузки, выгрузки должны сопровождаться выводом на экран поясняющих сообщений.
Задание по варианту
Ключ загрузки - /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