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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2012, 11:13   #1
Kiten
Пользователь
 
Аватар для Kiten
 
Регистрация: 31.07.2012
Сообщений: 15
По умолчанию вопрос по рисованию линии

Всем привет! Я изучаю ассемблер, пока работаю в реальном режиме (использую DOSBox).
Написал простенькую программу для рисования линии. Я не знаю, как это нужно делать, поэтому решил эту задачу по-своему. В общем-то она работает, но если быстро двигать мышкой, то линия прерывистая. И еще. она не реагирует на щелчок мышкой без перемещения.

Код:
STACKSG SEGMENT PARA STACK 'Stack'
DW 32 DUP(?)
STACKSG ENDS
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,SS:STACKSG
BEGIN PROC FAR
mov ax,0013h
int 10h				;переход в графический режим (320/200)
mov ax,0a000h
mov es,ax
mov ax,00004h
mov cx,160
mov dx,100
int 33h				;установка положения курсора
mov ax,00001h
int 33h				;включение курсора мыши
l1:
mov ax,00003h
int 33h
cmp bx,2
jz l2
cmp bx,1
jnz l1
mov ax,320
mul dx
shr cx,1			;??????????????????????????
add ax,cx
xchg ax,di
mov al,15
mov byte ptr es:[di],al
jmp short l1
l2:
mov ah,10h
int 16h
cmp ah,01h			;проверка ESC
jz q1
jnz l1				;если нажать любую клавишу - возврат в основной цикл
q1:
mov ah,00h
mov al,03h
int 10h				;возврат в текстовый режим
MOV AH,4CH          ;выход в ДОС
INT 21H
BEGIN ENDP
CODESG ENDS
END BEGIN
Скажите, что тут не так? Полагаю, что есть лучший способ реализовать эти задачи. Не судите строго, заранее спасибо



___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.
Серьезное лицо - это еще не признак ума

Последний раз редактировалось Kiten; 31.07.2012 в 16:20.
Kiten вне форума Ответить с цитированием
Старый 31.07.2012, 11:43   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
В общем-то она работает, но если быстро двигать мышкой, то линия прерывистая.
Скорее всего, это проявляется при скорости перемещения курсора на экране (пикс/сек) большем, чем скорость опроса мыши (Гц). т.е. количество пикселей на один опрос состояния мыши превышает единицу. Отсюда и пропуски.
Цитата:
И еще. она не реагирует на щелчок мышкой без перемещения.
т.е. не ставит точку в месте щелчка?
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 31.07.2012, 12:14   #3
Kiten
Пользователь
 
Аватар для Kiten
 
Регистрация: 31.07.2012
Сообщений: 15
По умолчанию

Да, она не ставит точку в месте щелчка.
Серьезное лицо - это еще не признак ума
Kiten вне форума Ответить с цитированием
Старый 31.07.2012, 12:16   #4
Kiten
Пользователь
 
Аватар для Kiten
 
Регистрация: 31.07.2012
Сообщений: 15
По умолчанию

А как сделать, чтобы линия не была прерывистая? Есть какая-то функция для увеличения скорости опроса мыши?
Серьезное лицо - это еще не признак ума
Kiten вне форума Ответить с цитированием
Старый 05.08.2012, 10:01   #5
MansMI
Пользователь
 
Регистрация: 04.07.2012
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Kiten Посмотреть сообщение
А как сделать, чтобы линия не была прерывистая? Есть какая-то функция для увеличения скорости опроса мыши?
скорость опроса думаю не увеличить, пора учиться рисовать линии от координаты к координате
MansMI вне форума Ответить с цитированием
Старый 06.08.2012, 08:47   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
скорость опроса думаю не увеличить, пора учиться рисовать линии от координаты к координате
Это самое разумное: запоминаете координаты "нажатия" и при "отжатии" рисуете линию между двумя точками.

Или, если вам нужно что-то типа "карандаша":
1. кнопка "нажата" - запоминаем координаты точки в которой нажато
2. при опросе мыши рисуем линию из запомненных координат в текущую и запоминаем текущие координаты
3. повторяем п.2 пока кнопка не будет отпущена.

одним из оптимальных способов правильной реализации - повеситься на прерывание мыши.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рисование резиновой ломаной линии Ксения С Помощь студентам 0 20.05.2012 17:23
Рисование линии MISHAIL Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 05.06.2011 15:29
рисование линии противоположно курсору fate Общие вопросы Delphi 3 20.05.2011 22:42
Рисование линии Cpluser Общие вопросы .NET 8 17.05.2010 00:43
Рисование линии Cpluser Общие вопросы .NET 4 21.04.2010 00:15