Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
teufel
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 2
1

Обработчик прерываний

16.01.2014, 22:45. Просмотров 1515. Ответов 3
Метки нет (Все метки)

Необходимо сделать так, чтобы каждое второе нажатие игнорировалось. Почему то этого не происходит. Помогите кто может, очень срочно надо
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
.model small
.stack 100h
.code
.186 
start:
    jmp init
    
int09h_handler proc  far
    jmp work
    
    old_int09h dd 0
 
work:
    pusha
    push ds
    push es
 
    pushf
    mov ax, cs:trigger
    not ax
    mov trigger, ax
    cmp ax, 0
    je label12
    call dword ptr cs:old_int09h
label12:
    cld
    push 0B800h
    pop es
    push 0040h
    pop ds
    
    
    mov di, word ptr ds:001Ah
 
    cmp di, word ptr ds:001Ch
    je exit_09handler
 
    mov ax,word ptr [di]
    
exit_09handler:
    pop es
    pop ds
    popa
    iret
int09h_handler  endp
 
int21h_handler proc far
    cmp ax, 7200h
    jne default21h
    mov ah, 123
    iret
    default21h:
        jmp cs:old_int21h
    old_int21h dd 0
int21h_handler  endp    
 
init proc
    ;check if handler has already installed
    mov ah, 72h
    int 21h
    cmp ah, 123
    je installed 
    ;if not installed
    ;install 09h handler
    push cs
    pop ds 
    mov ax, 3509h                   
    int 21h
    mov word ptr old_int09h,  bx     
    mov word ptr old_int09h + 2,  es 
    mov ax, 2509h 
    mov dx, offset int09h_handler
    int 21h
    ;install 21h handler
    mov ax, 3521h                   
    int 21h
    mov word ptr old_int21h,  bx     
    mov word ptr old_int21h + 2,  es 
    mov ax, 2521h 
    mov dx, offset int21h_handler
    int 21h
    ;print message
    mov ax, @data
    mov ds, ax
    lea dx, msg_ready
    mov ah, 9
    int 21h
    ;keep code in memory
    mov dx, (init - start + 10Fh)/16
    mov ax, 3100h
    int 21h
;===================================
    ;if handler already installed
    installed:
    cmp byte ptr ds:[80h], 3
    jne print_already
    cmp byte ptr ds:[82h], '\'
    jne print_already
    cmp byte ptr ds:[83h], 'q'
    jne print_already
    ;delete handlers
    mov ax, 3509h
    int 21h
    cli
    mov dx, word ptr es:old_int09h + 2
    mov ds, dx
    mov dx, word ptr es:old_int09h
    mov ah, 25h
    int 21h
    mov al, 21h
    mov dx, word ptr es:old_int21h + 2 
    mov ds, dx
    mov dx, word ptr es:old_int21h
    int 21h 
    sti
    mov ah, 49h
    int 21h
    jmp print_deleted
;=======================
    print_already:
    mov ax, @data
    mov ds, ax
    lea dx, msg_already
    mov ah, 9h
    int 21h
    mov ax, 4C00h
    int 21h
    
    print_deleted:
    mov ax, @data
    mov ds, ax
    lea dx, msg_deleted
    mov ah, 9h
    int 21h
    mov ax, 4C00h
    int 21h
init endp   
.data
    trigger dw 1
    msg_ready db "Resident is in the memory", 24h
    msg_already db "Resident already is in the memory", 24h
    msg_deleted db "Resident deleted from memory", 24h
end start
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 22:45
Ответы с готовыми решениями:

Обработчик прерываний
Задача: написать обработчик прерываний, заменяющий вектор прерывания от часов (1СН) и выводящий на...

обработчик прерываний
вообщем создал код обработчика прерываний,который должен менять последнюю строку 10-ю разными...

обработчик прерываний
Скопировал обработчик прерывания с Калашникова, а он не работает. В чом проблема??? (работаю в выне)

Написать обработчик прерываний.
Здраствуйте, меня интересует как написать свой обработчик прерываний? может где нить есть туториал...

Обработчик прерываний пользователя
Доброго времени суток! Помогите пожалуйста с вопросом,мне дали задание написать программу которая...

3
Charles Kludge
Клюг
7655 / 3170 / 383
Регистрация: 03.05.2011
Сообщений: 8,381
17.01.2014, 00:02 2
Цитата Сообщение от teufel Посмотреть сообщение
call dword ptr cs:old_int09h
Стр. 24 - а не jmp far ptr cs:old_int09h ?
0
teufel
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 2
17.01.2014, 00:09  [ТС] 3
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Стр. 24 - а не jmp far ptr cs:old_int09h ?
нет, не помогло
0
Ethereal
5130 / 2347 / 317
Регистрация: 17.02.2013
Сообщений: 3,391
17.01.2014, 10:30 4
Нет, здесь имелся ввиду именно call dword ptr cs:old_int09h. Да только с использованием стека ошибка. Если call dword ptr cs:old_int09h выполняется, то флаги помещенные в стек по pushf идут в дело, а если call dword ptr cs:old_int09h обходится прыжком на label12, то эти флаги в стеке оказываются ни к селу ни к городу и возврат по iret происходит черте куда.

Добавлено через 1 минуту
pushf из 18-й строки переставь, чтобы он стоял непосредственно перед call dword ptr cs:old_int09h

Добавлено через 3 минуты
И еще - если аппаратное прерывание от клавиатуры ты не передаешь на обработку BIOS-у и решаешь сам его обработать, то значит надо обработать. Контроллеру прерываний нужно сказать, что прерывание обработано, чтобы он снял запрос. В порты ввода-вывода кое-что запихать.
1
17.01.2014, 10:30
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2014, 10:30

Обработчик прерываний таймера
Нужно сделать обработчик прерываний таймера, который после установки каждые 10 секунд будет...

обработчик прерываний. циклическая замена пробела
имеется обработчик int 9hно он не работает точнее он работает, но не так как надо. прога должна...

Дизассемблировать Обработчик прерываний Bios для клавиатуры
В университете задали задание вытащить программу базового обработчика прерываний BIOS для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.