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

Вывод координат мыши на экран

03.06.2019, 15:55. Показов 4400. Ответов 8

Студворк — интернет-сервис помощи студентам
Задача в названии, на emu8086 нужно сделать вывод координат мыши в консоль или куда-то еще
Нашел рабочий код, но у меня он на эмуляторе 8086 не запускается. Я так понял, он для масма, а это другая степь
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
;masm dos com #
;при нажатии левой кнопки мышки выводятся координаты места где было нажатие.
.286
.model tiny
.code
org 100h
start:  mov ax,3;текстовый режим 80х25 символов, если учесть размер символа
    int 10h;8х8 соответствует графическому режиму 640х200
    mov dx,offset string1;выводим сообщение как выйти из программы
    mov ah,9
    int 21h
    mov ax,0;Функция 00h предназначена для выяснения, загружен ли в память 
    int 33h;драйвер мыши. Если эта функция возвращает AX = 0, то драйвер 
    test ax,ax;отсутствует. Если драйвер загружен, то AX = 0FFFFh , а в 
    jz exit;регистре BX - число кнопок мыши
    mov ax,0Ch;Функция 0Ch позволяет программно задать реакцию на события 
    push cs;связанные с мышью: ее перемещения, нажатие и отпускание кнопок. 
    pop es;События, на которые необходимо реагировать, должны быть отмечены 
    mov cx,2;единицами в соответствующих разрядах регистра CX. CX=2 - вызвать подпрограмму, 
    mov dx,offset mouse;если левая клавиша отпущена. После выполнения этой 
        int 33h;функции драйвер мыши на каждое из заданных событий будет 
;реагировать вызовом обработчика событий - подпрограммы, FAR-указатель на адрес 
;которой был указан в регистрах ES:DX
    mov ax,1;Функция 01h включает изображение курсора мыши на экране.
        int 33h
    xor ax,ax;ждем пока не нажмут на клавиатуру
    int 16h
exit:   int 20h;завершаем программу
mouse proc far
    push cs
    pop ds
    push 0B800h
    pop es
    mov ax,cx;в CX и DX - координаты курсора
    mov di,dx;в DI будут координаты надписи
    shl di,2;di=dx*4
    add di,dx;di=dx*5
    shl di,2;di=dx*20
    shr cx,2
    add di,cx;di=dx*20+cx/4
    mov bl,10
    div bl
    or ah,30h
    mov string[4],ah
    aam
    add ax,3030h
    mov string[2],ah
        mov string[3],al
    mov ax,dx
    div bl
    or ah,30h
    mov string[10],ah
    aam
    add ax,3030h
    mov string[8],ah
        mov string[9],al
    mov ax,3;стираем с экрана предыдущую надпись
    int 10h
    mov si,offset string
    mov cx,string1-string;длина надписи
    mov ah,0Fh;аттрибуты надписи (белое на черном)
@@: lodsb
    stosw;выводим координаты на экран в заданную позицию
    loop @b
    retf
mouse endp
string db "x=    y=   "
string1 db "для выхода из программы нажмите на Esc$"
end start
Как реализовать подобное на emu8086?
Я новичок в этом, буду рад пояснениям
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.06.2019, 15:55
Ответы с готовыми решениями:

Вывод координат мыши на экран
Здравствуйте, вот часть задачи работы с мышью. Кто может помочь оптимизировать процедуру proc (выведение координат мыши на экран) SST...

Вывод координат в процессе перемещения мыши
Здравствуйте. Помогите пожалуйста разобраться. Нашёл пример, который выводит координаты мышки х и у. Не могу понять часть кода,...

Вывод координат мыши в левом верхнем углу экрана
Подскажите, как исправить: координаты и сообщения мигают на экране (постоянно идет обработка). И как поставить вывод в левый верхний...

8
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
03.06.2019, 16:22
Удалите строку 3. А потом последовательно заменяйте инструкции для более новых процессоров на несколько инструкций для процессора i8086. Например, shl cx, 2 на
Assembler
1
2
shl cx, 1
shl cx, 1
И т.д.

Добавлено через 1 минуту
Да и среди "подобных" тем в самом низу данной веб-страницы множество решений, думаю, что можно что-то подобрать.
0
0 / 0 / 0
Регистрация: 22.05.2019
Сообщений: 10
04.06.2019, 14:25  [ТС]
Выдает одну ошибку (72) undeclared label: loop @b

В двух местах заменил
Assembler
1
 shl cx, 2
на
Assembler
1
2
 shl cx, 1
 shl cx, 1
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
04.06.2019, 14:37
Цитата Сообщение от marchkot Посмотреть сообщение
Выдает одну ошибку (72) undeclared label: loop @b
marchkot,
замени @@: lodsb на @0: lodsb и loop @b на loop @0
0
0 / 0 / 0
Регистрация: 22.05.2019
Сообщений: 10
04.06.2019, 15:05  [ТС]
Изменил, программа скомпилировалась
Теперь, как обычно, вылетает сообщение int 33h/AX=000Ch - not supported yet...


То, что имеем сейчас
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
; You may customize this and other start-up templates;
; The location of this template is c:\emu8086\inc\0_com_template.txt
 
org 100h
 
; masm dos com #
.model tiny
.code
org 100h
start:  mov ax,3;òåêñòîâûé ðåæèì 80õ25 ñèìâîëîâ, åñëè ó÷åñòü ðàçìåð ñèìâîëà
int 10h;8õ8 ñîîòâåòñòâóåò ãðàôè÷åñêîìó ðåæèìó 640õ200
mov dx,offset string1;âûâîäèì ñîîáùåíèå êàê âûéòè èç ïðîãðàììû
mov ah,9
int 21h
mov ax,0;Ôóíêöèÿ 00h ïðåäíàçíà÷åíà äëÿ âûÿñíåíèÿ, çàãðóæåí ëè â ïàìÿòü
int 33h;äðàéâåð ìûøè. Åñëè ýòà ôóíêöèÿ âîçâðàùàåò AX = 0, òî äðàéâåð
test ax,ax;îòñóòñòâóåò. Åñëè äðàéâåð çàãðóæåí, òî AX = 0FFFFh , à â
jz exit;ðåãèñòðå BX - ÷èñëî êíîïîê ìûøè
mov ax,0Ch;Ôóíêöèÿ 0Ch ïîçâîëÿåò ïðîãðàììíî çàäàòü ðåàêöèþ íà ñîáûòèÿ
push cs;ñâÿçàííûå ñ ìûøüþ: åå ïåðåìåùåíèÿ, íàæàòèå è îòïóñêàíèå êíîïîê.
pop es;Ñîáûòèÿ, íà êîòîðûå íåîáõîäèìî ðåàãèðîâàòü, äîëæíû áûòü îòìå÷åíû
mov cx,2;åäèíèöàìè â ñîîòâåòñòâóþùèõ ðàçðÿäàõ ðåãèñòðà CX. CX=2 - âûçâàòü ïîäïðîãðàììó,
mov dx,offset mouse;åñëè ëåâàÿ êëàâèøà îòïóùåíà. Ïîñëå âûïîëíåíèÿ ýòîé
int 33h;ôóíêöèè äðàéâåð ìûøè íà êàæäîå èç çàäàííûõ ñîáûòèé áóäåò
;ðåàãèðîâàòü âûçîâîì îáðàáîò÷èêà ñîáûòèé - ïîäïðîãðàììû, FAR-óêàçàòåëü íà àäðåñ
;êîòîðîé áûë óêàçàí â ðåãèñòðàõ ES:DX
mov ax,1;Ôóíêöèÿ 01h âêëþ÷àåò èçîáðàæåíèå êóðñîðà ìûøè íà ýêðàíå.
int 33h
xor ax,ax;æäåì ïîêà íå íàæìóò íà êëàâèàòóðó
int 16h
exit:   int 20h;çàâåðøàåì ïðîãðàììó
mouse proc far
push cs
pop ds
push 0B800h
pop es
mov ax,cx;â CX è DX - êîîðäèíàòû êóðñîðà
mov di,dx;â DI áóäóò êîîðäèíàòû íàäïèñè
shl cx, 1
shl cx, 1
;di=dx*4
add di,dx;di=dx*5
shl cx, 1
shl cx, 1
;di=dx*20
shr cx,2
add di,cx;di=dx*20+cx/4
mov bl,10
div bl
or ah,30h
mov string[4],ah
aam
add ax,3030h
mov string[2],ah
mov string[3],al
mov ax,dx
div bl
or ah,30h
mov string[10],ah
aam
add ax,3030h
mov string[8],ah
mov string[9],al
mov ax,3;ñòèðàåì ñ ýêðàíà ïðåäûäóùóþ íàäïèñü
int 10h
mov si,offset string
mov cx,string1-string;äëèíà íàäïèñè
mov ah,0Fh;àòòðèáóòû íàäïèñè (áåëîå íà ÷åðíîì)
@0: lodsb
stosw;âûâîäèì êîîðäèíàòû íà ýêðàí â çàäàííóþ ïîçèöèþ
loop @0
retf
mouse endp
string db "x=    y=   "
string1 db "äëÿ âûõîäà èç ïðîãðàììû íàæìèòå íà Esc$"
end start
 
ret
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
04.06.2019, 15:29
marchkot,
а у тебя программа в exe-файл компилируется? Если ЕХЕ, то работать не будет. Я ведь для com-файла писал посмотри внимательно, видишь строку ; masm dos com #
0
0 / 0 / 0
Регистрация: 22.05.2019
Сообщений: 10
04.06.2019, 15:40  [ТС]
Изначально я создал проект "com - template"
Запустил скомпилированный файл



Первый раз сталкиваюсь с подобным, по-этому, не понимаю всех тонкостей
Из твоего ответа решил, что надо создать com-проект и запустить скомпилированный файл
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
04.06.2019, 15:59
marchkot,
судя по первой картинке ты пытаешься программу для DOS запустить в 64-разрядной Windows, для запуска придется установить DOS-Box и запускать СОМ из него
1
0 / 0 / 0
Регистрация: 22.05.2019
Сообщений: 10
04.06.2019, 16:31  [ТС]
Цитата Сообщение от Mikl___ Посмотреть сообщение
marchkot,
судя по первой картинке ты пытаешься программу для DOS запустить в 64-разрядной Windows, для запуска придется установить DOS-Box и запускать СОМ из него
Через DOS-BOX все сработало!

Только появились новые пара вопросов
1. Как сделать выход из программы по нажатию любой клавиши с клавиатуры?
2. После щелчка мыши по экрану пропадает прямоугольный курсор, можно его вернуть?
3. Значение координат постоянно перемещаются в зависимости от точки нажатия, как их можно зафиксировать на месте?



0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.06.2019, 16:31
Помогаю со студенческими работами здесь

При опросе координат курсора и состояния кнопок мыши (int 33h ax=0003h), значение координат не изменяется
Не пойму в чём проблема. Графический режим, прога ждёт нажатия левой кнопки, после этого в регистры CX и DX автоматически помещается...

Вывод на экран координат мыши
ает using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using...

Вывод координат курсора мыши на экран
Доброго времени суток, друзья! Будьте добры, помогите мне сделать одну полезную штучку - вывод координат на экран. В общем, суть такая: я...

вывод координат курсора мыши
Здравствуйте. Нужно сделать чтобы в строке состояния браузера (IE), при нажатой кнопки мыши и перетаскивании курсора показывались...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru