- •Резидентные программы
- •1.Введение
- •2. Особенности структуры программы типа com
- •3. Требования к структуре резидентной программы, запускаемой с помощью программного прерывания
- •4. Требования к структуре резидентной программы, запускаемой командой call
- •5. Последовательность выполнения работы
- •5.1 Изучение взаимодействия резидентной и транзитной программ через прерывание.
- •5.2. Изучение взаимодействия резидентной и транзитной программ через область межзадачных связей
- •6. Выполнить самостоятельно следующее задание.
- •Тексты программ
4. Требования к структуре резидентной программы, запускаемой командой call
Пример такой резидентной программы PRER1.ASM приведен на рис.3. Программа в инициализирующей части должна загрузить свой адрес в область межзадачных связей, являющуюся частью области данных BIOS и расположенную по адресам 40H:0F0H.....40H:0FFH.
Например, в слово по адресу 40H:0F0H программа может записать относительный адрес точки входа в процедуру, оставляемую в памяти, а в слово 40H:0F2H - содержимое сегментного регистра CS.
Процедура должна завершаться оператором возврата из процедуры RET, а программа - системным прерыванием 27Н. При этом в регистре DX следует указать размер оставляемой в памяти программы.
Пример транзитной программы START1.ASM , из которой вызывается резидентная, дан на рис.4.
Транзитная программа, желая передать управление резидентной, настраивает регистр ES на начало области данных BIOS и выполняет команду дальнего вызова
CALL DWORD PTR ES:0F0H.
Транзитная программа может передать параметры, используя область межзадачных связей. Их начальный адрес программа записывает в обусловленное место области, например, в двухсловную ячейку по адресу40H:0F4H.
В этом случае резидентная программа загружает в регистр SI относительный адрес параметров из ячейки 40H:0F4H, а в регистр DS- сегментный адрес из ячейки 40H:F6H ,и после этого забирает сами параметры, например, командами:
MOV AX, DS:[SI]
MOV BX, DS:[SI+2] и т.д.
5. Последовательность выполнения работы
5.1 Изучение взаимодействия резидентной и транзитной программ через прерывание.
1. Запустить программу Far Manager.
2. Подготовить с помощью текстового редактора (Shift+F4) файлы программ PRER.ASM и START.ASM.
3. Выполнить трансляцию резидентной программы PRER.ASM и получить файл PRER.OBJ: TASM /zi PRER,,
4. С помощью программы TLINK получить исполняемый файл PRER.COM: TLINK /t PRER,,
5.Выполнить трансляцию стартовой программы START.ASM и получить файл START.OBJ: TASM /zi START,,
6. С помощью программы TLINK получить исполняемый файл START.EXE: TLINK /v START,,
7. Загрузить отладчик TD и программу PRER.COM в оперативную память командой TD.EXE PRER.COM. Убрать предупреждение с окна отладчика.
8. Открыть окно CPU отладчика: View > CPU
Выполнить в шаговом режиме несколько команд до команды INT 27h.
9. Клавишей табуляции сделать активным окно памяти, нажать правую кнопку, выбрать GO TO, ввести адрес 00:180h и найти в памяти установленный программой вектор прерывания.
10. Выполнить программу до конца. Появиться сообщение, что программа оставлена в памяти резидентной.
11. Выйти из отладчика (ALT+X). На экране появится окно системной программы COMMAND.COM с командной строкой.
12. Введите в командную строку имя файла START.EXE и нажмите Enter. На экране появится информация об успешном запуске резидентной программы.
13. Ввести в командную строку команду EXIT и нажать Enter.
Внимание!
Запускать программы на исполнение можно без использования отладчика TD.EXE в такой последовательности: первой следует запустить из командной строки программу PRER.COM, второй – START.COM.
В случае появления сообщений о системных ошибках следует обратиться к преподавателю.
