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

Вывод координат мыши в левом верхнем углу экрана

06.05.2013, 21:40. Показов 2841. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, как исправить: координаты и сообщения мигают на экране (постоянно идет обработка).
И как поставить вывод в левый верхний угол?
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
s_s segment stack  "stack"  ; S_S начало сегмента стека 
dw 5 dup(?)  
s_s ends 
 
d_s segment
 r db 10, 'Right x:  $'
 l db 10, 'Left  x:  $'
 n db 10, 'y:   $'
 x dw 0
 y dw 0
d_s ends
 
c_s segment
 assume ss:s_s, ds:d_s, cs:c_s ;определяет каким сегментным регистром соответствует адрес начала сгмента 
 begin:
  mov ax,d_s
  mov ds, ax   
 
   mov ax, 3; видео режим
   int 10h
 
  mov ax, 0
   int 33h ; ин. мыши
 
  mov ax, 1 ; видимый курсор
   int 33h
 
  progr:
 
  mov ax, 3 ; 3- обработка события мыши
   int 33h
    mov x, cx
    mov y, dx
 
 
  l1:
  cmp bx, 1 ; нажата ЛКМ
   je left
 
  cmp bx, 2 ; нажата ПКМ
   je right
  
  cmp bx, 3
   je exit
 
  right:
   mov ax, 0600h ;очистка экрана ;AH=06(прокрутка) AL=00(весь экран)
   mov bh, 07
   mov cx, 0000
   mov dx, 184FH
   int 10h 
 
  lea dx, r
   mov ah, 9
    int 21h
 
   mov  ax, x ; х помещаем в регистр ax    
 
   call koordproc  ; вызываем процедуру 
    lea dx, n  
     mov ah, 9h
     int 21h
  
   mov  ax, y
 
   call koordproc   
 
 jmp progr
 
 
  left:
   mov ax, 0600h ;очистка экрана ;AH=06(прокрутка) AL=00(весь экран)
   mov bh, 07
   mov cx, 0000
 
   mov dx, 184FH
   int 10h 
  
  lea dx, l
   mov ah, 9
    int 21h
 
   mov  ax, x ; х помещаем в регистр ax    
   call koordproc  ; вызываем процедуру 
    lea dx, n 
     mov ah, 9h
     int 21h
  
   mov  ax, y
   call koordproc 
 
 jmp progr
 
  exit:
   mov ah,4ch
    int 21h 
 
 
  koordproc proc near
 
 xor cx, cx
   mov  bx, 10
  
  DIVK:
   xor   dx, dx
   div  bx
   push dx
   inc cx 
   cmp ax, 0
  jnz DIVK
  
   write:
   pop dx
    xor dh, dh
    add dl, 48
    mov ah, 2
     int 21h
   loop write
  
  ret 
 
  koordproc endp
 
 
c_s ends
end begin
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.05.2013, 21:40
Ответы с готовыми решениями:

Вывести текущее время в верхнем левом углу экрана
Вывести текущее время в верхнем левом углу экрана. Помогите плиз. Нужен код программы на Ассемблере.:cry::cry::cry:

Непонятные квадратики в левом верхнем углу экрана
Привет всем. непонятные квадратики в левом верхнем углу экрана после нажатия кнопки появляется квадрат размер кнопки, как...

Вывести в левом верхнем углу координаты мыши Turbo C
#include<dos.h> #include<conio.h> #include<stdio.h> void main() { int x, y, button; clrscr(); _AX=1; ...

4
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
06.05.2013, 22:05
Rantip, ваше? Я же уже говорил, чтобы не не моргало, надо мышиному драйверу подсунуть свою п/п, которая будет вызываться по событию.
0
47 / 1 / 0
Регистрация: 12.05.2010
Сообщений: 146
07.05.2013, 11:52  [ТС]
Charles Kludge, я не разобрался с этим примером
На свежую голову сделал так:
Assembler
1
2
  cmp bx, 0
   je progr
Теперь программа не обновляет событие постоянно
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
07.05.2013, 12:03
Rantip,
воспользуйся поиском, такая задача здесь уже была
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
07.05.2013, 12:37
Rantip, ну вот, откомментарил:
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
.286
.MODEL  tiny
.CODE
    ORG 100h
 
start:
; Инициализация 
    mov ax, 3
    int 10h
 
; Инициализация мыши
    mov ax, 0
    int 33h
 
; Обработчик событий
    mov ax, 000Ch
    mov cx, 07Fh    ; флаги событий для вызова п/п
;Bitfields for mouse call mask:
 
;Bit(s) Description 
; 0 call if mouse moves
; 1 call if left button pressed
; 2 call if left button released
; 3 call if right button pressed
; 4 call if right button released
; 5 call if middle button pressed (Mouse Systems/Logitech/Genius mouse)
; 6 call if middle button released (Mouse Systems/Logitech/Genius mouse)
; 7-15  unused
    lea dx, msISR   ; адрес п/п
    int 33h
 
; Показать курсор
    mov ax, 1
    int 33h
; вызываем п/п для первичной отрисовки шаблончика координат
    call    far ptr msISR
; Ожидание ввода символа
    mov ah, 0
    int 16h
 
; Отменить обработчик
    mov ax, 000Ch
    mov cx, 0000h
    int 33h
 
; Выходим из программы
    int 20h
 
msISR:
    push    ds
    push    es
    push    cs
    pop es
    test    ax, 1   ; перемещение?
    jnz @1
    call    btn
;   jmp @2
@1: lea di, y_end   ; хвост шаблончика координат
; чтобы выводить в знакоместах, CX и DX надо делить на 8 -> shr dx, 3
    push    cx
    mov ax,dx
    std     ; писать будем с хвоста, задом наперёд
    mov bx, 10  ; делитель
    call    cnv ; преобразуем Y
    dec di      ; пропускаем ':'
    pop ax
    call    cnv ; преобразуем X
@2: cld
    push    cs
    pop ds
; Вывод в видеопамять
    mov cx, tpt_sz  ; длина шаблончика
    mov ax, 0B800h  ; видеосегмент
    mov es, ax
    mov di, 008Ch   ; смещение в видеобуффере (80-tpt_sz)*2
    mov ah, 00000011B   ; color: cyan on black
    lea si, x
; цикл вывода
disp:
    lodsb
    stosw
    loop    disp
    pop es
    pop ds
    retf
; обработка кнопок
btn:    test    ax, 110b    ; левая кнопка?
    jz  @3
    xor cs:_l, 6Ch      ; да, перебрасываем флаг: 20 xor 6Ch = 'L' или пробел
@3: test    ax, 11000b  ; правая кнопка?
    jz  @4
    xor cs:_r, 72h  ; да, перебрасываем флаг: 20 xor 72h = 'R' или пробел
@4: test    bx, 1100000b    ; средняя кнопка?
    jz  @5
    xor cs:_m, 6Dh  ; да, перебрасываем флаг: 20 xor 6Dh = 'M' или пробел
@5: ret
; Преобразование числа в строку
;   es:di - endbuf
cnv:    call    @@1
    call    @@1
@@1:    div bl      ; делим на 10.
    xchg    ah, al
    add al, 30h     ; в ASCII
    stosb                   ; сохраняем
    shr ax, 8
    ret
x   db '000:000'        ; шаблончик для вывода
y_end   = $ - 1
_l  db  20h     ;
_m  db  20h
_r  db  20h
tpt_sz  = $ - x
    end start
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.05.2013, 12:37
Помогаю со студенческими работами здесь

Расположение текста в верхнем левом углу экрана без смещения
Написал следующий код: <html> <meta charset="utf-8"> <head> <title>Интернет-магазин часоман.ру</title> <style> *( ...

Введенным символом нарисовать квадрат (10х10) в верхнем левом углу экрана
Помогите пожалуйста! Введенным символом нарисовать квадрат (10х10) в верхнем левом углу экрана. заранее благодарен!!!

Вместо BIOS мигает черточка в левом верхнем углу черного экрана
Собрал такую конфу: Материнская плата MSI H310-A PRO Процессор Intel Core i3-9100F BOX Оперативная память Kingston ValueRAM Блок...

Введите 3 числа с клавиатуры и выведите в левом верхнем углу экрана четные из них
составить программу, введите 3 числа с клавиатуры и выведите в левом верхнем углу экрана четные из них, а в правом нижнем углу - нечетные,...

Написать программу, которая в левом верхнем углу экрана рисует прямоугольник размером А на В
Уважаемые други, не поможете вот с этой задачей? Недавно начал изучить графику в паскале, путаюсь всё время. Собссна, вот. ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru