⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 88.asm

📁 汇编实现的奥运五环
💻 ASM
字号:
data 	segment
r	dw	? ;半径
d	dw	?
a	dw	?
b	dw	?
x1	dw	100 ;圆心
y1	dw	60
x2	dw	?
y2	dw	?
x3	dw	?
y3	dw	?
x4	dw	?
y4	dw	?
x	dw	?
y	dw	?
m	dw	?
n	db	? ;象素颜色值
k	dw      ? ;传递半径大小
l	db	? ;传递圆宽度大小
string  db       'Please input radius(10=<r<=45):','$'
string2 db      0dh,0ah,'please input the nums of circuls(q is quit):','$'
string3	db	0dh,0ah,'Please input the right nums:','$'
string4 db	0dh,0ah,'Please input the num of skin(s,m,b):','$'
data	ends
code	segment
	assume	cs:code,ds:data
main	proc	far
start:	mov	ax,data
	mov	ds,ax
	call	clear	
	mov	si,0
	mov	di,0
	mov	si,x1
	mov	x3,si
	mov	si,y1
	mov	y3,si
	mov	si,0	
	call	circul
	mov	ah,4ch
	int	21h
main	endp
clear 	proc	near	
	mov	ax,0600h
	mov	cx,0			
	mov	dx,184fh
	mov	bh,7
	int	10h
	ret
clear	endp

circul	proc	near
	push	si                            
	mov	ah,0  ;设置显示方式
	mov	al,13h ;320*200
	int	10h
	lea	dx,string
	mov	ah,9
	int	21h
	call	decibin ;输入半径
	mov	k,bx
	lea	dx,string4
	mov	ah,9
	int 	21h
	mov	ah,1
	int	21h
	mov	l,al    ;宽度大小
	lea	dx,string2
	mov	ah,9
	int	21h
ok:	
	mov	ah,1
	int	21h
	cmp	al,'1'
	jne	t2
	mov	n,9h
	mov	x,0
	mov	bx,k
	mov	y,bx
	mov	si,x3
	mov	x1,si
	mov	si,y3
	mov	y1,si
	jmp	abcc
t2:	cmp	al,'2'
	jne	t3	
	mov	n,7h
	mov	x,0
	mov	bx,k
	mov	y,bx
	mov	si,x3
	mov	x1,si
	mov	si,y3
	mov	y1,si
	add	y1,bx
	add	y1,bx
	shr	bx,1
	add	y1,bx
	jmp	abcc
t3:	cmp	al,'3'
	jne	t4
	mov	n,29h
	mov	x,0
	mov	bx,k
	mov	y,bx
	mov	si,x3
	mov	x1,si
	mov	si,y3
	mov	y1,si
	add	y1,bx
	add	y1,bx
	add	y1,bx
	add	y1,bx
	add	y1,bx
	jmp	abcc
t4:	cmp	al,'4'
	jne	t5
	mov	n,6h
	mov	x,0
	mov	bx,k
	mov	y,bx
	mov	si,x3
	mov	x1,si
	mov	si,y3
	mov	y1,si
	add	x1,bx
	add	y1,bx
	shr	bx,1
	shr	bx,1
	add	y1,bx
	jmp	abcc
t5:	cmp	al,'5'
	jne	tq
	mov	n,30h
	mov	x,0
	mov	bx,k
	mov	y,bx
	mov	si,x3
	mov	x1,si
	mov	si,y3
	mov	y1,si
	add	x1,bx
	add	y1,bx
	add	y1,bx
	add	y1,bx
	shr	bx,1
	add	y1,bx
	shr	bx,1
	add	y1,bx
	jmp	abcc
tq:	cmp	al,'q'
	jne	ok1
abccd:	pop	si
	ret	
abcc:	call	move_shape
ok1:	jmp	ok                             

circul	endp

decibin	 proc	near  ;十进制转换二进制,存入BX 
	mov 	bx,0
new:
	mov 	ah,1
	int 	21h
	mov 	dl,al
	cmp	al,0dh
	jne	next
	cmp	bx,0   ;限制单位数
	je	exit2
next:	cmp 	al,30h
	jl  	exit2
	cmp 	al,39h
	jg  	exit2	
	sub 	al,30h
	cbw
	xchg 	ax,bx
	mov 	cx,10
	mul 	cl
	xchg 	ax,bx	
	add 	bx,ax
	cmp	bx,10 ;限制两位数
	jge	exit1
	jmp 	new
exit2:  lea	dx,string3
	mov	ah,9
	int	21h
	mov	bx,0
	jmp	new
exit1:	cmp	bx,45
	jg	exit2
	ret
decibin	   endp 
move_shape	proc	near
	mov	si,k
	mov	r,si	                              
	mov	si,1
	sub	si,r
	mov	d,si
lin3:	mov	si,x
	mov	di,y
	add	si,x1
	add	di,y1
	mov	dx,si
	mov	cx,di
	mov	si,x
	mov	di,y	
	cmp	si,di
	jg	lin
	call	hua	
	cmp	d,0
	jge	lin1
	mov	si,2
	mov	ax,0
	mov	AX,SI
	imul	x
	mov	si,ax
	add	si,3
	add	d,si
lin2:   inc	x
	jmp	lin3
lin1:	mov	si,2
	mov	ax,0
	mov	ax,si
	mov	di,x
	sub	di,y
	imul	di
	mov	si,ax
	add	si,5
	add	d,si
	dec	y
	jmp	lin2
lin:	                            
	ret
move_shape	endp
huadian2 proc	near
	mov	ah,0CH
	mov 	AL,n
	MOV	BH,0
	int	10h
	ret
huadian2 endp
huadian	proc	near
	cmp	l,'m'
	je	mmm
	cmp	l,'b'
	je	bbb	
	jmp	sss
	ret
mmm:	call	huadian2
	mov	x4,dx
	mov	y4,cx
	add	dx,1
	call	huadian2
	add	cx,1
	call	huadian2
	mov	dx,x4
	mov	cx,y4
	add	cx,1
	call	huadian2
	mov	dx,x4
	mov	cx,y4
	ret
bbb:	call	huadian2
	mov	x4,dx
	mov	y4,cx
	add	cx,1
	call	huadian2
	sub	cx,2
	call	huadian2
	add	dx,1
	call	huadian2
	inc	cx
	call	huadian2
	inc	cx
	call	huadian2
	add	dx,1
	call	huadian2
	dec	cx
	call	huadian2
	dec	cx
	call	huadian2
	mov	dx,x4
	mov	cx,y4
	ret
sss:	call	huadian2
	ret
huadian	endp
hua 	proc	near
	call	huadian ;画第一点  (x,y)
	mov	x2,dx
	mov	y2,cx
	sub	dx,x1
	sub	cx,y1
	xchg	dx,cx
	add	dx,x1
	add	cx,y1	
	call	huadian  ;画对称点(y,x)
	
	mov	dx,x2
	mov	cx,y2	
	sub	cx,y1
	sub	dx,x1
	xchg	dx,cx
	mov	m,dx
	add	m,dx
	sub	dx,m
	add	dx,x1
	add	cx,y1
	call	huadian  ;画点(-y,x)
	
	sub	cx,y1
	mov	m,cx
	add	m,cx
	sub	cx,m
	add	cx,y1
	call	huadian  ;画点(-y,-x)
	
	mov	dx,x2
	mov	cx,y2
	sub	dx,x1
	sub	cx,y1
	mov	m,cx
	add	m,cx
	sub	cx,m
	add	cx,y1
	add	dx,x1
	call	huadian  ;画点 (x,-y)
	
	sub	dx,x1
        mov	m,dx
	add	m,dx
	sub	dx,m
	add	dx,x1
	call	huadian  ;画点(-x,-y)
        
  	mov	dx,x2
	mov	cx,y2
	sub	dx,x1
	sub	cx,y1
	mov	m,dx
	add	m,dx
	sub	dx,m
	add	dx,x1
	add	cx,y1
	call	huadian  ;画点 (-x,y)	

	mov	dx,x2
	mov	cx,y2
	sub	dx,x1
	sub	cx,y1
	xchg	dx,cx
	mov	m,cx
	add	m,cx
	sub	cx,m
	add	dx,x1
	add	cx,y1
	call	huadian  ;画点 (y,-x)
	
	call	delay
	ret
hua	endp

delay	proc	near  ;延时程序
	push	dx
	push	cx
	mov	dx,10000
dl1:	mov	cx,6500
dl2:	loop	dl2
	dec	dx
	jnz	dl1
	pop	cx
	pop	dx
	ret
delay	endp
code	ends
	end	start
	
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -