и чего она не умирает???......

Тема в разделе "WASM.BEGINNERS", создана пользователем alexander___, 16 июл 2008.

  1. alexander___

    alexander___ New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    4
    есть такая программка:

    Код (Text):
    1. cseg segment
    2.     ;привяжем сегмент к регистрам
    3.     assume  cs:cseg,ds:cseg,es:cseg,ss:cseg
    4.     org     100h
    5.  
    6. start: 
    7.     jmp     begin
    8.    
    9.     ;объявим переменные
    10.     old_int09h  dw  '??'
    11.    
    12.     msg         db  'The program...',$
    13.  
    14. begin: 
    15.     ;выводим элементы интерфейса
    16.     mov     ah,09h
    17.     lea     dx,msg
    18.     int     21h
    19.  
    20.     ;сохраняем адрес старого обработчика
    21.     push    0
    22.     pop     es
    23.     xor ax,ax
    24.     mov es,ax
    25.     mov ax,es:[04h*4Ah]
    26.     mov     word ptr old_int09h,ax
    27.    
    28.     mov     ax,es:[04h*4Ah+2]
    29.     mov     word ptr old_int09h+2,ax
    30.    
    31.     ;меняем обработчик
    32.     pushf
    33.     cli
    34.     mov     es:[04h*4Ah],offset hand_int09h
    35.     mov es:[04h*4Ah+2],cs
    36.    
    37.     ;установим будильник
    38.     mov ah,02h
    39.     int 1ah
    40.     inc cl
    41.     mov     ah,06h
    42.     mov dx,0000h
    43.     int 1ah
    44.    
    45.     mov ax,3100h
    46.     mov dx,(enddd-begin)/10h
    47.     int     21h
    48.        
    49. close:  ;возвращаем управление операционной системе
    50.     pop ax
    51.     pop ax
    52.            
    53.            mov  ah,4ch
    54.     int     21h
    55.    
    56. hand_int09h     proc    far
    57.    
    58.     mov     ah,2
    59.     mov     dl,'a'
    60.     int     21h    
    61.    
    62.     xor ax,ax
    63.     mov es,ax
    64.  
    65.     mov ax,word ptr cs:[old_int09h]
    66.     mov     es:[04h*4Ah],ax
    67.  
    68.     mov ax,word ptr cs:[old_int09h+2]
    69.     mov es:[04h*4Ah+2],ax
    70.  
    71.     jmp close
    72.     ;возвращаем управление программе
    73.    
    74.     iret
    75. enddd:
    76. hand_int09h     endp
    77. cseg        ends
    78.  
    79. end     start
    совершенно не понимаю, почему после срабатывания "будильника" и выполнения int 21h (ah==4ch) прога не выгружается из памяти.....
    подскажите, плз.
    что делать с ней?
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    alexander___
    Поясни, как ты определяешь, что "не выгружается из памяти"?
     
  3. alexander___

    alexander___ New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    4
    стандартной функцией mem с параметром /p - препод, которому буду сдавать проверяет так же.
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    alexander___
    функцией mem
    Хорошо.
    А кто заставил/надоумил/потребовал оставлять программу резидентной (AX = 3100h & int 21h)?
     
  5. alexander___

    alexander___ New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    4
    парень, мне нужна помощь, а не сочувствие. препод надоумил - это часть задания на курсовой проект
     
  6. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    какбэ резидентные программы "не умирают" по определению.
    ЗЫ: спс, посмеялсо
     
  7. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    alexander___
    мне нужна помощь
    Писать за тебя код я не собирался (судя по "твоему" коду он не только твой).
    Если ты хочешь готовое решение, размести _исходный_ текст задания на курсовой проект в комерц-разделе.

    а не сочувствие
    О каком сочувствии речь? Я задаю тебе наводящие вопросы, что бы понять, что _тебе_ надо.
    До сих пор я пытался подтолкнуть тебя к _самостоятельному_ выполнению (как теперь выясняется) _твоего_ курсового проекта (imho для этого есть отдельная теме в бегинерсах).

    ps ты пронимаешь разницу между завершить_программу_оставив_ее_резидентной и завершить_программу?
    ты знаешь что такое mcb и их цепочка?

    GoldFinch
    Было бы желание.
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    программа ведь уже завершена, так что что ты там завершить пытаешься - непонятно. попробуй просто освободить память когда она больше не нужна.
     
  9. alexander___

    alexander___ New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    4
    в этом - главная проблема: как я себе это представляю, функция 4ch должна это сделать и вернуть управление обратно в dos, а она не освобождает память. тут, видимо какая-то тонкость......

    Итак, последний вопрос: как освободить память после завершения работы резидентной программы.
     
  10. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Ух эти университеты, учат всякому старью типо доса, на фоне x64 и многоядерных процессоров выглядит просто смешно...