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

📄 a2.asm

📁 在屏幕上开出三个窗口:起止坐标为(5
💻 ASM
字号:
;*****************************************************************************
;A2:在屏幕上开出三个窗口:起止坐标为(5,10)和(15,30),
;(5,50)和(15,70),(18,15)和(22,65)。要求可用
;左右方向键选择左窗口或右窗口为当前活动窗口。当一行字符显示
;满后(左右窗口一行显示20个字符,下窗口显示50个字符),窗口
;自动向上卷动一行,输入的字符仍显示与最低一行,窗口最高一行
;向上卷动后消失。用上下方向键可使活动窗口及下窗口内容同时
;上卷或下卷。输入命令串‘END’后结束程序。(huangyujie)
;*****************************************************************************
draw_win  macro win_ulr, win_ulc,win_lrr,win_lrc
	mov	ah,6
	mov	al,win_lrr
	sub	al,win_ulr
	add	al,1
	mov	ch,win_ulr
	mov	cl,win_ulc
	mov	dh,win_lrr
	mov	dl,win_lrc
	mov	bh,70h
	int	10h 
	endm
;----------------------------------------------------------------------------------------
scroll_win  macro win_ulr, win_ulc,win_lrr,win_lrc,downup
	mov	ah,downup
	mov	al,1
	mov	ch,win_ulr
	mov	cl,win_ulc
	mov	dh,win_lrr
	mov	dl,win_lrc
	mov	bh,70h
	int	10h
	endm
;---------------------------------------------------------------------------------------
pos_curse macro x,y
	mov	ah,2
	mov	dh,x
	mov	dl,y
	mov	bh,0
	int	10h
	endm
;---------------------------------------------------------------------------------------
 get_char  macro
	mov	ah,0h
	int	16h
	mov	dx,ax
	mov	string,al
	mov	ah,9        ;display al
	mov	bh,0       ;page 0
	mov	bl,70h
	mov	cx,1        ;number of repeat char
	int	10h
	cmp	al,1bh     ;Esc_key
	 jz	exit
	cmp	dh,4bh
	je	win1
	cmp	dh,4dh
	je	win2
	cmp	dh,48h
	je	rolup
	cmp	dh,50h
	je	roldw
	endm
;---------------------------------------------------------------------------------------
display	macro	opr
	pos_curse dwx,dwy
	mov	ah,9
	mov	al,opr
	mov	bh,0       ;page 0
	mov	bl,70h
	mov	cx,1        ;number of repeat char
	in	10h
	endm
;*****************************************************************************
datarea	segment
	lwx	db       ?
	lwy	db       ?
	rwx	db       ?
	rwy	db       ?
	dwx	db       ?
	dwy	db       ?
	flag	db       ?
	string	db       ?
	dwup	db       ?
	messerror  db     13,10,'Input Error!',13,10,'$'
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

rolup:	mov	dwup,6
	call	clear_screen
	mov	flag,1
	draw_win  5,10,15,30
	draw_win  5,50,15,70
	draw_win 18,15,22,65
	mov	lwx,15
	mov	lwy,10
	mov	rwx,15
	mov	rwy,50
	mov	dwx,22
	mov	dwy,15
	jmp	get1

roldw:	mov	dwup,7
	call	clear_screen
	mov	flag,1
	draw_win  5,10,15,30
	draw_win  5,50,15,70
	draw_win 18,15,22,65
	mov	lwx,5
	mov	lwy,10
	mov	rwx,5
	mov	rwy,50
	mov	dwx,18
	mov	dwy,15
 get1:
	pos_curse lwx,lwy
	get_char
	display	string
	add	dwy,1
	add	lwy,1
	cmp	lwy,30
	jne	get1
	jmp	win1
win1:  
	cmp	lwy,30
	jne	get2
	mov	lwy,10
	scroll_win 5,10,15,30,dwup
get2:  
	pos_curse lwx,lwy
	get_char
	add	lwy,1
	cmp	dwy,65
	jne	dcon1
	mov	dwy,15
	scroll_win 18,15,22,65,dwup
dcon1:
	display	string
	add	dwy,1
	cmp	lwy,30
	jne	get2
	jmp	win1
win2:  
	cmp	rwy,70
	jne	get3
	mov	rwy,50 
	scroll_win 5,50,15,70,dwup
get3:   
	pos_curse rwx,rwy
	get_char
	add	rwy,1
	cmp	dwy,65
	jne	dcon2
	mov	dwy,15
	scroll_win 18,15,22,65,dwup
dcon2:
	display	string
	add	dwy,1
	cmp	rwy,70
	jne	get3
	jmp	win2
exit:
	mov	ax,3h
	int	10h
	ret
	main	endp
;---------------------------------------------------------------------------------------
clear_screen  proc  near
	push	ax
	push	bx
	push	cx
	push	dx
     
	mov	ah,6
	mov	al,0      ;blank screen
	mov	bh,7     ;blank line
	mov	ch,0
	mov	cl,0
	mov	dh,24
	mov	dl,79
	int	10h
          
	mov	dx,0
	mov	ah,2
	int	10h

	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
clear_screen  endp
;**************************************************************************
prognam	ends
;**************************************************************************
	end	start

⌨️ 快捷键说明

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