До этого я использовал таблицу от 0° до 90° (1—10000)
Ищу более быстрый код.
proc pset uses ax di, x,y,color
mov ax,[y]
mov di,ax
shl di,6 ;y*2^6
shl ax,8 ;y*2^8
add di,ax
add di,[x] ;y+x
mov al,byte[color]
stosb ; mov byte [es:di],al
ret
endp
;===============================================================================
proc Circle uses ax bx cx dx, x,y,r,color
locals
dx_ dw 0
dy_ dw ?
trs dw ?
endl
mov ax,[r]
mov [dy_],ax
shr ax,1
neg ax
inc ax
mov [trs],ax ;TRS=-R/2-1
.m1:
mov ax,[x]
add ax,[dx_] ;x+dx
mov bx,[y]
add bx,[dy_] ;y+dy
mov cx,[x]
sub cx,[dx_] ;x-dx
mov dx,[y]
sub dx,[dy_] ;y-dy
stdcall pset,ax,bx,[color]
stdcall pset,ax,dx,[color]
stdcall pset,cx,bx,[color]
stdcall pset,cx,dx,[color]
mov ax,[x]
add ax,[dy_] ;x+dy
mov bx,[y]
add bx,[dx_] ;y+dx
mov cx,[x]
sub cx,[dy_] ;x-dy
mov dx,[y]
sub dx,[dx_] ;y-dx
stdcall pset,ax,bx,[color]
stdcall pset,ax,dx,[color]
stdcall pset,cx,bx,[color]
stdcall pset,cx,dx,[color]
mov ax,[dx_]
add [trs],ax
inc [dx_]
cmp [trs],0
jl @f ;если trs<0
mov ax,[dy_]
sub [trs],ax
dec [dy_]
@@:
mov ax,[dx_]
cmp ax,[dy_]
jle .m1 ;dx>dy
.exit:
ret
endp