Всем доброго времени суток!Прежде всего не сильно понимаю,зачем рисовать на ассемблере?
Никогда на ассемблере не рисовал,но вот теперь столкнулся.(пишу на ассемблере MASM)
Надо нарисовать поляну из 3-x разных по цвету треххлистников(их еще называют клевер,трехлепестковая роза)
Почитав в интернете про это я понял что надо использовать для этого математические формулы.
Формулы я нашел
r = a cos 3θ (радиус липестка,как я понял)
нашел формулу площади( ( [ATTACH]1840[/ATTACH] )
Помогите,нарисуте один трилистник,что бы я разобрался как их вообще рисовать.Пожалуйста,помогите,раньше не сталкивался с таким
Рисование на ассемблере. Трилистник(клевер,трехлепе стковая роза)
Модератор: Andy
Формула, конечно, жесть)) Ох уж эти математики, вечно их тянет с виду простую интерпретацию превратить в трехэтажное унылое Г. Вообще, в полярных координатах, трехлистник выражается зависимостью R = sin(3A), где А - текущий угол в полярных координатах, а R - получаемый радиус. Теперь то понятно как рисовать?
во-вторых не указан микропроцессор, операционная система
во-вторых не указан микропроцессор, операционная система
It's a long way to the top if you wanna rock'n'roll
.686()somewhere писал(а):Формула, конечно, жесть)) Ох уж эти математики, вечно их тянет с виду простую интерпретацию превратить в трехэтажное унылое Г. Вообще, в полярных координатах, трехлистник выражается зависимостью R = sin(3A), где А - текущий угол в полярных координатах, а R - получаемый радиус. Теперь то понятно как рисовать?
во-вторых не указан микропроцессор, операционная система
если вы об этом.
ОС Windows
Искал в интернете инфу по поводу рисования.
Сделал по примеру,вывод спирали.Вот код (MASM)
[ASM]
.686 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам’яті
; та угоди ОС Windows
option casemap:none ; відмінність малих та великих літер
option casemap:none ; отличие строчных и прописных букв
include C:\masm32\include\windows.inc ; файлы структур, констант
include C:\masm32\include\kernel32.inc ; системные функции приложений
include C:\masm32\include\user32.inc ; файлы интерфейса
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\kernel32.lib
ExitProcess proto

OperDigs proto



.data ; директива визначення даних
delta dd 0.001 ;шаг
const3 dd 3.0
const200 dd 200.0
x dw 0 ;координаты точки
y dw 0
.code ; директива початку програми
start: mov ax,12h ;инициализация графического режима 640х480
int 10h
mov si,0C45h/2 ;количество итераций =Pi/0.001
mov ax,0C03h
finit ;инициализация сопроцессора
fldz ;alpha = 0
l1: fld st ;st(0)=alpha st(1)=alpha
fmul const3 ;st(0)=alpha*3 st(1)=alpha
fsin ;st(0)=sin(alpha*3) st(1)=alpha
fmul const200 ;st(0)=200*sin(alpha*3) st(1)=alpha
fxch st(1) ;st(0)=alpha st(1)=200*sin(alpha*3)
fld st ;st(0)=st(1)=alpha st(2)=200*sin(alpha*3)
fxch st(2) ;st(0)=200*sin(alpha*3) st(1)=alpha st(2)=alpha
fxch st(1) ;st(0)=alpha st(1)=200*sin(alpha*3) st(2)=alpha
fsincos ;st(0)=cos(alpha) st(1)=sin(alpha) st(2)=200*sin(alpha*3) st(3)=alpha
fmul st,st(2) ;st(0)=200*cos(alpha)*sin(alpha*3) st(1)=sin(alpha) st(2)=200*sin(alpha*3) st(3)=alpha
fistp x ;X=200*cos(alpha)*sin(alpha*3) st(0)=sin(alpha) st(1)=200*sin(alpha*3) st(2)=alpha
fmul ;st(0)=200*sin(alpha)*sin(alpha*3) st(1)=alpha
fistp y ;Y=200*sin(alpha)*sin(alpha*3) st(0)=alpha
mov cx,x
mov di,cx
neg di
add cx,320 ;координаты точки относительно центра экрана
mov dx,y
add dx,200
int 10h ;выводим зеленую точку
lea cx,[di+320]
int 10h ;выводим зеленую точку
fadd delta ;вычисляем новое значение alpha
dec si
jnz l1 ;цикл пока SI не равно нулю
mov ah,0 ;ожидание нажатия клавиши
int 16h
mov ax,3;перевод обратно в TextMode
int 10h
exit: int 20h ;стандартный выход
END start
[/ASM]
Но и тут не без греха,ошибка
"cannot use 16-bit register with a 32-bit address"
Не могу ее решить....
Причем здесь Windows и int 10h, int 20h ? Вроде в ОС Windows видеорежимы не переключаются и создается и используется хендл окна для рисования. Или это просто копипаста?
Где именно это пишет?"cannot use 16-bit register with a 32-bit address"
It's a long way to the top if you wanna rock'n'roll
Понятно что в MASM - надо было сказать, что в 52-ой строке. Только по моим подсчетам там инструкция "int 10h" и такой ошибки генерится не может. Может у вас в файле по-другому?
It's a long way to the top if you wanna rock'n'roll
Нет в файле все так.
Не пойму.
Не пойму.
Ну что, лень посмотреть какая инструкция в 52-ой строке?
It's a long way to the top if you wanna rock'n'roll