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

Переключение видеостраниц при нажатии левой кнопки мыши

06.06.2017, 23:08. Показов 1186. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заполнить страницу видеопамяти символом xi ((x0 =’a’, x1 =’b’ и тд) с разными атрибутами на каждой странице. Обеспечить переключение видеостраниц при нажатии левой кнопки мыши.
Выполнить по такому примеру
Assembler
1
2
3
mov         ah, 01h ; ввести символ с клавиатуры
int     21h     ; вызов функции DOS 
jmp     exit
Как это сделать, я Ассемблер плохо понимаю? Помогите, знающие люди.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.06.2017, 23:08
Ответы с готовыми решениями:

Переключение видеостраниц при нажатии левой кнопки мыши
Доброе время суток, помогите в разработке следующей программы, заранее спасибо: 1. Заполнить i-ю страницу видеопамяти символом xi (x0...

Нажатием левой кнопки мыши выбирать и запоминать цвет, при нажатии правой кнопки мыши - устанавливать выбранный цвет
Люди добрые, киньте какой-нибудь рабочий .asm для masm, похожий на решение следующей задачи, а то мне год надо зубрить чтобы написать...

При нажатии левой кнопки мыши нарисовать белую точку
Вот задание на курсовую работу: В графическом режиме 320 на 200 точек на 256 цветов, обрабатывать сообщения от мышки (прерывание INT...

4
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
07.06.2017, 22:19
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
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
;Заполнить страницу видеопамяти символом xi ((x0 =’a’, x1 =’b’ и тд)
;с разными атрибутами на каждой странице. Обеспечить переключение
;видеостраниц при нажатии левой кнопки мыши.
LOCALS
 
.model small
 
.stack 100h
 
.data
        BufSize                         equ     80*25
        clBlue                          equ     01h
        clRed                           equ     04h
        clWhite                         equ     07h
        ;буфер экрана
        ScreenBuffer                    db      80*25 dup (?)
        ;сообщения программы
        CrLf                            db      0Dh, 0Ah, '$'
        msgPressAnyKey                  db      0Dh, 0Ah, 'Press any key to exit...', '$'
        msgErrorFileOpen                db      'File open error.', '$'
        msgErrorFileRead                db      'File read error.', '$'
        msgMouseFault                   db      'The mouse or mouse driver was not detected.', 13, 10, '$'
 
        ;Константы событий "мыши"
        MouseEvent_None                 equ     0000h   ;Удалить пользовательский обработчик
        MouseEvent_Move                 equ     0001h   ;любое перемещение
        MouseEvent_PressLeftButton      equ     0002h   ;нажатие левой кнопки
        MouseEvent_ReleaseLeftButton    equ     0004h   ;отпускание левой кнопки
        MouseEvent_PressRightButton     equ     0008h   ;нажатие правой кнопки
        MouseEvent_ReleaseRightButton   equ     0010h   ;отпускание правой кнопки
        MouseEvent_PressMiddleButton    equ     0020h   ;нажатие средней кнопки
        MouseEvent_ReleaseMiddleButton  equ     0040h   ;отпускание средней кнопки
 
        MouseInitOk                     equ     0FFFFh  ;инициализация мыши - успешна
        MouseInitFault                  equ     0000h   ;инициализация мыши - мышь или драйвер мыши не установлены
 
        MouseButtons_Any                equ     0000h   ;количество кнопок у мыши - отлично от 2 и 3
        MouseButtons_2                  equ     0002h   ;количество кнопок у мыши - 2
        MouseButtons_2_                 equ     0FFFFh  ;количество кнопок у мыши - 2
        MouseButtons_3                  equ     0003h   ;количество кнопок у мыши - 3
 
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;заполнение текста для видеостраниц
        mov     cx,     80*25
        lea     si,     ScreenBuffer
@@StartChar:
        mov     al,     'a'
@@FillBuffer:
        cmp     al,     'z'
        ja      @@StartChar
        mov     [si],   al
        inc     si
        inc     al
        loop    @@FillBuffer
        ;заполнение видеостраниц
        mov     cx,     4
@@FillPages:
        push    cx
        mov     ax,     1300h
        mov     bh,     cl
        dec     bh
        mov     bl,     cl
        mov     dx,     0000h
        lea     bp,     ds:ScreenBuffer
        push    ds
        pop     es
        mov     cx,     80*25-1
        int     10h
        pop     cx
        loop    @@FillPages
        ;попытка инициализации мыши
        call    MouseInit
        cmp     ax,     MouseInitOk
        je      @@MouseInitOk
        ;если инициализация не удалась - вывести сообщение
        ;и завершить программу
        mov     ah,     09h
        lea     dx,     msgMouseFault
        int     21h
        jmp     @@Exit
 
@@MouseInitOk:
        ;установить пользовательский обработчик событий "мыши"
        push    es
        mov     ax,     seg MyMouseHandler
        mov     es,     ax
        mov     dx,     offset  MyMouseHandler
        mov     cx,     MouseEvent_PressLeftButton
        call    MouseSetHandler
        pop     es
 
        call    MouseShowCursor
 
 
@@WaitKeyPressed:
        mov     ah,     00h
        int     16h
 
        ;завершение работы с "мышью"
        ;спрятать курсор
        call    MouseHideCursor
        ;удалить пользовательский обработчик прерывания
        mov     cx,     MouseEvent_None
        call    MouseSetHandler
 
        mov     ah,     0
        mov     al,     03h
        int     10h
 
@@Exit:
        ;завершение программы
        mov     ax,     4C00h
        int     21h
main    endp
 
;Инициализация работы с "мышью"
;Выполняется аппаратный и программный сброс мыши и драйвера
;вход
; - нет
;выход
;ax - результат инициализации
;   - 0000h, если мышь или драйвер мыши не установлены
;   - FFFFh, если драйвер и мышь установлены
;bx - число кнопок
;   - 0002 или FFFF - две
;   - 0003 - три
;   - 0000 - другое количество
MouseInit       proc
        mov     ax,     0000h
        int     33h
        ret
MouseInit       endp
 
;Показать курсор "мыши"
;вход
; - нет
;выход
; - нет
MouseShowCursor proc
        push    ax
        mov     ax,     0001h
        int     33h
        pop     ax
        ret
MouseShowCursor endp
 
;Спрятать курсор "мыши"
;вход
; - нет
;выход
; - нет
MouseHideCursor proc
        push    ax
        mov     ax,     0002h
        int     33h
        pop     ax
        ret
MouseHideCursor endp
 
;Определение курсора мыши в текстовом режиме
;вход
;BX = hardware/software text cursor
;     0000h software ( (char/attr AND CX) XOR DX)
;       CX = screen mask
;       DX = cursor mask
;     0001h hardware
;       CX = start scan line
;       DX = end scan line
;выход
; - нет
MouseDefineTextCursor   proc
        push    ax
        mov     ax,     000Ah
        int     33h
        pop     ax
        ret
MouseDefineTextCursor   endp
 
;Установить/удалить обработчик событий от "мыши"
;вход
;ES:DX = адрес обработчика
;СХ = условие вызова
;   бит 0 — любое перемещение мыши
;   бит 1 — нажатие левой кнопки
;   бит 2 — отпускание левой кнопки
;   бит 3 — нажатие правой кнопки
;   бит 4 — отпускание правой кнопки
;   бит 5 — нажатие средней кнопки
;   бит 6 — отпускание средней кнопки
;СХ = 0000h — отменить обработчик;выход
;выход
; - нет
MouseSetHandler proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    es
 
        mov     ax,     000Ch
        int     33h
 
        pop     es
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        ret
MouseSetHandler endp
 
;Обработчик событий "мыши"
;вход
;АХ содержит условие вызова,
;ВХ - состояние кнопок,
;СХ, DX - X- и Y-координаты курсора,
;SI, DI - счетчики последнего перемещения по горизонтали и вертикали
;      (единицы измерения для этих счетчиков - мики, 1/200 дюйма),
;DS - сегмент данных драйвера мыши.
;выход
; - нет
MyMouseHandler  proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
        push    es
 
        ;спрятать курсор
        call    MouseHideCursor
 
        ;получение информации о видеорежиме
        mov     ah,     0Fh
        int     10h
        ;изменение видеостраницы
        inc     bh
        and     bh,     011b
        mov     ah,     05h
        mov     al,     bh
        int     10h
        ;показать курсор
        call    MouseShowCursor
 
@@Exit:
        pop     es
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        retf
MyMouseHandler  endp
 
end     main
1
0 / 1 / 0
Регистрация: 02.07.2015
Сообщений: 263
29.06.2017, 22:16  [ТС]
Emu8086 указывает на ошибку (250)duplicate declaration of: @@EXIT
Что с этим делать?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
30.06.2017, 17:26
Ну и удалите эту строку.
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
03.07.2017, 11:15
sandy15, директива LOCALS указывает нормальным компиляторам, что имена меток начинающиеся с @@... в пределах логического блока proc . . . endp считаются локальными, т.е. в разных подпрограммах могут быть метки с одинаковыми именами.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2017, 11:15
Помогаю со студенческими работами здесь

При нажатии левой клавиши "мыши" отразить курсор в левой половине экрана, а при нажатии правой - в правой
При нажатии левой клавиши "мыши" отразить курсор в левой половине экрана, а при нажатии правой - в правой, использовав в случае...

Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши выключить индикатор NumLock(+Звук),при нажатие право
Не могу решить подскожите кто знает.(Ограничить передвижение курсора мыши левой нижней четвертью экрана.При нажатие левой клавиши мыши...

Вывод и удаление символа в координатах курсора мыши при нажатии на кнопки мыши
У меня есть вот такая задача: ПРи нажатии правой кнопки мыши обеспечить вывод на монитор по координатах x y курсора некторого символа ,...

Изменение курсора мыши при нажатии на кнопки мыши
Здравствуй. Задача сделать программу работы с мышью, отображение курсоров мыши. Суть такая запускаем программу отображается курсор, при...

Работа с мышью: вывести квадрат нажатием левой кнопки мыши и спрятать его нажатием правой кнопки мыши
Ребят обьясните как вывести квадрат левым нажатием кнопки мыши и спрятав его правым нажатием кнопки мыши. Вот набросок кода ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru