Вопросы к лабораторной работе



1) Влияют ли настройки BIOS на производительность ПК?

2) Как можно увеличить скорость загрузки ПК?

3) Как можно увеличить скорость работы с памятью?

4) В каких случаях нужно использовать настройки BIOS SETUP по умолчанию?

5) Сравните способы автоматической и ручной настройки BIOS SETUP, проанализируйте их эффективность.


Лабораторная работа № 10 «Изучение работы резидентной программы»

Цель: Изучение работы резидентной программы.

Оборудование: ПК, ассемблер.

Краткие теоретические сведения

Большой класс программ, обеспечивающих функционирование вычислительной системы (драйверы устройств, оболочки DOS, русификаторы, интерактивные справочники и др.), должны постоянно находиться в памяти и мгновенно реагировать на запросы пользователя, или на какие-то события, происходящие в вычислительной системе. Такие программы носят названия программ, резидентных в памяти (Terminate and Stay Resident, TSR), или просто резидентных программ. Сделать резидентной можно как программу типа .СОМ, так и программу типа .ЕХЕ, однако поскольку резидентная программа должна быть максимально компактной, чаще всего в качестве резидентных используют программы типа .СОМ.

Программы, предназначенные для загрузки и оставления в памяти, обычно состоят из двух частей (секций) — инициализирующей и рабочей (резидентной). В тексте программы резидентная секция размещается в начале, инициализирующая — за ней.

При первом вызове программа загружается в память целиком, и управление передается секции инициализации, которая заполняет или модифицирует векторы прерываний, настраивает программу на конкретные условия работы и с помощью прерывания DOS Int 21h с функцией 31h завершает программу, оставляя в памяти ее резидентную часть.

Функция 31h, закрепив за резидентной программой необходимую для ее функционирования память, передает управление командному процессору COMMAND.COM, и вычислительная система переходит таким образом в исходное состояние. Наличие программы, резидентной в памяти, никак не отражается на ходе вычислительного процесса за исключением того, что уменьшается объем свободной памяти. Одновременно может быть загружено несколько резидентных программ.

Для того чтобы активизировать резидентную программу, ей надо как-то передать управление и, возможно, параметры. Как правило, активизация резидентной программы осуществляется с помощью механизма прерываний. Кроме того, специально для взаимодействия с резидентными программами в DOS предусмотрено мультиплексное прерывание 2Fh.

При первом запуске программы с клавиатуры управление передается на начало процедуры main (первый байт после префикса программы). Командой jmp осуществляется переход на секцию инициализации, в которой, в частности, подготавливаются условия для дальнейшей активизации программы уже в резидентном состоянии. Последними строками секции инициализации вызывается функция 31h, которая выполняет завершение программы с оставлением в памяти указанной ее части. С целью экономии памяти секция инициализации располагается в конце программы и отбрасывается при ее завершении.

Содержательная часть резидентной программы, начинающаяся с метки entry, активизируется, как уже отмечалось выше, с помощью аппаратного или программного прерывания и заканчивается командой iret.

После загрузки программы в память управление передается в начало процедуры main. Для программ типа .СОМ эта точка входа должна соответствовать самой первой строке программы, идущей вслед за префиксом программы. Поскольку при загрузке программы должна выполниться ее установка в памяти, первой командой программы всегда является команда перехода на секцию инициализации и установки – jmp init.

После установки в памяти резидентная программа остается пассивной и никак не проявляет своего существования, пока не будет активизирована предусмотренным в ней для этого способом.

В качестве примера можно рассмотреть совсем простую резидентную программу, в принципе правильную и работоспособную, но не претендующую на практическую ценность. Программа активизируется прерыванием от клавиши Print Screen и выводит на экран содержимое сегментного регистра CS, что позволяет определить ее положение в памяти.

Клавиша Print Screen в DOS выполняет печать содержимого экрана на принтере. Если пользователь нажимает на клавишу Print Screen, то обработчик прерываний от клавиатуры вызывает прерывание 5. Задача обработчика прерывания 5 заключается в чтении содержимого видеобуфера и выводе его на устройство печати.

Таким образом, если мы напишем собственный обработчик прерывания и поместим его адрес в вектор с номером 5, он будет активизироваться нажатием клавиши Print Screen. Обратите внимание на то обстоятельство, что прерывание 5 является прерыванием программным, оно возбуждается командой int 5 и не имеет отношения к контроллеру прерываний. Однако активизируется это прерывание не командой int 5 в прикладной программе, а нажатием клавиши, т.е., фактически, аппаратным прерыванием.

В секции инициализации выполняется установка обработчика прерывания 05h, при этом исходное содержимое вектора 5 не сохраняется. Это, разумеется, очень плохо, так как лишает нас возможности этот вектор восстановить. С другой стороны, восстанавливать перехваченные векторы надлежит при завершении программы, а применительно к резидентной программе — при ее выгрузке из памяти. Однако в нашей простой программе не предусмотрено средств выгрузки (процедура выгрузки довольно сложна), и программе придется находиться в памяти до перезагрузки ПК.

Ход работы

1. Наберите в любом текстовом редакторе тексты программ и сохраните их с расширением .ASM.

2. Откомпилируйте программу (программа типа COM).

3. Запустите программу. Нажмите клавишу PrintScreen.

4. С помощью команды MEM /d /p и MEM /c /p определите расположение вашей программы в памяти.

5. Ответьте на вопросы к лабораторной работе.

6. Сделайте вывод по проделанной работе.

Пример программы 10.1. Резидентная програма

Code segment assume cs:code org 100h main proc jmp init new_05: push AX push BX mov BX,CS mov AH,0Eh mov AL,BH int 10h mov AL,BL int 10h pop BX pop AX iret main endp init proc mov AX,2505h mov DX,Offset new_05 int 21h mov DX,(init-main+10Fh)/16 mov AX,3100h int 21h init endp code ends end main     Переход на секцию инициализации new_05: ВХ=сегментный адрес программы Функция вывода на экран символа Выведем старшую половину сегментного адреса Вызов BIOS Выведем младшую половину сегментного адреса Вызов BIOS   3авершение обработчика Секция инициализации Функция установки вектора Смещение обработчика Вызов DOS Размер в параграфах Функция «завершить и оставить в памяти»  

 


Дата добавления: 2019-03-09; просмотров: 331; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!