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

📄 3.4屏幕窗口程序.asm

📁 清华汇编实验源代码 字符串匹配 查询电话号码 窗口屏幕程序
💻 ASM
字号:
;屏幕窗口程序
datas segment
	cury db 15         ;光标初始位置
	curx db 50
	;
	lx db 10        ;记录左窗口当前光标位置
	ly db 15
	rx db 50        ;记录右窗口当前光标位置
    ry db 15
	dwx db 15       ;记录下窗口当前光标位置
	dwy db 22
	;
	ulrow db 0
	ulcol db 0
	lrrow db 0
	lrcol db 0	
	;
	lefted db 0     ;记录光标当前是左还是右的状态
	righted db 0
datas ends
;----------------------------------------------------------------------
clear macro ulrow,ulcol,lrrow,lrcol           ;宏指令clear 清屏
	mov ah,6
	mov al,0
	mov ch,ulrow
	mov cl,ulcol
	mov dh,lrrow
	mov dl,lrcol
	mov bh,7
	int 10h
endm
;------------------------------------------------------------------------
scroll macro cont,ulrow,ulcol,lrrow,lrcol    ;宏指令 scroll 向上卷动一行
	mov ah,6
	mov al,cont
	mov ch,ulrow
	mov cl,ulcol
	mov dh,lrrow
	mov dl,lrcol
	mov bh,60h
	int 10h
endm
;------------------------------------------------------------------------
pos_curce macro row,col                      ;宏指令 pos_curce 光标定位
	mov ah,2
	mov dh,row
	mov dl,col
	mov bh,0
	int 10h
endm
;------------------------------------------------------------------------
codes segment
;************************************************************************
	assume cs:codes,ds:datas
;------------------------------------------------------------------------
main proc far
start: 
	push ds
	sub ax,ax
	push ax 
	;
	mov ax,datas
	mov ds,ax
	;
	clear 0,0,24,79
	scroll 10,5,10,15,30       ;左窗口
	scroll 10,5,50,15,70       ;右窗口
	scroll 4,18,15,22,65       ;下窗口
	pos_curce cury,curx        ;初始置光标在右窗口最下行开始
get_char:                      ;输入键盘上的字符
	mov ah,0
	int 16h
	;
	cmp ah,4bh				   ;判断是否是←键
	jnz not_left
	cmp lefted,1
	jz get_char                ;已是左窗口,再按←键没反应
	;
	push ax
	mov al,cury   
	mov ry,al                  ;保存右窗口光标位置
	mov al,curx
	mov rx,al
	mov al,ly                  ;取左窗口光标位置
	mov cury,al
	mov al,lx
	mov curx,al
	pop ax
	mov lefted,1
	mov righted,0
	pos_curce cury,curx        ;跳到左窗口光标位置
	jmp get_char
not_left:
	cmp ah,4dh				   ;判断是否是→键
	jnz not_right
	cmp righted,1
	jz get_char                ;已是右窗口,再按→键没反应
	;
	push ax
	mov al,cury                ;保存左窗口光标位置
	mov ly,al
	mov al,curx
	mov lx,al
	mov al,ry                  ;取右窗口光标位置
	mov cury,al
	mov al,rx
	mov curx,al
	pop ax
	mov righted,1
	mov lefted,0
	pos_curce cury,curx        ;跳到右窗口光标位置
	jmp get_char
not_right:
	cmp ah,01                  ;Esc键退出
	jnz display
	ret
display:                       ;显示所输入的字符
	mov ah,0ah
	mov bh,0
	mov cx,1
	int 10h
	inc curx                   ;显示一个字符后当前列+1
	;
	pos_curce dwy,dwx          ;同时在下窗口也显示相同字符
	mov ah,0ah
	mov bh,0
	mov cx,1
	int 10h
	inc dwx                    
	cmp dwx,65                 
	ja down                    ;满行后换行即上卷一行
	pos_curce cury,curx        ;返回当前光标继续
	;
	mov al,curx
	cmp al,30
	jle continue
	cmp al,50
	jle left
	cmp al,70
	jle continue
	ja right
left:	
	scroll 1,5,10,15,30         ;左窗口满行上卷
	mov cury,15
	mov curx,10
	jmp continue
right:
	scroll 1,5,50,15,70         ;右窗口满行上卷
	mov cury,15
	mov curx,50
continue:
	pos_curce cury,curx
	jmp get_char
down:
	scroll 1,18,15,22,65
	mov dwx,15
	pos_curce cury,curx         ;返回当前光标继续
	jmp get_char
    ;
main endp
;---------------------------------------------------
codes ends
;***************************************************
	end start




⌨️ 快捷键说明

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