есть такая программка: Код (Text): cseg segment ;привяжем сегмент к регистрам assume cs:cseg,ds:cseg,es:cseg,ss:cseg org 100h start: jmp begin ;объявим переменные old_int09h dw '??' msg db 'The program...',$ begin: ;выводим элементы интерфейса mov ah,09h lea dx,msg int 21h ;сохраняем адрес старого обработчика push 0 pop es xor ax,ax mov es,ax mov ax,es:[04h*4Ah] mov word ptr old_int09h,ax mov ax,es:[04h*4Ah+2] mov word ptr old_int09h+2,ax ;меняем обработчик pushf cli mov es:[04h*4Ah],offset hand_int09h mov es:[04h*4Ah+2],cs ;установим будильник mov ah,02h int 1ah inc cl mov ah,06h mov dx,0000h int 1ah mov ax,3100h mov dx,(enddd-begin)/10h int 21h close: ;возвращаем управление операционной системе pop ax pop ax mov ah,4ch int 21h hand_int09h proc far mov ah,2 mov dl,'a' int 21h xor ax,ax mov es,ax mov ax,word ptr cs:[old_int09h] mov es:[04h*4Ah],ax mov ax,word ptr cs:[old_int09h+2] mov es:[04h*4Ah+2],ax jmp close ;возвращаем управление программе iret enddd: hand_int09h endp cseg ends end start совершенно не понимаю, почему после срабатывания "будильника" и выполнения int 21h (ah==4ch) прога не выгружается из памяти..... подскажите, плз. что делать с ней?
alexander___ функцией mem Хорошо. А кто заставил/надоумил/потребовал оставлять программу резидентной (AX = 3100h & int 21h)?
alexander___ мне нужна помощь Писать за тебя код я не собирался (судя по "твоему" коду он не только твой). Если ты хочешь готовое решение, размести _исходный_ текст задания на курсовой проект в комерц-разделе. а не сочувствие О каком сочувствии речь? Я задаю тебе наводящие вопросы, что бы понять, что _тебе_ надо. До сих пор я пытался подтолкнуть тебя к _самостоятельному_ выполнению (как теперь выясняется) _твоего_ курсового проекта (imho для этого есть отдельная теме в бегинерсах). ps ты пронимаешь разницу между завершить_программу_оставив_ее_резидентной и завершить_программу? ты знаешь что такое mcb и их цепочка? GoldFinch Было бы желание.
программа ведь уже завершена, так что что ты там завершить пытаешься - непонятно. попробуй просто освободить память когда она больше не нужна.
в этом - главная проблема: как я себе это представляю, функция 4ch должна это сделать и вернуть управление обратно в dos, а она не освобождает память. тут, видимо какая-то тонкость...... Итак, последний вопрос: как освободить память после завершения работы резидентной программы.
Ух эти университеты, учат всякому старью типо доса, на фоне x64 и многоядерных процессоров выглядит просто смешно...