# Можете, пожалуйста, прокомментировать код?

Можете, пожалуйста, помочь разобраться с процедурой отрисовки окружности?
``````;-----------------------------Рисуем вертикальные линии-------------------------------------

proc drawHorLine uses es di cx ax,\
x1, x2, y, color

mov     ax, \$A000
mov     es, ax

mov     al, byte[y]
mov     cx, 320
mul     cx
mov     di, ax
mov     cx, [x2]
sub     cx, [x1]

mov     al, byte[color]
rep     stosb

ret
endp

;-------------------------------------------------------------------------------------------

;----------------------------Рисуем окружность-----------------------------------------------

proc drawCircleSim uses bx si di ax,\
x,y,xc,yc,color, mode

mov     ax, [x]
mov     bx, [y]

stdcall putpixel, ax, bx,[color]
cmp     [mode], Mode_NoBorder
je      @F
mov     dx, [xc]
sub     dx, [x]
push    ax
push    dx
push    bx
stdcall drawHorLine, dx, ax, bx, [color]
pop     bx
pop     dx
pop     ax
dec     dx
dec     bx
stdcall drawHorLine, dx, ax, bx, [color]
@@:
mov     ax, [x]
mov     bx, [yc]
sub     bx, [y]
stdcall putpixel, ax,bx,[color]
cmp     [mode], Mode_NoBorder
je      @F
mov     dx, [xc]
sub     dx, [x]
push    ax
push    dx
push    bx
stdcall drawHorLine, dx, ax, bx, [color]
pop     bx
pop     dx
pop     ax
dec     dx
stdcall drawHorLine, dx, ax, bx, [color]
@@:
mov     ax, [xc]
sub     ax, [x]
mov     bx, [yc]
sub     bx, [y]

stdcall putpixel, ax,bx,[color]

mov     ax, [xc]
sub     ax, [x]
mov     bx, [y]

stdcall putpixel, ax,bx,[color]

mov     ax, [y]
mov     bx, [x]

stdcall putpixel, ax,bx,[color]

cmp     [mode], Mode_NoBorder
je      @F
mov     dx, [xc]
sub     dx, [x]
stdcall drawHorLine, dx, ax, bx, [color]
@@:
mov     ax, [y]
mov     bx, [yc]
sub     bx, [x]

stdcall putpixel, ax,bx,[color]

cmp     [mode], Mode_NoBorder
je      @F
mov     dx, [xc]
sub     dx, [x]
stdcall drawHorLine, dx, ax, bx, [color]
@@:
mov     ax, [xc]
sub     ax, [y]
mov     bx, [yc]
sub     bx, [x]

stdcall putpixel, ax,bx,[color]

cmp     [mode], Mode_NoBorder
je      @F

mov     dx, [xc]
sub     dx, [x]
stdcall drawHorLine, ax, dx, bx, [color]
@@:
mov     ax, [xc]
sub     ax, [y]
mov     bx, [x]

stdcall putpixel, ax,bx,[color]

cmp     [mode], Mode_NoBorder
je      @F
mov     dx, [xc]
sub     dx, [x]
stdcall drawHorLine, ax, dx, bx, [color]
@@:
ret
endp

;-------------------------------------------------------------------------------------------

;-------------------------Рисуем круг-------------------------------------------------------

proc drawCircle uses es si ax cx bx dx,\
xc, yc, r, color, mode

mov     ax, [y]
mov     dx, 3
sub     dx, ax ; d = dx
mov     [d], dx
mov     [x], 0
mov     si, [r]
mov     [y], si

.While:
stdcall drawCircleSim, [x], [y], [xc], [yc], [color], [mode]
mov     dx, [d]
cmp     dx, 0  ;if d<0
js      .Minus

mov     ax, [x]  ; else begin
sub     ax, [y]  ;d:=d+4*(x-y)+10;
mov     cx, ax

dec     [y]
jmp     .Skip
.Minus:            ;then d:=d+4*x+6
mov     ax, [x]

.Skip:

inc     [x]
mov     ax, [y]
cmp     [x],ax

js      .While

ret
endp

;-------------------------------------------------------------------------------------------

;--------------------------Рисуем попиксельно-----------------------------------------------

proc putpixel uses es di bx ax cx,\
x,y, color

mov     ax, \$A000
mov     es, ax

mov     al, byte[y]
mov     cx, 320
mul     cx
mov     di, ax

mov     al, byte[color]
mov     [es:di], al

ret
endp``````
• Вопрос задан
• 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
@andk
Что конкретно вы хотите понять?
В приведённом тексте приведены 4 подпрограммы для низкоуровневого рисования.
"drawHorLine" выводит горизонтальную линию длиной от x1 до x2, вторая координата y, цветом color.
"putpixel" выводит одиночный пиксель по координатам x,y и цветом color
"drawCircleSim" рисует окружность пользуясь двумя предыдущими подпрограммами
"drawCircle" рисует круг? пользуясь тремя предыдущими подпрограммами
Грубо вот так.
Размерность параметров и железо, под которым всё это работает, из кода не понятно.
На вскидку, что-то из серии старинного CGA-EGA с разрешением 320х240. Могу ошибаться.
Ответ написан
Ваш ответ на вопрос

### Войдите, чтобы написать ответ

Похожие вопросы
от 80 000 до 100 000 ₽
от 150 000 до 250 000 ₽
от 120 000 до 200 000 ₽
15 июн. 2021, в 00:37
100000 руб./за проект
14 июн. 2021, в 23:21
700 руб./в час
14 июн. 2021, в 20:22
20000 руб./за проект