Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Assembler [MASM] Прога не компилится. непонятная ошибка(код копировал с методички) https://www.cyberforum.ru/ assembler/ thread591729.html
; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤ include \masm32\include\masm32rt.inc ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤...
Ввод данных не в коде, а в программу с клавиатуры Assembler
Как исправить программу, чтобы строка вводилась с клавиатуры, а не заранее в коде? Заранее спасибо за советы) .model small .code .startup push cs pop es
MASM компилятор Assembler
Дан список записей типа ФАЙЛ: название (строка 20 символов), расширение (строка 5 символов), размер (целое положительное значение размером 4 байта). Вывести на экран все файл, размер которых лежит...
Assembler Нужно узнать как происходит изменение Из одной строки, получается другая, не могу понять алгоритма. 0043477C /$ 55 PUSH EBP 0043477D |. 8BEC MOV EBP,ESP 0043477F |. 83EC 10 SUB ESP,10 00434782 |. 56... https://www.cyberforum.ru/ assembler/ thread591418.html
Assembler Перевод кода из Pascal в Assembler https://www.cyberforum.ru/ assembler/ thread591327.html
Люди добрые, помогите, нужно перевести часть программного кода из Pascal в Assembler. 1) Как будет выглядеть этот код в ассемблере? While AX > -19 do begin CX := CX + 1 AX := AX - CX end; ...
Переключение задач в реальном режиме Assembler
Здравствуйте. Во всех примерах разобрано переключение задач в защищённом режиме процессора, может кто-нибудь дать пример в реальном режиме? Если я правильно понял, реальный режим это- DOS. Для...
Задача на множества Assembler
Дана строка. Вывести по одному разу все знаки препинания, входящие в строку
Assembler Окружность: исправить ошибки при компиляции выдает ошибки: <29>Need address or register <30>Undefined symbol:yc1 <33>Undefined symbol:xc1 Помогите исправить пожалуйста .386 data segment x360 dd 180.0 https://www.cyberforum.ru/ assembler/ thread591056.html
Assembler Дано текущее время (M S), где M - это минуты, а S - секунды https://www.cyberforum.ru/ assembler/ thread591048.html
Дано текущее время (M S), где M - это минуты, а S - секунды. Написать программу, определяющую время спустя 1 секунду.
Assembler Дано текущее время (H M S), где H - это часы, M - это минуты, а S - секунды. Напи- сать программу, определяющую время спустя 1 секунду Дано текущее время (H M S), где H - это часы, M - это минуты, а S - секунды. Напи- сать программу, определяющую время спустя 1 секунду. https://www.cyberforum.ru/ assembler/ thread591032.html
1 / 1 / 0
Регистрация: 26.12.2010
Сообщений: 7
0

программа вычерчивающая на экране монитора окружность заданного радиуса и цвета,радиус и цвет с клавиатуры

30.05.2012, 20:40. Просмотров 1175. Ответов 1
Метки (Все метки)


Есть программа ,надеюсь правильно написана,нужно добавить лишь ввод цвета и радиуса окружности с клавиатуры. суть программы :Написать программу ,вычерчивающую на экране монитора окружность заданного радиуса,должна работать а режиме с разрешением 320х200 точек (256 цветовых оттенков)
Радиус и код цвета окружности задается с клавиатуры.
и если можно отчет программы.
заранее спасибо!
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
.286
.model tiny
.code
ORG 100h
 
RADIUS EQU 99   ;рисуем окружность с радиусом 99
RADIUS2 EQU RADIUS*RADIUS   ;квадрат радиуса
DIAMETR EQU RADIUS*2        ;диаметр окружности
N EQU 157*RADIUS/200;количество точек на 1/8 
COLOR EQU 10            ;цвет окружности
start:  MOV AH,0Fh  ;узнать номер текущего видеорежима
    INT 10h
    MOV VIDEOR,AL       ;запомним текущий видеорежим
    MOV AX,13h;установить видеорежим 320х200х256 
    INT 10h
    PUSH 0A000h;установить регистр ES на сегмент 
    POP ES          ; видеопамяти
    XOR BP,BP           ;будем увеличивать X и Y
    MOV Y,RADIUS-1      ;координаты X=0 и Y=R
    CALL DRAW_OCT1  ;рисуем восьмушку окружности
    MOV BP,RADIUS-1 ;координата X=2*R
    MOV Y,0         ;координата Y=0
    CALL DRAW_OCT2  ;рисуем восьмушку окружности
    NEG DELTA_X     ;увеличиваем Y и уменьшаем X
    MOV Y,RADIUS         
    MOV BP,DIAMETR  ;координаты Y=R и X=2*R
    CALL DRAW_OCT1  ;рисуем восьмушку окружности
    MOV BP,RADIUS       ;координата X=R
    MOV Y,0         ;координата Y=0
    CALL DRAW_OCT2  ;рисуем восьмушку окружности
    NEG DELTA_Y ;уменьшаем координаты Y и X
    MOV Y,RADIUS        ;координата Y=R
    MOV BP,DIAMETR  ;координата X=2*R
    CALL DRAW_OCT1  ;рисуем восьмушку окружности
    MOV BP,RADIUS       ;координата X=R
    MOV Y,DIAMETR       ;координата Y=2*R
    CALL DRAW_OCT2  ;рисуем восьмушку окружности
    NEG DELTA_X ; уменьшаем Y и увеличиваем X
    XOR BP,BP           ;координата X=0
    MOV Y,RADIUS        ;координата Y=R
    CALL DRAW_OCT1  ;рисуем восьмушку окружности
    MOV BP,RADIUS       ;координата X=R
    MOV Y,DIAMETR       ;координата Y=2*R
    CALL DRAW_OCT2  ;рисуем восьмушку окружности
    XOR AX,AX       ;ожидание нажатия любой клавиши
    INT 16h
    MOV AX,WORD PTR VIDEOR;восстановление видеорежима
    INT 10h
    RET                 ;выход из программы
DELTA_CALC PROC     ;рассчитаем ошибку накопления
    MOV BX,AX   ;в AX значение координаты X или Y 
    DEC AX          ;вычислим (Y+0,5)2   Y2+Y
    MUL AX          ;или (X+0,5)2   X2+X
    ADD AX,BX
    MOV DELTA,AX    ;и поместим это значение в DELTA
    RET
DELTA_CALC ENDP
;процедура прорисовки 1/8 окружности с вычислением 
DRAW_OCT1 PROC  ; координаты X
    MOV AX,Y
    SHL AX,6     ;должно быть DI=Y*320, но для умножения 
    MOV DI,AX   ;на 320 используем сдвиги, AX= Y*64,
    SHL AX,2    ;сохраним AX в DI и умножим Y*64 на 4
    ADD DI,AX       ;DI=Y*(256+64)=Y*320.
    MOV AX,BP            
    SUB AX,RADIUS       ;BP=X AX=R-X
    CALL DELTA_CALC ;расчет ошибки накопления по X
    MOV CX,N
CIRC1:  MOV AX,Y
    SUB AX,RADIUS       ;AX=Y-R 
    MUL AX
    NEG AX
    ADD AX,RADIUS2  ;AX=R2-Y2
    CMP DELTA,AX    ;сравнить текущий X2=R2-Y2 с ошибкой 
    JBE A3  ;накопления, если меньше, увеличиваем или 
    ADD BP,DELTA_X;уменьшаем только Y, иначе 
    MOV AX,BP;увеличиваем или уменьшаем еще и X и 
    SUB AX,RADIUS; вычисляем новую ошибку накопления
    CALL DELTA_CALC
A3: CMP DELTA_Y,1
    JNE A1
    ADD DI,320
    JMP SHORT A2
A1: SUB DI,320
A2: MOV BYTE PTR ES:[DI][BP],COLOR;выводим точку на 
    MOV AX,DELTA_Y; экран
    ADD Y,AX
    LOOP CIRC1  ;повторяем цикл
    RET
DRAW_OCT1 ENDP
;процедура прорисовки 1/8 окружности с вычислением 
DRAW_OCT2 PROC  ; координаты X
    MOV AX,Y
    SHL AX,6     ;должно быть DI=Y*320, но для умножения 
    MOV DI,AX   ;на 320 используем сдвиги, AX= Y*64,
    SHL AX,2    ;сохраним AX в DI и умножим Y*64 на 4
    ADD DI,AX       ;DI=Y*(256+64)=Y*320.
    MOV AX, Y           
    SUB AX,RADIUS
    CALL DELTA_CALC
    MOV CX,N
CIRC2:  MOV AX,BP
    SUB AX,RADIUS
    MUL AX
    NEG AX
    ADD AX,RADIUS2  ;AX=R2-(X-R)2
    CMP DELTA,AX
    JBE A5
    MOV AX,DELTA_Y
    ADD Y,AX
    MOV AX,Y
    SUB AX,RADIUS
    CALL DELTA_CALC
    CMP DELTA_Y,1
    JNE A4
    ADD DI,320
    JMP SHORT A5
A4: SUB DI,320
A5: ADD BP,DELTA_X
    MOV BYTE PTR ES:[DI][BP],COLOR
    LOOP CIRC2
    RET
DRAW_OCT2 ENDP
VIDEOR DB 0,0   ;значение текущего видеорежима
DELTA   DW  0   ;ошибка накопления
DELTA_X DW  1   ;смещение по оси X
DELTA_Y DW  1   ;смещение по оси Y
Y   DW  0       ;координата Y
END start


Вернуться к обсуждению:
программа вычерчивающая на экране монитора окружность заданного радиуса и цвета,радиус и цвет с клавиатуры
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2012, 20:40
Готовые ответы и решения:

Вывести в центре экране окружность заданного радиуса с заливкой типа 5
Вывести в центре экране окружность заданного радиуса с заливкой типа 5. tasm

Изобразить на экране окружность и ее радиус; при нажатии на клавишу «Enter» радиус должен вращаться по часово
Изобразить на экране окружность и ее радиус; при нажатии на клавишу «Enter» радиус должен ...

Окружность радиуса R перемещается на экране справа налево
Окружность радиуса R перемещается на экране справа налево, по достижении ею середины экрана слева...

Как сформировать движущуюся окружность радиуса r, центр которой описывает окружность радиуса r1
Помогите!!! Сформировать движущуюся окружность радиуса r, центр которой описывает окружность...

__________________
Помогаю в написании студенческих работ здесь.
1
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.