.model small.stack 256h
.data
message1 db "lotfan satr mored nazar ravared konid !!!", "$"
message2 db "lotfan sotun mored nazar ravared konid !!!", "$"
MSG db "baraye rasm dayere lotfan yeki az kelid haye keyboard ra befesharid",'$'
.code
main proc far
mov ax,@data
mov ds,ax
mov AX,seg message1
mov DS,AX
mov AH,09
lea DX,message1
int 21h
mov ax, @data ;this line may depend on actual assembler (works with MASM, check for exact syntax of your assembler if it doesn't work for you)
mov ds, ax
mov ah, 0Ah ; Function 0Ah
int 21h
mov AX,seg message2
mov DS,AX
mov AH,09
lea DX,message2
mov ax,50
mov ax, @data ;this line may depend on actual assembler (works with MASM, check for exact syntax of your assembler if it doesn't work for you)
mov ds, ax
mov ah, 0Ah ; Function 0Ah
int 21h
mov ah,02
mov ah,9h
lea dx,MSG
int 21h
mov ah,1h
int 21h
mov ah,0h
mov al,12h
int 10h
mov ax,50
push ax ;Ox
push ax ;Oy
mov ax,20 ;size
push ax
mov al,5
mov ah,0
push ax
mov al,5
mov ah,0
push ax
mov ax,1h ;color
push ax
call circle
mov ah,8h
int 21h
mov ax,4c00h
int 21h
main endp
circle proc
push bp
mov bp,sp
push ax
push bx
push cx
push dx
push si
push di
pushf
mov ax,[bp+8]
mov bx,1000
imul bx
mov cx,[bp+6]
idiv cx
push ax
xchg ax,cx
mov cx,[bp+8]
imul bx
idiv cx
mov [bp+6],ax
pop ax
mov [bp+8],ax
mov ax,[bp+10]
mov bx,1000
imul bx
xor di,di
cr5:
push ax
push dx
xor bx,bx
add ax,500
adc dx,bx
mov bx,1000
idiv bx
mov bx,ax
add ax,[bp+14]
mov dx,[bp+12]
sub dx,di
mov cx,ax
mov al,[bp+4]
mov ah,0
push dx
push cx
push ax
call put_pixel
sub cx,bx
sub cx,bx
push dx
push cx
push ax
call put_pixel
add dx,di
add dx,di
push dx
push cx
push ax
call put_pixel
add cx,bx
add cx,bx
push dx
push cx
push ax
call put_pixel
xchg cx,bx
inc di
mov ax,di
mov bx,[bp+6]
imul bx
idiv cx
xor dx,dx
mov si,ax
idiv bx
cmp ax,1
jae cr7
pop dx
pop ax
neg si
mov bx,-1
add ax,si
adc dx,bx
jmp cr5
cr7:
pop dx
pop ax
mov ax,di
mov bx,1000
imul bx
mov di,cx
dec di
cr8:
push ax
push dx
xor bx,bx
add ax,500
adc dx,bx
mov bx,1000
idiv bx
mov bx,ax
add ax,[bp+12]
mov cx,[bp+14]
add cx,di
mov dx,ax
mov al,[bp+4]
mov ah,0
push dx
push cx
push ax
call put_pixel
sub cx,di
sub cx,di
push dx
push cx
push ax
call put_pixel
sub dx,bx
sub dx,bx
push dx
push cx
push ax
call put_pixel
add cx,di
add cx,di
push dx
push cx
push ax
call put_pixel
sub dx,[bp+12]
neg dx
xchg cx,dx
or di,di
js cr11
dec di
mov ax,di
mov bx,[bp+8]
imul bx
idiv cx
mov si,ax
pop dx
pop ax
xor bx,bx
or si,si
jns cr10
mov bx,-1
cr10:
add ax,si
adc dx,bx
jmp cr8
pop dx
pop ax
jmp ci_ret
cr11:
pop dx
pop ax
ci_ret:
popf
pop di
pop si
pop dx
pop cx
pop bx
pop ax
pop bp
ret 12
circle endp
put_pixel proc
push bp
mov bp,sp
push ax
push bx
push cx
push dx
pushf
mov bh,0
mov ax,[bp+4]
mov cx,[bp+6]
mov dx,[bp+8]
mov ah,0ch
int 10h
popf
pop dx
pop cx
pop bx
pop ax
pop bp
ret 6
put_pixel endp
end main