Консультация № 55082
11.09.2006, 20:47
0.00 руб.
0 7 1
Здравствуйте ! Кто-нибудь знает как пользоваться функцией 50h прерывания 21h ? Ну и за одно функцией 49h.

Обсуждение

Неизвестный
12.09.2006, 09:25
общий
это ответ
Здравствуйте, Whiteman!

Цитата по int 21h fn 50h в приложении.
Цитата по int 21h fn 51h в приложении. Не... в приложение не вместилось...
Цитата по int 21h fn 49h в приложении.

Если нужно ещё что-нибудь - пишите.


Приложение:
┌────────────────────────────┤DOS Fn 50H: Set PSP├───────────────────────────┬│ Compatibility: 2.0+ (doc‘d: 5.0)││ Expects: AH 50H ▐│ BX Process ID (i.e, PSP segment) to make current ││ ──────────────────────────────────────────────────────────────────││ Returns: none ││ ──────────────────────────────────────────────────────────────────││ Info: This function tells DOS that the PID▲ in BX identifies the ││ current active process. It is used in TSR programs to inform DOS ││ which process is running; i.e., after popping up. ││ ││ Several DOS fns (including file handle operations and memory ││ allocation functions), refer to and make changes to the PSP of ││ the current process. ││ ││ A TSR should call Fn 51H and save its PSP during initialization. ││ Before popping up, the TSR should use fn 51H to get the ID of the ││ interrupted program, then use fn 50H to set the PID to the saved ││ value. Be sure to change the PID back before popping down. │┌──────────────────┤DOS Fn 49H: Free Allocated Memory Block├─────────────────┬│ Compatibility: 2.0+││ Expects: AH 49H ▐│ ES segment address (paragraph) of allocated memory to release ││ ──────────────────────────────────────────────────────────────────││ Returns: AX error code if CF is set to CY ││ ──────────────────────────────────────────────────────────────────││ Info: Deallocates (frees) the block of memory starting at ES:0000. ││ This block will become available for other system resources. ││ ││ DOS prevents a process from freeing blocks of memory that were ││ allocated by another process (the PID▲ of the owner is saved ││ in the MCB). The undocumented DOS Fn 50H lets you become the ││ "current process" and thus free blocks you don‘t really own. ││ ││ It is recommended that a TSR program free its environment block ││ during installation (that is, if it won‘t need it again!). This ││ allows the next program to reuse that block. │
Неизвестный
12.09.2006, 13:42
общий
Извините, Whiteman...На работе - план горит... Не могу сейчас привести перевод (хотя бы и приблизительный), занят зело...Если проблема останется актуальной, попробуйте мне напомнить о Вашем вопросе через некоторое время - попробую выделить время на перевод.На русском же Вы полной документации по прерываниям точно не найдёте, разве что отдельные статьи... Есть много хорошего на буржуйском (англицком) но всё переводить я точно не собираюсь...;)Тот кусок, который я Вам прислал написан на "облегчённом техническом английском". Может всё же попытаетесь хоть со словарём перевести? Или не так уж и хотелось?..;-)P.S.: Тройка - ничего. Хорошо не двойку...;-) Хотя Вы в вопросе и не указывали, что Вам нужно именно на русском. Я бы тогда и отвечать не стал...:)Успехов!
Неизвестный
12.09.2006, 19:17
общий
подхвачу инициативу Sergijj :)функция 49h/int 21h - освобождает память по адрессу ES:0000 (появилась в DOS 2+ ).на входе: AH - 49h, ES - сегментный адресс блока выделенной памяти для освобождения.Устанавливает cf в случае ошибки, в ax - код ошибки, только 09h, хотя в документации DOS упоминают еще код 07h.Смежные блоки памяти при освобождении не объединяются - это происходит только при выделении или изменении размера блока.Код функции одинаков в DOS 2.1-6.0, за исключением начальных и конечных вызовов критических секций в DOS 3.0+.DOS не допускает освобождения процессом памяти ему не принадлежащей (определяется по PID, сохраненному в MCB). Не документированная функция DOS 50h позволяет процессу обойти это ограничение и освободить память, ему не принадлежащую.Для TSR программ рекомендуется освобождать, по возможности, память для возможности ее использования другой программой.функция 50h/int 21h - установка PID (устанавливает адресс PSP) (внутреняя функция, появилась в DOS 2+ )на входе: AH - 50h, BX - сегментный адресс PSP нового процесса.Не возвращает ни каких значений.DOS использует текущий адресс PSP для определения принадлежности файлов и памяти.Он совпадает с PID-ми, используемыми другими ОСми под DOS 2.x. Функция не может быть вызвана из int 28h без предварительной установки флага критической ошибки.в MS-DOS 3.1+ и DR DOS 3.41+ эта функция не использует каких-либо внутренних стеков DOS, что позволяет вызывать ее в любое время, даже во время другого вызова int 21h.Некоторые прилажения Windows, такие как Quick C 2.51, используют сегмент 0000h-FFFFh и прямой доступ к SDA для определения - выполняются они в MS-DOS или в другой совместимой ОС.При вызове функции, любая программа, установившая хук на эту функцию, может заменить адрес PSP на не действительный.Функция поддерживается для совместимости с OS/2.Не документированна в версиях до DOS 5.0.Функция идентифицирует (сообщает DOS) PID в BX как текущий PID. Используется TSR для своей идентификации в DOS.Некоторые функции DOS (файловые, выделяющие память) обращаются к PSP текущего процесса и вносят в него изменения.TSR должны вызывать 51h и сохранять свой PSP в течении инициализации.Перед внедрением в адрессное пространство другого процесса (popping up), TSR должны использовать 51h для получения PID прерванной программы и через функцию 50h установить сохраненное значение(видимо свое, для получения доступа). Не забудьте вернуть PID после окончания подобного внедрения.Приведенный перевод сделан по ответу Sergijjи "Ralf Brown‘s Interrupt List" Release 61, 16jul00.PS:Sergijj, если не секрет, откуда брали информацию, тот же Interrupt List или есть другие документы?
Неизвестный
13.09.2006, 10:26
общий
2Волков Павел Юрьевич:Спасибо большое за Вашу инициативу! Хорошие компиляция и перевод!Про лист Ральфа Брауна я узнал всего пару лет назад (и естесственно сразу его себе заимел и проникся им), но года так этак с 91-го моим лучшим помощником был TechHelp, из которого и взята цитата и к которому, по привычке, и тянуться руки в случае нужды...;) Сейчас у меня есть версия TechHelp 6.0 в оболочке XView, и очень жалею, что этот проект не продолжается, - уж очень хорош. Построен в лучших традициях гипертекстовой справочной системы (DOS, text mode, умеет быть TSR, интерфейс функционально напоминает Borland). Могу выслать на мыло (803 KB в архиве AIN).Также имеется ещё несколько второстепенных по значимости электронных справочников подобного рода (NGA, PChelp2, SWAG).P.S. 2Whiteman: Ну как, Вы ощутили "чувство локтя" экспертов RusFAQ?...;-)
Неизвестный
14.09.2006, 07:42
общий
2Whiteman:выложил TechHelp 6.0 на фтпшник:/books/program/assembler/tech60.rar (734KB)
Неизвестный
14.09.2006, 13:18
общий
Напишите пожалуйста полный адрес, а то я чего то не догоняю.
Неизвестный
15.09.2006, 05:35
общий
ftp://anonymous:rusfaq.ru@ftp.rusfaq.ru/books/program/assembler/tech60.rar
Форма ответа