Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Alex895623
0 / 0 / 2
Регистрация: 26.12.2013
Сообщений: 71
1

Рисование графических примитивов

16.05.2016, 20:39. Просмотров 1034. Ответов 6

Задача такова:

Необходимо нарисовать ромб. Ну а почему бы и нет? Можно и треугольник (не квадрат с прямоугольником, там просто очень). Всё это дело надо делать через БИОС (я юзаю INT 10h). Я не очень шарю в этом, но, основываясь на других темах и лит-ре нацарапал такой код:
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
.MODEL SMALL
;
;
;
S_Seg SEGMENT para stack 'stack'
    DB 256 DUP(?)
S_Seg ENDS
;
;
;
D_Seg SEGMENT para public 'data'
    StdMode DB ?                ;Исходный видео-режим       
    DotAX DW 320d               ;Координаты точек (делал через пейнт)
    DotAY DW 60d
    DotBX DW 410d
    DotBY DW 150d
    DotCX DW 320d
    DotCY DW 240d
    DotDX DW 230d
    DotDY DW 150d
D_Seg ENDS
;
;
;
C_Seg SEGMENT para public 'code'
    ASSUME SS:S_Seg, CS:C_Seg, DS:D_Seg
    start:
        starting PROC far
            push DS
            SUB AX, AX
            PUSH AX
            MOV BX, D_Seg
            MOV DS, BX
            CALL main
            ret
        starting ENDP
;
        main PROC near
            MOV AH, 0Fh         ;Сохраняем исходный видео-режим
            INT 10h
            MOV StdMode, AL
;
            MOV AH, 0h          ;Задаём видео-режим
            MOV AL, 3h
            INT 10h
;
            MOV CX, 90d     ;Рисуем первую линию
            L1:
                PUSH CX
                MOV AH, 0Ch
                MOV AL, 1
                MOV BH, 0h
                MOV CX, DotAX
                MOV DX, DotAY
                INT 10h
                INC DotAX
                INC DotAY
                POP CX
            LOOP L1
;
            MOV CX, 90d         ;Рисуем вторую линию
            L2:
                PUSH CX
                MOV AH, 0Ch
                MOV AL, 1
                MOV BH, 0h
                MOV CX, DotBX
                MOV DX, DotBY
                INT 10h
                DEC DotBX
                INC DotBY
                POP CX
            LOOP L2
;
            MOV CX, 90d         ;Рисуем третью линию
            L3:
                PUSH CX
                MOV AH, 0Ch
                MOV AL, 1
                MOV BH, 0h
                MOV CX, DotCX
                MOV DX, DotCY
                INT 10h
                DEC DotCX
                DEC DotCY
                POP CX
            LOOP L3
;
            MOV CX, 90d         ;Рисуем четвёртую линию
            L4:
                PUSH CX
                MOV AH, 0Ch
                MOV AL, 1
                MOV BH, 0h
                MOV CX, DotDX
                MOV DX, DotDY
                INT 10h
                INC DotDX
                DEC DotDY
                POP CX
            LOOP L4
;
            MOV AH, 0h          ;Возвращаем исходный видео-режим
            MOV AL, StdMode
            INT 10h
            ret
        main ENDP
C_Seg ENDS
    END start
С виду -- всё просто и понятно. Но, увы, не работает. Тестил. Видео-режим запускается, но вывод точек (да да, я рисую тут всё поточечно) не происходит. Выдаёт ошибку ntvdm.exe.

ПОМОГИТЕ, ПРОШУ!

P. s. Если будут ответы, мол не тот видео-режим юзаю, так вот. Там тоже проблемы. 13h, например, не запускается вообще. Ну и так многие другие.

Тут вот ещё рисунок, а котором обозначены те точки, координаты которых я указывал (центральная чисто для удобства).
0
Миниатюры
Рисование графических примитивов  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2016, 20:39
Ответы с готовыми решениями:

Рисование графических примитивов
Приложение, которое читает данные из файла о координатах и размерах различных графических...

Рисование графических примитивов на форме
Народ. Интересует рисование на форме, то есть круги, треугольники, линии движением мыши, но начиная...

Рисование надписей и графических примитивов
Как сделать возможным рисование на PictureBox, рисовать графические примитивы, надписи, другие...

рисование графических примитивов по данным из файла
дан текстовый файл. в файле на каждой строке записана процедура рисования графического примитива и...

С помощью графических примитивов создайте программу, выполняющую рисование конфеты
С помощью графических примитивов создайте программу, выполняющую рисование конфеты.,то есть...

6
Alex895623
0 / 0 / 2
Регистрация: 26.12.2013
Сообщений: 71
16.05.2016, 20:46  [ТС] 2
Не знаю, может инфа не нужная, но может и пригодится. Я работаю через виртуальную XP. Может это как то приводит к ошибке, я не знаю...
0
R71MT
5788 / 1544 / 320
Регистрация: 29.07.2014
Сообщений: 2,569
Записей в блоге: 5
17.05.2016, 07:16 3
Цитата Сообщение от Alex895623 Посмотреть сообщение
не квадрат с прямоугольником, там просто очень
..так начни с простого. Прямоугольник выводит?
0
Constantin Cat
3591 / 1144 / 380
Регистрация: 28.02.2015
Сообщений: 2,507
Завершенные тесты: 1
17.05.2016, 09:40 4
Лучший ответ Сообщение было отмечено Alex895623 как решение

Решение

Цитата Сообщение от Alex895623 Посмотреть сообщение
Если будут ответы, мол не тот видео-режим юзаю, так вот. Там тоже проблемы. 13h, например, не запускается вообще. Ну и так многие другие.
1)3-ий режим текстовый, а Вам нужен графический.
2)Прежде чем запускать видеорежим, нужно убедится, что он поддерживается.
Старые - 0х1В, современные - 0х4F00. Покрайней мере узнаете, что и как с видеорежимами, и что дальше юзать.
3)Обратите внимание на DOSBOX, несмотря на то, что у Вас виртуальная ХР.
1
Alex895623
0 / 0 / 2
Регистрация: 26.12.2013
Сообщений: 71
17.05.2016, 15:47  [ТС] 5
Constantin Cat, А использование функции 0C (код в АН) правильное? Что бы я точно знал, что проблема, прежде всего, в видеорежиме, а не в самом рисовании точек (координаты, пусть будем считать, маленьких значений, что бы не было выхода за пределы окна).
0
Constantin Cat
3591 / 1144 / 380
Регистрация: 28.02.2015
Сообщений: 2,507
Завершенные тесты: 1
17.05.2016, 17:16 6
Цитата Сообщение от Alex895623 Посмотреть сообщение
Что бы я точно знал, что проблема, прежде всего, в видеорежиме,
Давайте вначале дойдем до реки, а только потом будем думать как переправлятся.
Проверьте видеорежимы.
0
R71MT
5788 / 1544 / 320
Регистрация: 29.07.2014
Сообщений: 2,569
Записей в блоге: 5
17.05.2016, 17:38 7
Цитата Сообщение от Alex895623 Посмотреть сообщение
13h, например, не запускается вообще
..используй 12-ый
0
17.05.2016, 17:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2016, 17:38

Движение графических примитивов
Не работает движение нижней части клюва , помогите понять почему и помогите исправить . using...

Использование графических примитивов
Используя графические примитивы,задав параметры пера и кисти нарисовать щенка! Скажите как это...

Анимация графических примитивов
Всем привет. Передо мной стоит задача сделать простейшую анимацию 3-х овалов, но увы я никак не...


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

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

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