Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler для начинающих

Войти
Регистрация
Восстановить пароль
 
Dzhakomausss
0 / 0 / 0
Регистрация: 21.11.2012
Сообщений: 33
#1

Рисования прямой линии - Assembler

30.11.2013, 19:25. Просмотров 933. Ответов 2
Метки нет (Все метки)

Добрый вечер.

Задача:
Рисование прямой линии с помощью мыши. Линия должна соединять две точки, первая точка имеет координаты нажатия левой кнопки мыши, а вторая – правой

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
.486
model small ;EXE
Data SEGMENT use16
        ASSUME ds:Data
BgC db 16 ;Цвет фона
LnC db 12 ;цвет линий
X1  dw ?
Y1  dw ?
X2  dw ?
Y2  dw ?
step1 dw ?
Data ENDS
Stk SEGMENT use16 STACK
        ASSUME ss:Stk
        db 256 dup(0)
Stk ENDS
Code SEGMENT use16
        ASSUME cs:Code
        
DrawRect PROC
        
;ФУНКЦИЯ РИСОВАНИЯ ЛИНИИ        
        ret
DrawRect ENDP
        
start:
        mov ax,13h ;функция прерывания, отвечающая за включение видеорежима
        int 10h ;инициализация видеорежима
        mov ax,seg BgC
        mov ds,ax ;установка регистра ds на адрес сегмента DATA
        mov ax,0a000h 
        mov es,ax ;установка es (через ax) на сегмент видеобуфера
        xor di,di ;регистр нужно очистить перед работой с видеобуффером
        mov al,BgC
        mov ah,al ;установка цвета
        mov cx,32000
        rep stosw ;заполнение буффера цветом фона
    
    ;Блок инициализации драйвера
        xor ax,ax
        int 33h
        mov ax, 1
        int 33h
    
    ;цикл обработки нажатий на клавиши
    cucl:
        mov ax, 3
        int 33h ;получение информации с мыши 3-ей функцией int33h
        bt bx, 2 ;копируем значение второго бита bx в флаг cf 
        jc exit ;если нажата средняя кнопка, то выход
        
        mov ax, 3
        int 33h
        bt bx, 0 ;копируем нулевой бит в cf
        jnc cucl ;если не нажата левая кнопка, то вернуться к началу цикла
        sar cx, 1 ;деление значения Х-координаты на 2 (для мыши эта координата почему-то вдвое больше экранной)
        mov X1, cx ;запоминаем координаты 
        mov Y1, dx
    scucl:
        int 33h ;после нажатия левой кнопки ожидаем нажатия правой
        bt bx, 1 ;если нажата правая кнопка, то записать координаты - за правую кнопку отвечает первый бит
        jnc scucl ;и перейти к вызову рисования линии(если не нажата - в начало цикла)
        sar cx, 1
        mov X2, cx
        mov Y2, dx ;запоминаем координаты
        
        call DrawRect ;рисование прямой линии по координатам
        
        jmp cucl ;в начало цикла
        
    exit:
        mov ax,3 ;отключение видеорежима
        int 10h
        mov ax,4c00h ;завершение программы
        int 21h 
Code ends
end start
Помогите реализовать функцию рисования прямой линии.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2013, 19:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Рисования прямой линии (Assembler):

Рисование прямой линии - Assembler
Сразу, прошу, на алгоритмы типа "Брейзенхема" не посылать. С помощью рекурсии, пытаюсь то что хочу , но не могу понять в чем же дело. ...

Нужен код на masm для вывода на экран прямой вертикальной линии - Assembler
Надо чтобы линия выводилась сразу и самому рисовать не надо было

Программа для рисования - Assembler
Здраствуйте,есть программа которая рисует по нажатию правой кнопки мыши. Может кто нибудь подскажет как сделать так чтобы перед запуском...

Объяснить код рисования квадрата - Assembler
Здраствуйте,возникла проблема с кодом на assemblere. Данный код рисует 2 прямоугольника.Один в другом. -a 100 mov ax,600...

MASM gdi32, задать цвет для рисования - Assembler
Всем доброго времени суток. Друзья, начинаю работать на ассемблере с gdi объектами столкнулся с проблемой цветнго рисования весь код: ...

наклонные линии - Assembler
доброго времени суток. Подскажите как можно нарисовать линию из одной точки в другую. заранее спасибо

2
Quiet Snow
4395 / 1279 / 209
Регистрация: 25.04.2010
Сообщений: 3,259
30.11.2013, 20:15 #2
http://ru.wikipedia.org/wiki/Алгоритм_Брезенхема

В самом низу пример на TASM.
1
Mikl___
Автор FAQ
11209 / 5866 / 523
Регистрация: 11.11.2010
Сообщений: 10,895
01.12.2013, 04:40 #3
Рисование на экране прямых линий, оканчивающиеся в позициях, которые указываются мышью
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2013, 04:40
Привет! Вот еще темы с ответами:

Рисование линии - Assembler
Здравствуйте, прошу оказать помощь в выполнении задания. Требуется нарисовать линию: первая точка имеет координаты нажатия левой кнопки...

Рисование линии в видеорежиме - Assembler
Написать программу, которая в видережиме 13h выводит на экран лини. произвольной длины и единичной толщины под углом 45 к горизоту. Выход...

Рисование по алгоритму DDA-линии - Assembler
пытаюсь написать программу, которая выводит прямую у=кх+b по алгоритму DDA-линии(вроде так называеться). Только у меня известны начальные...

Линии или прямоугольники на NASM - Assembler
Помогите пожалуйста. Подкиньте прогу , которая рисует цветные линии или прямоугольники, которая скомпилируется на NASM?? а то я искал в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru