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

Работа с графикой: нарисовать три вложенных квадрата

09.05.2023, 14:12. Показов 1097. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу формирования на экране 3-х вложенных квадратов. В центре
экрана с помощью функции 9 прерывания 10h ввести текст (фамилия студента). Цвет
квадратов устанавливать в соответствии с вариантом.


Цвет текста - фиолетовый
Координата верхний левый - 5,15
Координата нижний правый -22,63
Цвет внешнего квадрата - голубой
Цвет среднего квадрата - фиолетовый
Цвет внутреннего квадрата - зеленый
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.05.2023, 14:12
Ответы с готовыми решениями:

Нарисовать три вложенных окружности заданных радиусов
Напишите функцию, которая рисует три вложенных окружности радиусов 10, 20 и 30 пикселов: Сделайте кто может за ранее благодарочка ...

Работа с графикой в Codeblock - C++. Нарисовать смайлик!
Здравствуйте, вот наткнулся на ваш форум, и мне нужна ваша помощь. Я не долго изучаю язык С++, но с графикой не сталкивался, и если честно,...

Работа с графикой: нарисовать ромашку, лепестки пересекаются, рисовать попиксельно
Доброго времени суток. Прошу помощи в написание следующей проги "нарисовать ромашку, лепестки пересекаються, рисовать попиксельно",...

2
Модератор
1245 / 676 / 292
Регистрация: 10.11.2019
Сообщений: 1,406
09.05.2023, 17:09
Вот для примера 1 квадрат и текст. По образцу можно сделать 3 квадрата.
Программа состоит из 2 файлов.

Файл simp3.asm

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
    .model small
    .code
 
include brez640.inc
 
; вывести прямоугольник
rectangle macro x0,y0,x1,y1,color
    invoke drawline,<x0,y0,x1,y0,color>
    invoke drawline,<x1,y0,x1,y1,color>
    invoke drawline,<x1,y1,x0,y1,color>
    invoke drawline,<x0,y1,x0,y0,color>
    endm
 
; вывести квадрат со строной размера siz
sq  macro x0,y0,siz,color
    rectangle x0,y0,x0+siz,y0+siz,color
    endm
 
; напечатать строку, используя прерывания int 10h BIOS
print   macro x,y,color,txt
    local m1,m2
    lea si,txt
    mov dh,y
    mov dl,x
    mov bh,0
    mov bl,color
m1: lodsb
    cmp al,0
    jz  m2
    mov ah,2 ; set cursor
    int 10h
    mov cx,1
    mov ah,9 ; print char
    int 10h
    inc dl
    jmp m1
m2:
    endm
 
txt db "Hello, world!",0
; основная программа
start:  mov ax,cs
    mov ds,ax
    mov es,ax
    mov ax,12h ; видео режим 640*480*16 цветов
    int 10h
    sq  10,10,460,13 ; квадрат со стороной 460 цветом 13
    print 10,15,14,txt ; текст
    mov ah,0 ; ожидание нажатия на клавишу
    int 16h
    mov ax,3 ; текстовый режим
    int 10h
    int 20h  ; выход в Дос
    end start
Включаемый файл brez640.inc

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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
; аргументы вызова - координаты линии и цвет
; эти переменные заносятся в стек перед вызовом drawline
; см invoke
x1  equ word ptr [bp+12]
y1  equ word ptr [bp+10]
x2  equ word ptr [bp+8]
y2  equ word ptr [bp+6]
col equ byte ptr [bp+4]
 
; внутренние переменные drawline
; эти переменные существуют только в процессе работы drawline
deltaX  equ word ptr [bp-2]
deltaY  equ word ptr [bp-4]
signX   equ word ptr [bp-6]
signY   equ word ptr [bp-8]
er  equ word ptr [bp-10]
er2 equ word ptr [bp-12]
 
; вывод точки (VGA 640*480*16 цветов)
; x=cx, y=dx, color=al
erase   db 0
 
plot:   cmp erase,0
    jz  pl0
    mov al,0
pl0:    push di
    push es
    cmp cx,640 ; координаты выходят за границы экрана ?
    jnc pl1
    cmp dx,480
    jnc pl1
    push ax ; ---
    mov ax,80 ; di=80*y+(x/8)
    mul dx
    push cx
    rept 3
    shr cx,1
    endm
    add ax,cx
    mov di,ax
    pop cx
    and cl,7
    xor cl,7 ; CL= # of bits to shift left
 
; отрисовка в видео память
    mov ax,0A000h
    mov es,ax
 
; set Graphics Controller write mode 2
    mov dx,3CEh     ; GC address register port
    mov ah,1        ; AH= unshifted bit mask
    shl ah,cl       ; AH= bit mask in proper pos.
    mov al,8        ; AL= Bit register #
    out dx,ax
    mov ax,205h     ; AL= Mode register number
    out dx,ax       ; AH= Write Mode 2(bits 0,1)
                ;     Read Mode 0 (bit 3)
    mov ax,0003     ; AL= Function Select reg. # (code 0 - dot replace)
;   mov ah,3*8              ; (3*8 - dot XOR - code 3)
;   mov al,3
    out dx,ax       ; AH= read-modify-write bits
 
    pop ax ; ---
; чтение (в "защелки" VGA) затем запись
    xchg    al,es:[di]  ; выводим точку
 
; restore default Graphics Controller register value
    mov ax,0FF08h   ; default Bit Mask
    out dx,ax
    mov ax,0005     ; default Mode register
    out dx,ax
    mov ax,0003     ; default Function Select
    out dx,ax
 
pl1:    pop es
    pop di
    ret
 
; вывод линии
; SUB drawLine (x1, y1, x2, y2, col)
; Пример вызова:
; invoke drawline, <10,10,310,10,15>
 
drawline proc
    push bp   ; пролог Сохраняем bp в стеке
    mov bp,sp ; далее мы адресуем переменные с помощью bp
    sub sp,16 ; выделяем место под локальные переменные
    push ax
    push bx
    push cx
    push dx
;deltaX = ABS(x2 - x1)
    mov ax,x2
    sub ax,x1
    jge lin1
    neg ax
lin1:   mov deltaX,ax
;deltaY = ABS(y2 - y1)
    mov ax,y2
    sub ax,y1
    jge lin2
    neg ax
lin2:   mov deltaY,ax
;IF x1 < x2 THEN signX = 1 ELSE signX = -1
    mov bx,1
    mov ax,x1
    cmp ax,x2
    JL  lin3
    neg bx
lin3:   mov signX,bx
;iF y1 < y2 THEN signY = 1 ELSE signY = -1
    mov bx,1
    mov ax,y1
    cmp ax,y2
    JL  lin4
    neg bx
lin4:   mov signY,bx
;er = deltaX - deltaY
    mov ax,deltaX
    sub ax,deltaY
    mov er,ax
;PSET (x2, y2), col
    mov cx,x2
    mov dx,y2
    mov al,col
    call plot
; основной цикл построения линии
;WHILE (x1 <> x2) OR (y1 <> y2)
wil1:   mov ax,x1
    cmp ax,x2
    jnz wil2
    mov ax,y1
    cmp ax,y2
    jnz wil2
    jmp wend
wil2:   
;PSET (x1, y1), col
    mov cx,x1
    mov dx,y1
    mov al,col
    call plot
;er2 = er * 2
    mov ax,er
    add ax,ax
    mov er2,ax
;IF (er2 > -deltaY) THEN er = er - deltaY: x1 = x1 + signX
    mov ax,er2
    add ax,deltaY
    JLE lin5
    mov ax,er
    sub ax,deltaY
    mov er,ax
    mov ax,x1
    add ax,signX
    mov x1,ax
lin5:
;IF (er2 < deltaX) THEN er = er + deltaX: y1 = y1 + signY
    mov ax,er2
    cmp ax,deltaX
    jge lin6
    mov ax,er
    add ax,deltaX
    mov er,ax
    mov ax,y1
    add ax,signY
    mov y1,ax
;WEND
lin6:   jmp wil1
wend:   pop dx
    pop cx
    pop bx
    pop ax
    mov sp,bp ; эпилог, восстанавливаем sp
    pop bp    ; восстанавливаем bp
    ret 10    ; делаем возврат и продвигаем стек на 5*2=10 байт (т к 5 аргументов хранилось в стеке)
drawline endp
 
; макро вызова drawline См lst.lst, какой код генерит это макро
 
invoke macro CallProc,Params
    IRP P,<Params>
        mov ax, P
        push ax
        
    endm
    call CallProc
endm
0
Заблокирован
10.05.2023, 04:17
Цитата Сообщение от Аааааа45 Посмотреть сообщение
Координата верхний левый - 5,15
Координата нижний правый -22,63
это что? или что такое квадрат?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.05.2023, 04:17
Помогаю со студенческими работами здесь

Два симметрично вложенных квадрата и шарик
Заданы стороны a и b двух квадратов, симметрично вложенных. Определить угол, под которым шарик надо выпустить из точки A, чтобы он попал в...

Работа с матрицами. В центре каждого квадрата поместить сумму остальных элементов квадрата
Заполнить матрицу случайными числами. Разбить матрицу на квадраты размером 3х3. В центре каждого квадрата поместить сумму остальных...

Три вложенных ромба
Задание №2. Нарисуйте три вложенных ромба, у которых острые углы равны 75, 50 и 25 градусов.

Нарисовать несколько вложенных прямоугольников
как нарисовать несколько вложенных прямоугольников?

Нарисовать фигуру из вложенных квадратов
Нужно нарисовать фигуру. Сколько уже пытался, не получается :cry:


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru