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

📄 a1.asm

📁 用汇编语言实现:通过键盘输入任意两点坐标
💻 ASM
字号:
;*************************************************************************
;A1:用汇编语言实现:通过键盘输入任意两点坐标,
;在屏幕上开一个窗口,并设定控制窗口的颜色,要求
;屏幕呈现颜色的变化。(huangyujie)
;*************************************************************************
datarea  segment
   num	dw     4 dup(?)
   mess1	db     13,10,'Enter win_ulr: $'
   mess2	db     13,10,'Enter win_ulc: $'
   mess3	db     13,10,'Enter win_lrr: $'
   mess4	db     13,10,'Enter win_lrc: $'
   merror	db     13,10,'Enter number 1 to 8 to change color! $'
   win_high         dw     ?
   win_width        dw     ?
   color	db     ?
datarea   ends
;**********************************************************************
prognam	segment
;------------------------------------------------------------------------------
main	proc	far
            assume cs:prognam,ds:datarea
start:
	push	ds
	sub	ax,ax
	
	push	ax
	mov 	ax,datarea
	mov	ds,ax
            
	call	input
	mov	ax,13h
	int	10h
	mov	ax,0a000h
	mov	es,ax
	cld
	call	screen_color
	mov	ax, num[4]
	sub	ax,num[0]
	add	ax,1
	mov	win_high,ax
	mov	ax, num[6]
	sub	ax,num[2]
	add	ax,1
	mov	win_width,ax
	mov	color,00h
change:
	mov 	al,color
	call	draw_win
	mov	ah,8h
	int 	21h
	cmp	al,20h
	 je	next
	mov	color,al
	cmp	al, 1bh     ;ESC_key
	je	exit
	jmp	change
next:	add	color,1
	jmp	change
exit:     
	mov	ax,3
	int	10h
	ret            
	main	endp
;--------------------------------------------------------------------------------------
input	proc	near
	mov	si,0
get_char:
	cmp	si,0
	jz	x1
	cmp	si,2
	jz	y1
	cmp	si,4
	 jz	x2
	cmp	si,6
	jz	y2
x1:	lea	dx,mess1
	jmp	enter
y1:	lea	dx,mess2
	jmp	enter
x2: 	lea	dx,mess3
	jmp	enter
y2:	lea	dx,mess4
	jmp	enter
enter:
	mov	ah,09h
	int	21h
	call	decibin
	cmp	dl,13
	je	store
	add	si,2
	cmp	si,8
	jnz	get_char        
store:
	mov	num[si],bx
	add	si,2
	cmp	si,8
	jnz	get_char 
	 ret
input	endp
;------------------------------------------------------------------------------------
decibin	proc	near
	mov	bx,0
newchar:
	 mov	ah,1
	 int	21h
	mov	dl,al
	sub	al,30h
	cmp	al,0
	jl	exit1
	cmp	al,9d
	 jg	exit1
	cbw
	xchg	ax,bx
	mov	cx,10d
	mul	cx
	xchg	ax,bx
	add	bx,ax
	 jmp	newchar
exit1: 	ret
decibin	endp
;------------------------------------------------------------------------------------
draw_win	proc	near
	mov	cx,num[2]
	mov	si, num[0]
	push	ax
	mov	ax,320
	mul	si
	mov	di,ax
	add	di,cx
	pop	ax
	push	di
	mov	bx,win_high   ;r2-r1+1
win1:
	mov	cx,win_width   ;c2-c1+1
	 rep	stosb
	pop	di
	add	di,320
	push	di
	dec	bx
	jnz	win1
	pop	di
	ret
draw_win endp
;-----------------------------------------------------------------------------------
screen_color   proc near
 	 mov	ch,0
	mov	cl,0h
	mov	dh,0h
	mov	bx,0h
	mov	ax,1010h
	mov	dl,64

 prog:
	int	10h
	inc	ch
	inc	bx
	dec	dl
	jnz	prog

	mov	di,0
	mov	al,3fh
	call	band
	ret
screen_color endp
;----------------------------------------------------------------------------------
band	proc  near
	mov	cx,64
loo1:
	mov	bx,960
loo2:
	stosb
	dec	bx
	jnz	loo2
	dec	al
	loop	loo1
	ret
band	endp
;********************************************************************
prognam  ends
;********************************************************************
	end	start

⌨️ 快捷键说明

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