Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

проблемы с перехватом Int 5h

316
01 июля 2009 года
Alm3n
889 / / 29.05.2009
Пытался заменить вектор 5го прерывания.на PrintScreen у меня было установленно свое действие,но вектор почему то не менялся,а может и менялся,я в сегменте биос не смотрел,менял через 25ю функцию 21го прерывания.когда запускал программу и нажимал клавишу то происходил именно PrintScreen,тоесть изображение сохранялось в буфер,а не выполнялась моя подпрограмма.То же самое,но для 1Ch работало нормально,да и на другие клавиши,если через буффер клавиотуры.Почему так?Все это проделывалось на TASM'е.
18K
02 июля 2009 года
logree
102 / / 27.09.2008
Цитата:
К сожалению все гадалки в отпуске.


Код пожалуйста.

А вообще ручная работа самый верный способ, почитай
Калашников - Ассемблерo Это просто! Учимся программировать, Глава 10,пункт 3.1, там всё ясно написанно(даже у меня получилось :) ).

274
02 июля 2009 года
Lone Wolf
1.3K / / 26.11.2006
а под какой осью перехватываешь?
316
02 июля 2009 года
Alm3n
889 / / 29.05.2009
Код:
data segment
cur_attr db 14
OLD_CS  dw  ?  
OLD_IP  dw  ?  
data ends
code segment
assume cs:code,ds:data
NEW_5h proc far
push es
push ax
push bx
mov cx,290
mov ax, 0B800h 
mov es, ax 
xor ax,ax
xor bx,bx
inc bx
add cur_attr,1
cmp cur_attr,16
jne cycle3
mov cur_attr,0
cycle3:
mov ah, cur_attr   
mov byte ptr es:[bx], ah       
inc bx
inc bx
loop cycle3
pop bx
pop ax
pop es
iret
NEW_5h endp
CLS     proc        near
push    cx 
push    ax 
push    si 
xor si, si 
mov ah, 7  
mov cx, 2000
CL1:    mov es:[si], ax
inc si     
inc si     
loop    CL1
pop si     
pop ax     
pop cx     
ret
CLS endp   
begin:
mov ax,data
mov ds,ax  
mov ah, 35h    
mov al, 5h
int 21h
mov OLD_IP, bx
mov OLD_CS, es
mov ah, 25h
mov al, 5h
push ds
mov dx, offset NEW_5h
mov bx,seg New_5h
mov ds, bx
int 21h        
pop ds     
mov ax, 0B800h 
mov es, ax     
call    CLS
xor si,si
xor bx,bx
mov cx,290
cycle1:mov al,ds:[si+40]   
mov ah, 14 
mov es:[bx], ax    
inc bx
inc bx
inc si
loop cycle1
mov ax,data
mov ds,ax
mov es,ax
mov ax, 40h    
mov es, ax     
cycle2:mov  ax, es:[1ch]   
mov bx, es:[1ah]   
cmp bx , ax        
jz cycle2
ext:push ds
xor ax,ax
mov ah,25h
mov al, 5h
mov dx,OLD_IP
mov bx,OLD_CS
mov ds, bx
int 21h        
pop ds 
xor ax,ax
mov ax, 4c00h  
int 21h
code ends
end begin


Под Windows XP.
349
02 июля 2009 года
Phantom-84
656 / / 27.10.2005
Думаю, в обработчике лучше сохранять все используемые регистры.
316
02 июля 2009 года
Alm3n
889 / / 29.05.2009
Цитата: Phantom-84
Думаю, в обработчике лучше сохранять все используемые регистры.


Пробовал,не помогло.Думаю дело в каких то премудростях винды или транслятора.С другим прерыванием ведь работает.Да и процедура рабочая.

18K
03 июля 2009 года
logree
102 / / 27.09.2008
Я конечно понимаю что винда его программу скорее всего запускает под V86 но разве она разрешит замену обработчика?
261
03 июля 2009 года
ahilles
1.5K / / 03.11.2005
Винда (WinNT) запускает DOS-приложения под вирутальной машиной (процесс NTVDM.EXE), так вот даже если обработчик заменён правильно и всё нормально работает, то при нажатии на клавишу PrintScreen винда просто-напросто не вызывает этот обработчик в вирутальной машине.
316
03 июля 2009 года
Alm3n
889 / / 29.05.2009
Цитата: ahilles
просто-напросто не вызывает этот обработчик в вирутальной машине.


И как этот печальный факт можно обойти?Используя только ТАСМ.

274
03 июля 2009 года
Lone Wolf
1.3K / / 26.11.2006
На NT - никак.. покрайней мере, когда я писал лабы по асму, бутался с реаниматора под досом и наслаждался.
18K
03 июля 2009 года
logree
102 / / 27.09.2008
Ну если ты просто изучаешь ASM тогда ставь VMware или БОш а на них DOS там можно всё, а если что-то пишешь, то наверное придёться разбираться с WinAPI, но обработчик прерывания ты всёравно не заменишь.
399
03 июля 2009 года
KIV
432 / / 20.01.2009
В свойствах DOS приложения есть флажок разрешающий использование PrintScreen в DOS программе. Так же можно разрешить и некоторые другие комбинации клавиш (например, Ctrl + Esc). А вот программно разрешить думаю не получится.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог