Форум программистов, компьютерный форум, киберфорум
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. Показов 2822. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Инструменты 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 - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru