Привет!!! ---------------- Вот тут написал не большой резидент он сохраняет экран в текством режиме в файле вместе аттрибутами -- так вот вопрос... когда я проверял в отладчике Turbo Debugger 5.0 от Borlanda то я проверял ключевое слово что бы проверить и иключить повторную загрузку 1. зашел в таблицу векторов прерываний что бы посмотреть свои установленные вектора 2. стал смотреть куда он ссылается значения указывали на мой обработчик 21 перерывания ... но в отладчике при трассировке он загружал другие значения например...... вектор указывающий на 21 прерывание до загрузки резидента 7c10 a700 после загрузки резидента 1c01 f510 я просматривал память просмотровщиком памяти.. и в отладчике мотрел все эти значения есть... но при трассировке он место 1c01 f510 копировал другие значение в регистры... например 0b4a 23d3 в конце концов я решил просто запустить программу в надежде что она сработает и о странность она сработала значит отладчик чудит что ли---------------------- среда работы XP Proff SP1 NORTON 5.0 Rus TS 3.0 TD 5.0 TASM 5.0 ---------------------- | Код | .386 IDEAL MODEL TINY CODESEG ORG 100h
_start: jmp _init old_int09 dd 00 old_int21_ofs dw 0 old_int21_seg dw 0 init db 0 int21_active db 0 file db 'screen.txt',0 h_fil dw 0 key_word dw 0ffffh ;слово для проверки есть ли резидент в памяти proc int21h mov cs:int21_active,1 ;21 активен pushf ; call dword ptr cs:[old_int21_ofs] ; mov cs:int21_active,0 ;21 закончил работу retf 2 endp int21h proc int09h pushf push ax push dx push cx push es push si push di push bx push ds ;############################################################################# _beg: in al,60h ;зЁв Ґ¬ Ё§ Ї®ав бЄ Є®¤ Є« ўЁиЁ jmp e ;§ ¤Ґа¦Є ¤«п ба Ў влў Ёп ЇЇ а вгал e: cmp al,41 ;Ґв® `~ ?? jz _yes_ ;¤ jmp _restore ;Ґв _yes_: ; mov ax,0040h ; mov es,ax ; _e: ; mov al,byte ptr es:[018h] ;зЁв Ґ¬ б«®ў® б®бв®пЁҐ Є« ў test al,0000001b ;ctrl «Ґў п ¦ в jnz _end ;¤ jmp _restore ;Ґв _end: ;############################################################################# cmp cs:int21_active,1 ;ў¤а㣠㦥 ЇаҐалў ЁҐ ўлЇ®«пҐвбп je _yes ;¤ -----------> mov ax,cs ; mov ds,ax ; ; mov ah,3ch ;б®§¤ ¤Ё¬ д ©« xor cx,cx ;®Ўлзл© д ©« lea dx,cs:file ;в ¬ Ё¬п int 21h ;-----------> ; mov ah,3dh ;®вЄа®Ґ¬ д ©« mov al,02h ;¤«п § ЇЁбЁ lea dx,cs:file ;в ¬ Ё¬п д ©« int 21h ;-----------> mov cs:h_fil,ax ;б®еа Ё¬ ¤ҐбЄаЁЇв®а mov ax,0b800h ; ¤аҐб ўЁ¤Ґ®Ї ¬пвЁ ў ⥪бв®ў®¬ ०Ё¬Ґ 03 mov ds,ax ;ᥣ¬Ґв DS ўЁ¤Ґ®Ї ¬пвм xor dx,dx ;®в з « ўЁ¤Ґ®Ї ¬пвЁ
mov bx,cs:h_fil ;¤ҐбЄаЁЇв®а д ©« mov ah,40h ;дгЄжЁп § ЇЁбЁ mov cx,4000 ;4000 Ў ©в int 21h ;ЇЁиҐ¬ ---> ў¬Ґб⥠б вваЁЎгв ¬Ё mov ah,3eh mov bx,cs:h_fil int 21h _yes:
;############################################################################# _restore: pop ds pop bx pop di ;ў® - pop si ;бв - pop es ; - pop cx ; ў - pop dx ;«Ё - pop ax ;ў Ґ¬ ॣЁбвал popf ;Ё д« ЈЁ jmp dword ptr cs:[old_int09] ;ЇҐаҐе®¤ бв ал© ®Ўа Ў®взЁЄ endp int09h ; ; _init: cli ; xor eax,eax mov es,ax mov si,es:[84h] ;вот тут в отладчике он получал не те значения ;которые были в памяти табл вектор прерывания mov ax,es:[86h] ; mov es,ax ; mov ax,word ptr es:[si-2];читаем наше слово cmp ax,0ffffh ;если это оно то je _res_loadet ;ничего не делаем
xor eax,eax ; mov es,ax ;
mov eax,dword ptr es:[09h*4] ; mov old_int09,eax ; ;----------------------------------------------------------------- mov ax,es:[21h*4] mov old_int21_ofs,ax mov ax,es:[21h*4+2] mov old_int21_seg,ax ;----------------------------------------------------------------- mov word ptr es:[09h*4],offset int09h ; mov ax,cs ; mov word ptr es:[09h*4+2],ax ;----------------------------------------------------------------- mov word ptr es:[21h*4],offset int21h mov word ptr es:[21h*4+2],ax sti ; lea dx,str_help mov ah,09h int 21h lea dx,_init ; int 27h ; _res_loadet: lea dx,res_l mov ah,09h int 21h mov ax,4c00h int 21h ;########################################################################## ; AREA DATA No REZIDENT
str_help db 'Press Ctrl + ~ save screen to file screen.txt',10,13 db '(c) copyright Lonley 2005',10,13 db '[email protected]','$' res_l db 'Resident loadet','$'
end _start
|
--------------------
Земную жизнь пройдя до половины, Я очутился в сумрачном лесу, Утратив правый путь во тьме долины. Каков он был, о, как произнесу, Тот дикий лес, дремучий и грозящий,
|