Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 18.06.2017
Сообщений: 1

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

18.06.2017, 10:40. Показов 2800. Ответов 1

Студворк — интернет-сервис помощи студентам
Добрый день.
Задан курсовик-игра с щёлканьем мыши по появляющимся в рандомном месте квадратам.
Проблема в том, что в обработчик прерывания не передаются координаты границ квадрата.
Каким образом можно их в него передать?

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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
SSEG segment stack
   db 256 dup(?)
SSEG ends
 
DSEG segment
        sqx1 dw ?
        sqy1 dw ?
        sqx2 dw ?
        sqy2 dw ?
        sqarea dw 0
DSEG ends
 
CSEG segment
        .186
       
        assume cs: CSEG, es: DSEG, ss: SSEG
begin:
        mov ax, DSEG
        mov es, ax
 
        mov ah, 0
        mov al, 12h ; 640x480x16
        int 10h
 
        mov cx, 14
new_square:         ; add new points and label
        push cx
        call points
        
        mov al, 01h ; color changer  
        add ax, cx
        call render_square
        call print_square_area
        
      
        ; need to add mouse handler
        mov ax, 0h ; initialization
        int 33h
 
        mov ax, 1h ; show cursor
        int 33h
        
        mov ax,0Ch
        mov cx, 10b
        push cs
        pop es
        mov dx, offset handler          ;;;;;;
        int 33h
       
        mov ah,0h 
        int 16h   
        
        mov ax, 000Ch
        mov cx, 0000h
        int 33h
         
        call clrscr
      
        pop cx
loop new_square
         
        mov ax, 1h ; show cursor
        int 33h
        
        ;mov ax, 000Ch
        ;mov cx, 0000h
        ;int 33h
   
        mov ah, 4ch
        int 21h
 
render_square proc near
  
        mov si, sqx2
        mov dx, sqy1
        mov di, sqy2
 
        render_hor_line:
                mov cx, sqx1
                call hor_line
                inc dx
                cmp dx, di
                jle render_hor_line
                
        retn
render_square endp
 
; cx - start x
; si - end x
; dx - y
; al - color
hor_line proc near 
  __hor_line:
        call pixel
        inc cx
        cmp cx, si
        jle __hor_line
 
  retn
hor_line endp
 
; cx - x
; dx - y
; al - color
pixel proc near
    mov ah, 0Ch
    mov bh, 0
    int 10h
 
retn
pixel endp      
 
print_square_area proc near
        mov bx, sqx1
        mov ax, sqx2
        sub ax, bx
        mul ax
        mov sqarea, ax
 
        mov dl, 38 ; cursor x
        mov dh, 17 ; cursor y
        mov bh, 00h
        mov ah, 02h
        int 10h
 
retn
print_square_area endp
 
 
 
random_number proc near
        push dx
        mov ax, word ptr cs:seed
        mov dx, 8E45h
        mul dx
        inc ax
        mov cs:word ptr seed,ax
        shr ax,7
        pop dx
retn
random_number endp
 
points proc near
 
call random_number        ; random number
        mov bx, ax
        cmp bx, 589d
        jl k 
        mov ax, 589d
     k:   
        mov sqx1,ax
        mov sqx2,ax
        add sqx2,50
        
        call random_number
        mov bx, ax
        cmp bx, 429d
        jl p 
        mov ax, 429d
     p:   
        mov sqy1,ax
        mov sqy2,ax
        add sqy2,50 
        
 
retn
points endp
 
 
handler proc far 
        push 0A00Ch
        pop es
        push cs
        pop ds
        push cx
        push dx
        
        
        mov ax, sqx1 
        cmp ax,cx 
        jg no 
 
        mov ax, sqx2 
        cmp ax, cx 
        jl no 
 
        mov ax, sqy1 
        cmp ax,dx 
        jg no 
 
        mov ax, sqx2 
        cmp ax,dx 
        jl no 
 
        jmp next
 
no: 
        mov ah, 0
        mov al, 10h ; 640x480x16
        int 10h
        
    next:
        
        pop dx
        pop cx
            
        retf
handler endp
 
clrscr proc
        mov ax,0600h ; clear scr
        mov cx,00h
        mov dx,386Fh
        int 10h
retn        
clrscr endp
        
        seed:
         food_at equ seed+2
    
CSEG ends                                                                                                                                                                                                                                                                                
end begin
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.06.2017, 10:40
Ответы с готовыми решениями:

Masm Обработка стандартных прерываний
Со сдачей затянул,сейчас надо срочно сдать. С ассемблером почти не знаком (полный нуб), изучать сейчас времени нет. заранее спасибо) ...

Обработка прерываний: замена клавиш на цифры
Здравствуйте. Хочу я, значит, в резидентной программе по обработке прерывания от клавиатуры, что бы осуществлялась последовательная замена...

Обработка прерываний при выполнении инструкции BOUND
Доброго времени суток. Задача: Задан массив и границы некоторой области памяти. Необхо- димо преобразовать массив следующим...

1
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4491 / 1669
Регистрация: 01.02.2015
Сообщений: 13,899
Записей в блоге: 12
18.06.2017, 11:01
В пользовательском обработчике прерывания мыши настроить заново сегмент данных и обратиться к глобальной переменной с границами квадрата.

Пример Управление манипулятором мышь - изменение формы курсора в зависимости от координат. показывает обращение к глобальной переменной из пользовательского обработчика мыши.

Добавлено через 4 минуты
Кроме того, пользовательский обработчик прерывания мыши ОБЯЗАН сохранять контекст (содержимое регистров и флагов) иначе ход основной программы будет непредсказуемым.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.06.2017, 11:01
Помогаю со студенческими работами здесь

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

Обработка программных прерываний...
Всем привет! выполняем лабораторные работы на MASMe, преподаватель дал задание, уже второй день не могу его расшифровать, если кто-нибудь...

Перевод процессора в защищённый режим и обработка прерываний от таймера
Всем доброго времени суток. Дали лабу: Перевести процессор в защищённый режим и обработать прерывания от таймера. С переводом вроде как...

Подключение мыши с помощью прерываний 0х33 - горячие клавиши
Здравствуйте! Я пишу 16 разрядное приложение под ДОС на чистом С с ассемблерными вставками. Делаю графический интерфейс. Ну кто-нибудь...

Обработка прерываний
Доброго времени суток. Пытаюсь выполнить пример программы с использованием прерывания, взятый из справки Borland C++. #include...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru