0 / 0 / 0
Регистрация: 31.01.2022
Сообщений: 1
1

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

12.06.2022, 18:09. Показов 924. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Заполнить 0-ю страницу видеопамяти любым текстом. По нажатию на правую кнопку мышки
содержимое левой и правой части экрана меняются местами.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.06.2022, 18:09
Ответы с готовыми решениями:

При нажатии на правую кнопку мышки содержание левой и правой части экрана меняются местами
.386 CODE SEGMENT use16 ASSUME CS:CODE _start: mov AX, 3 int 10h mov BX, ...

При нажатии на правую кнопку мышки, содержимое чётных и нечётных столбцов экрана обменять местами.
Задание: Заполнить 0-ю страницу видеопамяти любым текстом. При нажатии на правую кнопку мышки...

При нажатии на правую кнопку мышки, содержимое чётных и нечётных столбцов экрана обменять местами
Доброго времени суток! Есть задача: 1) заполнит 0-ю страницу видеопамяти произвольным текстом...

Нажимая на левую кнопку мышки очистить нечетные колонки экрана, а при нажатии на правую кнопку - чётные колонки экрана
Задание: Заполнить 0-ю страницу видеопамяти произвольным текстом. Нажимая на левую кнопку мышки...

1
Модератор
Эксперт по электронике
8475 / 4334 / 1642
Регистрация: 01.02.2015
Сообщений: 13,455
Записей в блоге: 8
12.06.2022, 19:15 2
Лучший ответ Сообщение было отмечено fRav3n как решение

Решение

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

Добавлено через 1 час 0 минут
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
;Заполнить 0-ю страницу видеопамяти произвольным текстом.
;По нажатию на правую кнопку мышки содержимое левой и правой части экрана меняются местами.
 
.model small
 
.stack 100h
 
.data
        ;коды клавиш
        KeyCode_Esc                     equ     1Bh     ;Esc
 
        ;Константы событий "мыши" для пользовательского обработчика
        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   ;отпускание средней кнопки
        ;результат инициализации мыши (ax=0000h int 33h)
        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
 
        ;сообщения программы
        msgMouseFault                   db      "The mouse or mouse driver was not detected.", 13, 10, '$'
        msgAbout                        db      0Dh, 0Ah, "By clicking on the right mouse button, the "
                                        db      "contents of the left and right parts of the screen "
                                        db      "change places.", '$'
        msgPressEsc                     db      0Dh, 0Ah, 0Dh, 0Ah, "Press ESC to exit...", '$'
.code
 
;--------------------------------------------------------------------------------
; макросы, для справки по параметрам и для именования функций работы с мышью
;--------------------------------------------------------------------------------
 
;Ожидание нажатия клавиши на клавиатуре
;вход
; - нет
;выход
;ax - al - ASCII код нажатой клавиши, ah - скан-код
ReadKey         macro
        mov     ah,     00h
        int     16h
endm
 
;Инициализация работы с "мышью"
;Выполняется аппаратный и программный сброс мыши и драйвера
;вход
; - нет
;выход
;ax - результат инициализации
;   - 0000h, если мышь или драйвер мыши не установлены
;   - FFFFh, если драйвер и мышь установлены
;bx - число кнопок
;   - 0002 или FFFF - две
;   - 0003 - три
;   - 0000 - другое количество
MouseInit       macro
        mov     ax,     0000h
        int     33h
endm
 
;Показать курсор "мыши"
;вход
; - нет
;выход
; - нет
MouseShowCursor macro
        mov     ax,     0001h
        int     33h
endm
 
;Спрятать курсор "мыши"
;вход
; - нет
;выход
; - нет
MouseHideCursor macro
        mov     ax,     0002h
        int     33h
endm
 
;Определение курсора мыши в текстовом режиме
;вход
;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   macro   CursorType, ScreenMask, CursorMask
        mov     ax,     000Ah
        mov     bx,     CursorType
        mov     cx,     ScreenMask
        mov     dx,     CursorMask
        int     33h
endm
 
;Установить/удалить обработчик событий от "мыши"
;вход
;ES:DX = адрес обработчика
;СХ = условие вызова
;   бит 0 — любое перемещение мыши
;   бит 1 — нажатие левой кнопки
;   бит 2 — отпускание левой кнопки
;   бит 3 — нажатие правой кнопки
;   бит 4 — отпускание правой кнопки
;   бит 5 — нажатие средней кнопки
;   бит 6 — отпускание средней кнопки
;СХ = 0000h — отменить обработчик;выход
;выход
; - нет
MouseSetHandler macro   Conditions, lpHandler
        mov     ax,     seg MyMouseHandler
        mov     es,     ax
        mov     cx,     Conditions
        mov     dx,     offset lpHandler
        mov     ax,     000Ch
        int     33h
endm
MouseRemoveHandler      macro
        mov     ax,     000Ch
        mov     cx,     MouseEvent_None
        int     33h
endm
 
;Обработчик событий "мыши"
;вход
;АХ содержит условие вызова,
;ВХ - состояние кнопок,
;СХ, DX - X- и Y-координаты курсора,
;SI, DI - счетчики последнего перемещения по горизонтали и вертикали
;      (единицы измерения для этих счетчиков - мики, 1/200 дюйма),
;DS - сегмент данных драйвера мыши.
;выход
; - нет
MyMouseHandler  proc
        push    ax
        push    bx
        push    cx
        push    dx
        push    si
        push    di
        push    ds
        ;спрятать курсор мыши
        MouseHideCursor
        ;настройка сегментных регистров
        mov     ax,     0B800h
        mov     ds,     ax
        xor     si,     si
        mov     di,     40*2
        mov     cx,     25
        @@forRow:
                push    cx
                mov     cx,     40
                @@forColumn:
                        mov     ax,     [si]
                        mov     bx,     [di]
                        mov     [si],   bx
                        mov     [di],   ax
                        add     si,     2
                        add     di,     2
                loop    @@forColumn
                add     si,     40*2
                add     di,     40*2
                pop     cx
        loop    @@forRow
        ;показать курсор
        MouseShowCursor
        pop     ds
        pop     di
        pop     si
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        retf
MyMouseHandler  endp
 
;Заполнение экрана символами
FillScreen      proc
        mov     ax,     0B800h
        mov     es,     ax
        xor     di,     di
        mov     ah,     30h     ;цвет
        mov     al,     'A'     ;символ
        mov     cx,     25*80   ;количество знакомест на экране
        @@ForFill:
                and     ah,     77h
                stosw                   ;записываем символ и его атрибут (цвета)
                                        ;переходим к следующему адресу символа на экране
                add     ax,     1101h   ;изменяем цвет и номер выводимого символа
                cmp     al,     'Z'
                jbe     @@Skip
                mov     al,     'A'
                add     ah,     11h
                @@Skip:
        loop    @@ForFill
        ret
FillScreen      endp
 
;основная программа
main            proc
        mov     ax,     @data
        mov     ds,     ax
        ;попытка инициализации мыши
        MouseInit
        cmp     ax,     MouseInitOk
        je      @@MouseInitOk
        ;если инициализация не удалась - вывести сообщение
        ;и завершить программу
        mov     ah,     09h
        lea     dx,     [msgMouseFault]
        int     21h
        jmp     @@Exit
 
@@MouseInitOk:
        ;заполнение экрана
        call    FillScreen
        mov     ah,     09h
        lea     dx,     [msgAbout]
        int     21h
        mov     ah,     09h
        lea     dx,     [msgPressEsc]
        int     21h
        ;установить курсор
        MouseDefineTextCursor   0, 0FFFFh, 0FF00h
        ;установить пользовательский обработчик событий "мыши"
        MouseSetHandler <MouseEvent_PressRightButton>, <MyMouseHandler>
        ;показать курсор
        MouseShowCursor        ;цикл ожидания нажатия кнопки ESC
        ;в цикле проверяется работа обработчика мыши
        @@WaitEscapePressed:
                ReadKey
                cmp     al,     KeyCode_Esc
        jne     @@WaitEscapePressed
        ;завершение работы с "мышью"
        ;- спрятать курсор
        MouseHideCursor
        ;- удалить пользовательский обработчик прерывания
        MouseRemoveHandler
 
@@Exit:
        mov     ax,     4C00h
        int     21h
main            endp
 
end     main
1
12.06.2022, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.06.2022, 19:15
Помогаю со студенческими работами здесь

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

Скрытие и показ фрейма в левой части экрана по нажатии на кнопку
Здравствуйте, уважаемые форумчане! Помогите, пожалуйста, реализовать одну вещь. Нужно, как написано...

При нажатии на кнопку «Поменять» элементы таблиц меняются местами
9. Создайте приложение с двумя таблицами 4х4. Таблицы заполняются строчными латинскими буквами (по...

Заполнить 0-ю страницу видеопамяти произвольным текстом. Нажатием на левую кнопку мышки очистить правую половину экрана
Заполнить 0-ю страницу видеопамяти произвольным текстом. Нажатием на левую кнопку мыши очистить...

Составить программу, предусматривающую контрольный вывод исходных данных в окно на левой части экрана и вывод результатов в окно на правой части экран
Составить программу, предусматривающую контрольный вывод исходных данных в окно на левой части...

Определить суммы цифр левой и правой части числа, если они не равны, поменять их местами
Здравствуйте, есть задание: Ввести целое число в пределе от 1 до 10000000 и определить суммы цифр...

Вывести максимальный элемент строки при нажатии левой кнопки мыши, а при нажатии правой - минимальный элемент
Очень нужно помощь! Нужно вывести максимальный элемент строки при нажатии левой кнопки мыши, а при...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru