Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2023, 10:40   #1
YaLubluMamu
Пользователь
 
Регистрация: 22.10.2022
Сообщений: 37
По умолчанию Программирование манипулятора "мышь"

Задание: Перевод курсора мыши в левый верхний угол экрана после нажатия на
ее левую клавишу и в правый нижний угол экрана после нажатия правой
клавиши мыши. Помогите, пожалуйста, исправить код, чтоб выполнялось задание
Код:
; --------------------------------------------------------
yulya segment para 'code'
assume cs:yulya, ds:yulya,es:yulya,ss:yulya
org 100h
begin: jmp main
;----------------------------------------------------------
; выделение и инициализация ячеек оперативной памяти
s db 'Kolichestvo klavish myshi = $'
nr db ?
s0 db 13,10,'Ustanovlen sleduyushchiy tip myshi:',13,10,'$'
s1 db '1 - Bus Mouse',13,10,'$'
s2 db '2 - Serial Mouse',13,10,'$'
s3 db '3 - Inport Mouse',13,10,'$'
s4 db '4 - PS/2 Mouse',13,10,'$'
s5 db '5 - HP Mouse',13,10,'$'
X1 dw ?
Y1 dw ?
MN db 8
s_k db 5 DUP(?)
; ---------------------------------------------------------
main proc near
; ******** код лабораторной работы **********************
; получение текущего видеорежима
	mov ah,0fh
	int 10h
	mov nr,al ; nr - номер режима
; инициализация мыши
	mov ax,0000h
	int 33h
; вывод количества клавиш мыши
	mov ah,09
	lea dx,s
	int 21h
	mov ah,02
	mov dl,bl
	add dl,48
	int 21h
; Получение информации о типе мыши ***************
	mov ah,09
	lea dx,s0
	int 21h
	mov ax,0024h
	int 33h
; вывод информации о типе мыши ***************
	cmp ch,1
	jne @z2
	; 1 тип
	mov ah,09
	lea dx,s1
	int 21h
	jmp @z100
@z2: cmp ch,2
	jne @z3
; 2 тип
	mov ah,09
	lea dx,s2
	int 21h
	jmp @z100
@z3: cmp ch,3
	jne @z4
; 3 тип
	mov ah,09
	lea dx,s3
	int 21h
	jmp @z100
@z4: cmp ch,4
	jne @z5
; 4 тип
	mov ah,09
	lea dx,s4
	int 21h
	jmp @z100
@z5: cmp ch,5
	jne @z100
; 5 тип
	mov ah,09
	lea dx,s5
	int 21h
@z100:
; ожидание нажатия любой клавиши
	mov ah,0 ; получаем номер клавиши
	int 16h
; выключить курсор
	mov ah,01
	mov ch,20h
	int 10h
; включить курсор мыши
	mov ax,0001
	int 33h
	looping:
; получить координаты курсора мыши
	mov ax,0003
	int 33h
	test bx,00000001b ; левая кнопка мыши
	jne @to_upper_left
	test bx,00000010b ; правая кнопка мыши
	jne @to_bottom_right
	jmp @continue_looping
@to_upper_left:
; Перевод курсора в верхний левый угол экрана
	mov ah,02
	mov bh,00
	mov dh,00
	mov dl,00
	int 10h
	jmp @continue_looping

@to_bottom_right:
; Перевод курсора в правый нижний угол экрана
	mov ah,02
	mov bh,00
	mov dh,24
	mov dl,79
	int 10h
	jmp @continue_looping

@continue_looping:
; возврат к началу цикла
	jmp looping
; *********************************************************
; *********************************************************
; выход из программы
exit_program:
	mov ah, 4ch
	int 21h

main endp
end begin
YaLubluMamu вне форума Ответить с цитированием
Старый 04.05.2023, 10:50   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от YaLubluMamu Посмотреть сообщение
Код:
@to_upper_left:
; Перевод курсора в верхний левый угол экрана
	mov ah,02
	mov bh,00
	mov dh,00
	mov dl,00
	int 10h
	jmp @continue_looping

@to_bottom_right:
; Перевод курсора в правый нижний угол экрана
	mov ah,02
	mov bh,00
	mov dh,24
	mov dl,79
	int 10h
	jmp @continue_looping
Вот тут вы двигаете текстовый курсор, хотя перед циклом сделали следующее (см. комментарий)
Цитата:
Сообщение от YaLubluMamu Посмотреть сообщение
Код:
; выключить курсор
	mov ah,01
	mov ch,20h
	int 10h
Я так понимаю, что вам надо заменить эти функции на AH=4/INT 33h (CX:DX = позиция курсора)
Устанавливать курсор мыши в эти крайние положения.

ADD: И перед выходом из программы очень хорошо бы включить текстовый курсор и выключить курсор мыши. Иначе последующие программы могут перестать правильно работать или работа с ними будет затруднена.

Последний раз редактировалось macomics; 04.05.2023 в 10:53.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо написать "таймер", который будет запускаться при нажатии кнопки "Start", приостанавливаться на "Pause", и сбрасываться на "Reset" billiejean78 JavaScript, Ajax 1 03.09.2021 08:58
Новый подраздел "Linux Kernel" в "Низкоуровневое программирование" ZenBooster О форуме и сайтах клуба 4 02.10.2019 19:09
Убрать папки "Pictures", "Music", "Видео", "Downloads" из "МОЙ КОМПЬЮТЕР" Бахтиёр1916 Windows 1 05.04.2017 12:53
Нужно пояснить/прокомментировать код программы, или коды функций "Добавить" "Удалить" "Обновить(редактировать" "Поиск" "Период") ZIRASS PHP 4 15.06.2016 14:23
Для заданной строки определить все входящие в неё символ. Например: строка "abccbbabbac" состоит из символов "a", "b" и "c" Sandakan01 Помощь студентам 1 24.02.2016 03:20