На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
Страницы: (3) 1 [2] 3  все  ( Перейти к последнему сообщению )  
> ASM DOS Создание TSR без PSP , Непонятки в использование INT 21H функции 55H и другие пояснения авторов на похожие темы.
    Цитата Jin X @
    если резидент используется int 21h, то какой при этом используется PSP? Надо думать, что программы, которая исполняется в данный момент, не иначе.

    Именно так. Поэтому обработчик, отдавая управление (неважно, обратно или вниз), не должен оставлять открытый файл.
    Сообщение отредактировано: Akina -
      Повторяюсь, PSP в TSR (или даже его часть) мне не нужен. Каждый байт на счету.
      Тема выяснена на 90% . Спасибо за советы.
        andr00
        А в чём тогда суть и вообще смысл создания темы-то?
          Цитата Akina @
          не должен оставлять открытый файл.
          ...без переключения PSP (ah=50h/int 21h) ;)
            Akina, ты знаешь, то предыдущего поста не держал. Так ты попробовал? Только пробуй на ненужных файлах.

            Добавлено
            Цитата Jin X @
            Кстати, если резидент используется int 21h, то какой при этом используется PSP? Надо думать, что программы, которая исполняется в данный момент, не иначе.
            Именно. И где тогда твои открытые ранее хендлы? А если ты каждый раз будешь всплывать под разными приложениями, включая других резидентов? А если у прерываемого приложения кончатся его 20 дефолтных хендлов?

            Добавлено
            И в конце концов: кто-нибудь знает, что именно лежит в reserved-областях PSP и для чего ей это нужно там хранить? И какие ещё структуры данных в DOS и её драйверах завязаны на этот PID, каковым адрес PSP является?
              Цитата Qraizer @
              Именно. И где тогда твои открытые ранее хендлы? А если ты каждый раз будешь всплывать под разными приложениями, включая других резидентов? А если у прерываемого приложения кончатся его 20 дефолтных хендлов?
              Ну, так переключай PSP на свой, когда это нужно, а потом возвращай обратно.
              В этих байтах хранится Job File Table
                Цитата Qraizer @
                И где тогда твои открытые ранее хендлы?

                Какие это "ранее открытые"??? ты читаешь, что я пишу?

                Цитата Akina @
                Если нужна работа с файлом из TSR, то открытие-работа-закрытие выполняются в одном потоке по выставленному флагу в обработчике DOS Idle.

                Так что какая мне в пень разница, где тот хэндл, который я давным-давно закрыл?
                  Попробовал тупо скопировать старый PSP в нужное место. Отлично работает и дешевле
                  обходится (не надо применять функцию INT 21H AH=55H или AH=26H), так же не надо
                  никаких корректировок нового PSP.

                  Добавлено
                  Попробовал запустить программу TSR в DOS окне WINDOWS-XP.
                  Вроде работает. MEM.EXE указывает, что TSR существует.
                  Но, просматривая DEBUG, обнаружил в этом сегменте одни нули ?
                    Цитата Jin X @
                    Ну, так переключай PSP на свой, когда это нужно, а потом возвращай обратно.
                    Ну а я что сказал вначале?
                      Цитата andr00 @
                      просматривая DEBUG, обнаружил в этом сегменте одни нули ?

                      Правильно. Ты же ничего не сделал, чтобы именно этот блок использовался под твоим кодом в качестве PSP.
                        Цитата andr00 @
                        Попробовал тупо скопировать старый PSP в нужное место. Отлично работает и дешевле
                        обходится (не надо применять функцию INT 21H AH=55H или AH=26H), так же не надо
                        никаких корректировок нового PSP.
                        А там, в общем-то, и нет никаких абсолютных адресов, указывающих на область самой программы, поэтому и корректировки не нужны :)
                        Главное, чтобы не было утечки памяти при всех этих манипуляциях с перемещением, выделением памяти и пр.

                        Цитата Qraizer @
                        Ну а я что сказал вначале?
                        Так, никто ж и не спорит, коллега! ;)
                          Akina, все таки непонятки. Программа TSR (в окне DOS, WINDOWS-XP) работает, MEM.EXE указывает правильный размер и сегмент в памяти, а DEBUG в этом сегменте видит нули. Даже в MCB нули ?

                          Добавлено
                          Опа ! Оказывается DEBUG.EXE (а так-же TD.EXE) в окне DOS, под WINDOWS-XP вообще ничего не видит (т.е. видит какой то мусор)
                          Может кто посоветует, какой программой мне просмотреть память ?
                            Цитата andr00 @
                            Программа TSR (в окне DOS, WINDOWS-XP) работает, MEM.EXE указывает правильный размер и сегмент в памяти, а DEBUG в этом сегменте видит нули. Даже в MCB нули ?

                            MCB вообще-то на 16 байт ниже...

                            Цитата andr00 @
                            Оказывается DEBUG.EXE (а так-же TD.EXE) в окне DOS, под WINDOWS-XP вообще ничего не видит (т.е. видит какой то мусор)

                            :blink: Да ладно! у меня TD нормально всё показывает...
                              Akina, Предлагаю посмотреть скрины. Программка Выводит на экран в верхнюю строку (по прерыванию 09h) строку "ABCDEFGHIJKLMNOP"
                              Это видно на всех скринах. TD.EXE (1992 год) то же самое )

                              Добавлено
                              Не могу отправить скрин.
                                Последний скрин.
                                Прикреплённый файлПрикреплённый файлDEBUG.EXE.rar (58,21 Кбайт, скачиваний: 91)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (3) 1 [2] 3  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0390 ]   [ 18 queries used ]   [ Generated: 16.04.24, 11:58 GMT ]