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

Нарисовать 4 квадрата по углам экрана

19.10.2022, 17:47. Показов 879. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание:
Прорисовать 4 квадрата по углам экрана цветов: красный, синий, зеленый, белый. (размер 64*64 pix)

Есть код:
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
;Тестирование ВК
Stck Segment Stack
     db 512 dup(?)
Stck EndS
 
Data Segment
     mem_adr dw 0A000h
     color   db ?
     msk     db ?
Data EndS
 
Code Segment Public 'Code'
     Assume CS:Code,DS:Data
 
START PROC FAR
     Mov   AX,Data
     Mov   DS,AX
 
     Mov   AX,12h            ;инициализация  режима дисплея 640х480х16
     Int 10h
 
     Mov   AX,Mem_Adr
     Mov   ES,AX
 
     Mov   DX,3CEh                ;выбор порта  управления
     Mov   AL,5                   ;выбор 5-го  рeгистра   ВК
     out   DX,AL
     Inc   DX                     ; адрес порта  данных
     Mov   AL,0                   ;режим записи 0
     out   DX,AL
     mov bx,0d                    ;вывод 8 пикселей  красного цвета
     mov cx,64d; счетчик строк
 
label1:
      mov al,04d    
      call dop  
      mov al,00d
      call dop  
      mov al,00d
      call dop  
      mov al,00d
      call dop  
      mov al,00d
      call dop
      mov al,00d
      call dop      
      mov al,00d
      call dop
      mov al,15d
      call dop  
      loop label1
 
     Mov   AH,0
     Int 16h                            ; Press any key...
     Mov  AX,0003h
     Int 10h                             ; Text Mode
     Mov  AH,4Ch
     Int 21h
START EndP
 
dop proc
    push dx
    push cx
    mov cx,10d
label2: add bx,1d
    Mov   msk,11111111b
        Mov   color,al             
        CALL FILLRECT            
        dec cx               
        cmp cx,0         
        jne label2
    pop dx
    pop cx
dop endp
 
FILLRECT PROC
      push ax
      push dx
     Mov  DX,3CEh
     Mov  AL,8                   ; 8-ой регистр ВК
     out  DX,AL
 
     Inc  DX
     Mov  AL,msk
     out  DX,AL
 
      Mov  AL,ES:[BX]            ; читаем содержимое защелки
     Mov  AL,0
     Mov  ES:[BX],AL             ; очищаем защелку
 
     Mov  DX,3C4h
     Mov  AL,2                   ; 2-ой регистр секвенсора
     out  DX,AL
 
     Inc  DX                     ;  адрес порта  данных секвенсора
     Mov  AL,color
     out  DX,AL
     Mov  AL,0FFh
     Mov  ES:[BX],AL             ; прорисовка  пикселя
      pop dx
      pop ax
     ret
FILLRECT EndP
 
Code EndS
     End START
На рисунке , то что у меня получается , но как размести еще 2 квадрата по углам снизу?
Миниатюры
Нарисовать 4 квадрата по углам экрана  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.10.2022, 17:47
Ответы с готовыми решениями:

Составьте программу, которая нарисует два квадрата по углам экрана
Составьте программу, которая нарисует два квадрата по углам экрана. После нажатия на "ENTER" они...

Движение картинки от центра экрана — по диагоналям ко всем углам экрана с уменьшением размера
нужно чтобы картинка двигалась от центра экрана - по диагоналям ко всем углам экрана с уменьшением...

Вывод квадрата из нулей с единицами по углам
Помогите, пожалуйста, всю голову сломал уже, никак решить не могу. Написать программу, которая...

Расположение окон по углам экрана
Построить два окна по верхним углам экрана и ввывести в каждое окно сообщение окно1 и окно 2....

4
Модератор
1181 / 616 / 282
Регистрация: 10.11.2019
Сообщений: 1,296
19.10.2022, 19:05 2
Лучший ответ Сообщение было отмечено romashka_113212 как решение

Решение

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
; Подпрограмма plot на основе книги
; Р Уилтон "Видеосистемы персональных компьютеров IBM PC и PS/2
; руководство по программированию"
 
    .model small
    .code
RED=8+4
GREEN=8+2
BLUE=8+1
WHITE=15
 
; вывод точки (VGA 640*480*16 цветов)
; x=cx, y=dx, color=al
 
color   db 0
 
plot:   push di
    push es
    push cx
    push dx
    mov al,color
    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 dx
    pop cx
    pop es
    pop di
    ret
 
sq: mov color,al ; квадрат 64*64 точки цвета al c координатами cx, dx
    mov al,64
sq1:    mov ah,64
    push dx
    push cx
sq2:    push ax
    call plot
    pop  ax
    inc cx
    dec ah
    cmp ah,0
    jnz sq2
    pop cx
    pop dx
    inc dx
    dec al
    cmp al,0
    jnz sq1
    ret
 
start:  push cs
    pop  ds
    mov ax,12h ; видео режим 640*480*16 цветов
    int 10h
; рисуем 4 квадрата
; красный, синий, зеленый, белый
    mov cx,0
    mov dx,0
    mov al,RED
    call sq
    mov cx,640-64
    mov dx,0
    mov al,BLUE
    call sq
 
    mov cx,0
    mov dx,480-64
    mov al,GREEN
    call sq
    mov cx,640-64
    mov dx,480-64
    mov al,WHITE
    call sq
; ожидание нажатия на клавишу
    mov ah,0
    int 16h
; текстовый режим
    mov ax,3
    int 10h
; выход в Дос
    mov ax,4C00h
    int 21h
 
    end start
2
0 / 0 / 0
Регистрация: 15.11.2021
Сообщений: 14
19.10.2022, 20:58  [ТС] 3
Выдает ошибки.
Миниатюры
Нарисовать 4 квадрата по углам экрана  
0
Модератор
Эксперт по электронике
8522 / 4376 / 1648
Регистрация: 01.02.2015
Сообщений: 13,600
Записей в блоге: 9
19.10.2022, 21:23 4
Не выдаёт ошибок
Нарисовать 4 квадрата по углам экрана
1
0 / 0 / 0
Регистрация: 15.11.2021
Сообщений: 14
19.10.2022, 22:56  [ТС] 5
Все во всем разобрался. Спасибо
Миниатюры
Нарисовать 4 квадрата по углам экрана  
0
19.10.2022, 22:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.10.2022, 22:56
Помогаю со студенческими работами здесь

Вывести по разным углам экрана фразу.
Сама по себе программа защита от копирования подпрограммы вывода на экран слова .Вывод в 4...

Используя модуль, поместите картинку по углам экрана и в центре.
Создайте модуль, в котором будет храниться процедура создания следующей картинки. Используя модуль,...

Составить программу, которая приводит к появлению четырех квадратов по углам экрана.
Составить программу, которая приводит к появлению четырех квадратов по углам экрана. После нажатия...

Заставить символ по нажатию клавиши enter двигаться от центра экрана к углам
Нужно ввести произвольный символ с клавиатуры в центре экрана. Нажатием Enter заставить символ...

Построить квадрат со стороной 30 пиксел, центр которого совмещен с центром экрана. Стороны квадрата должны быть параллельны осям координат экрана
Помогите, пожалуйста, совсем нет идей. Текст задачи: Построить квадрат со стороной 30 пиксел,...

Нарисовать с помощью отдельных точек синусоиду зеленого цвета в центре экрана на всю ширину экрана
Нарисовать с помощью отдельных точек синусоиду зеленого цвета в центре экрана на всю ширину экрана....

Создайте модуль, в котором будет храниться процедура создания следующей картинки. Используя модуль, поместите картинку по углам экрана и в центре.
Создайте модуль, в котором будет храниться процедура создания следующей картинки. Используя модуль,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru