Нарисовать эллипс

Тема в разделе "WASM.DOS/BIOS/Vesa/ports", создана пользователем dessaber, 20 ноя 2011.

  1. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    dessaber
    Это как? Если на русскую большую "У" нажать? "У" ASCII код 93hex=147 минус код нуля (=48) 147-48=99 да еще умножим на коэффициент для ввода R=10?
     
  2. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.797
    Используя симметрию количество вхождений в цикл можно сократить с 630 до 157. Кроме того, ни к чему в стек FPU толкать, чтобы тут же извлечь переменную t (угол поворота), достаточно это сделать при инициализации цикла
    Код (ASM):
    1.  mov ax, 12h    ;видеорежим 640*480
    2.  int 10h    
    3.  finit              ;инициализация сопроцессора
    4.  mov si,157    ;число итераций (обусловлено шагом 0.01)
    5.  fldz           ;st(0)=0
    6.  mov ax,0C01h   ;рисуем синюю точку
    7. next: fld st(0)      ;st(0)=st(1)=t
    8.  fsincos        ;st(0) = sin(t), st(1) =cos(t) , st(2)=t  
    9.  fimul b        ;st(0) = b*sin (t), st(1) = cos(t), st(2)=t
    10.  fistp tmp      ;st(0) -> tmp
    11.  mov dx, tmp    ;координата у
    12.  mov di,dx
    13.  add dx, 240    ;середина экрана (по вертикали)
    14.  fimul a        ;st(0) = a*cos(t), st(1)=t
    15.  fistp tmp
    16.  mov cx,tmp    ;координата х
    17.  mov bx,cx
    18.  add cx,320    ;середина экрана (по горизонтали)
    19.  int 10h       ;координаты  х  y
    20.  sub cx,bx    ;cx=320
    21.  sub cx,bx    ;cx=320-x
    22.  int 10h       ;координаты -х  y
    23.  sub dx,di     ;dx=240
    24.  sub dx,di     ;dx=240-y
    25.  int 10h       ;координаты -х -y
    26.  lea cx,[bx+320]
    27.  int 10h       ;координаты  х -y
    28.  fadd step     ;st(0) = step + st(0)
    29.  dec si        ;уменьшаем число итераций
    30.  jnz next    
    31.  mov ah,0
    32.  int 16h
    33.  mov ax,3
    34.  int 10h
    35.  mov ah, 4ch ;корректный выход
    36.  int 21h