Помогите с програмкой на ассемблере!

  • Автор темы Guest_Merlin_*
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

Guest_Merlin_*

#1
Народ помогите нужна прога на ассемблере которая рисует небольшой круг на экране и через определенное время перемещает его в рандомную позицию. Очень нужно, горю на допуске к эзамену! Если что у кого есть вышлите на akron_m@mail.ru
 
L

logosman

#2
Когда-то давно написал под DOS на TASM. Пишет напрямую в видео память 0xa000 (real mode).

Без закраски.

; IN: XC,YC - Position
; R - RADIUS
; COLOR - Color of circle
xc EQU ss:[bp+8]
yc EQU ss:[bp+6]
R EQU ss:[bp+4]
Color EQU ss:[bp+2]

CIRCLE_PROC PROC
mov bp,sp

mov ax,yc
sub ax,R
mov [y],ax
inc [y]

mov ax,xc
sub ax,R
inc ax
mov [xb],ax

xor edx,edx

mov cx,R
shl cx,1
dec cx
@FOR_Y:
push cx

mov ax,[xb]
mov [x],ax

mov cx,R
shl cx,1
dec cx
@FOR_X:

movzx eax,[x]
movzx ebx,word ptr xc
sub eax,ebx
imul eax

xchg eax,esi

movzx eax,[y]
movzx ebx,word ptr yc
sub eax,ebx
imul eax

add eax,esi

movzx ebx,word ptr R
imul ebx,ebx

cmp eax,ebx
ja @NOT_CIRCLE

movzx ebx,word ptr R
dec ebx
imul ebx,ebx

cmp eax,ebx
jb @NOT_CIRCLE

imul ax,[y],320
add ax,[x]
xchg di,ax

mov bx,ds

mov ax,0a000h
mov ds,ax

mov ax,color
mov byte ptr [di],al

mov ds,bx

@NOT_CIRCLE:
inc [x]
loop @FOR_X

pop cx

inc [y]
loop @FOR_Y

ret 8

xb dw ?
x dw ?
y dw ?
ENDP

circle MACRO x,y,R,color
push x y R color
call circle_proc
endm


С закраской:

; IN: XC,YC - Position
; R - RADIUS
; COLOR - Color of circle
xc EQU ss:[bp+8]
yc EQU ss:[bp+6]
R EQU ss:[bp+4]
Color EQU ss:[bp+2]

FILLCIRCLE_PROC PROC
mov bp,sp

mov ax,yc
sub ax,R
mov [y],ax
inc [y]

mov ax,xc
sub ax,R
inc ax
mov [xb],ax

xor edx,edx

mov cx,R
shl cx,1
dec cx
@FOR_Y:
push cx

mov ax,[xb]
mov [x],ax

mov cx,R
shl cx,1
dec cx
@FOR_X:

movzx eax,[x]
movzx ebx,word ptr xc
sub eax,ebx
imul eax

xchg eax,esi

movzx eax,[y]
movzx ebx,word ptr yc
sub eax,ebx
imul eax

add eax,esi

movzx ebx,word ptr R
imul ebx,ebx

cmp eax,ebx
ja @NOT_CIRCLE

imul ax,[y],320
add ax,[x]
xchg di,ax

mov bx,ds

mov ax,0a000h
mov ds,ax

mov ax,color
mov byte ptr [di],al

mov ds,bx

@NOT_CIRCLE:
inc [x]
loop @FOR_X

pop cx

inc [y]
loop @FOR_Y

ret 8

xb dw ?
x dw ?
y dw ?
ENDP

fillcircle MACRO x,y,R,color
push x y R color
call fillcircle_proc
endm

На почту кидать некогда.
 
Статус
Закрыто для дальнейших ответов.