|
(Как
выполнить изменение регистра CS и еще выполнить программу?) Кроме
того, параметр размер указывается в байтах, а не в параграфах,
что ограничивает размер программы, который может быть сохраненным
до 64 Кбайт (максимальный размер программы типа .COM). Единствен-
ным достоинством этой функции является то, что в качестве пара-
метра может быть использовано без преобразования смещение послед-
него адреса, как показано ниже:
...
mov dx,offset last_byte ; получение количества байтов
int 27h ; завершение и оставить резидентной
...
last_byte:
program ends
end start
Фирма "Майкрософт" рекомендует для всех вновь разрабатываемых
и для всех существующих модернизированных программ преобразовать
это прерывание в функцию с кодом 31h. |
avast home |
|
|
При выполнении преобразова-
ния не забудьте модифицировать параметр размер (Size) из байтов в
параграфы.
Доступ к резидентным подпрограммам через прерывания
В результате выполнения программы, показанной в листинге
3-4, в памяти системы будет установлена резидентная программа.
После размещения необязательно вся программа должна находиться в
памяти. Для включения этой программы в RTL необходимо передавать
ей намерение и сделать ее доступной для других программ.
RTL может содержать любую функцию и сделать любой вызов
MS-DOS (например, прерывание int 21h), пока библиотека вызывается
только текущей выполняющейся программой. |
norton |
|
|
Это ограничение предназ-
начено для предотвращения неумышленного повторного вызова MS-DOS,
который приведет к сбою системы. Следующая программа, показанная
в листинге 3-5, содержит пример интерфейса для RTL, который может
поддерживать много отдельных функций и очень похож на обработчик
прерывания MS-DOS int 21h.
- 3-35 -
Как показано в листинге 3-5, этот пример структуры может быть
расширен путем добавления необходимого программного кода для под-
держки подпрограмм сравнения, получения справок о таблицах, пре-
образования ввода-вывода, или, даже, общей области для нескольких
программ. |
avast antivirus |
|
|
ad aware, перевод с русского на английский, перевод с английского на русский, операционные системы windows, nod32, .
английский словарь
|
Заметим, что хотя функция "Сохранить
процесс" и не требует адреса PSP, программам типа .EXE необходимо
сохранять адрес PSP при выходе с целью вычисления размера прог-
раммы.
Т.к. память резервируется в начале PSP, резидентные подпрог-
раммы не должны загружаться в верхнюю часть блока памяти (напри-
мер, путем использования переключателя /high компоновщика
MS-LINK). Если подпрограмма загружается в верхнюю часть памяти,
то она станет незащищенной при завершении резидентной подпрограм-
мы, т.к. сохраняемый блок памяти размещается в начале блока памя-
ти. Подпрограмма сама будет размещаться выше пространства резер-
вируемой памяти. Когда подпрограмма станет таким образом
незащищенной, MS-DOS может загрузить на то же самое место памяти
другую программу или нерезидентную часть файла COMMAND.COM, зати-
рая резидентную подпрограмму.
В любом случае, переключатель /high компоновщика MS-LINK за-
трагивает только программы типа .EXE. Когда конвертирующая прог-
рамма EXE2BIN для файла .COM удалит маркер "загрузка высокая",
MS-DOS будет загружать программу с начала PSP.
Другим способом инстоляции резидентных программ является пре-
рывание "завершить и оставить резидентной" int 27h, оставленное
из ранних версий MS-DOS. Способ использования прерывания int 27h
имеет ряд недостатков, которые сводят на нет использование этого
способа. В отличие от функции "Сохранить процесс" (Keep Process),
прерывание int 27h не требует адреса блока памяти (задаваемого
адресом PSP), а требует этот адрес в регистре CS. Только файлы
типа .COM имеют адрес PSP в регистре программного сегмента, за-
трудняя использование этой функции в программах типа.EXE.
|
|
|