?? 3.4屏幕窗口程序.asm
字號(hào):
;屏幕窗口程序
datas segment
cury db 15 ;光標(biāo)初始位置
curx db 50
;
lx db 10 ;記錄左窗口當(dāng)前光標(biāo)位置
ly db 15
rx db 50 ;記錄右窗口當(dāng)前光標(biāo)位置
ry db 15
dwx db 15 ;記錄下窗口當(dāng)前光標(biāo)位置
dwy db 22
;
ulrow db 0
ulcol db 0
lrrow db 0
lrcol db 0
;
lefted db 0 ;記錄光標(biāo)當(dāng)前是左還是右的狀態(tài)
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 向上卷動(dòng)一行
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 光標(biāo)定位
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 ;初始置光標(biāo)在右窗口最下行開始
get_char: ;輸入鍵盤上的字符
mov ah,0
int 16h
;
cmp ah,4bh ;判斷是否是←鍵
jnz not_left
cmp lefted,1
jz get_char ;已是左窗口,再按←鍵沒(méi)反應(yīng)
;
push ax
mov al,cury
mov ry,al ;保存右窗口光標(biāo)位置
mov al,curx
mov rx,al
mov al,ly ;取左窗口光標(biāo)位置
mov cury,al
mov al,lx
mov curx,al
pop ax
mov lefted,1
mov righted,0
pos_curce cury,curx ;跳到左窗口光標(biāo)位置
jmp get_char
not_left:
cmp ah,4dh ;判斷是否是→鍵
jnz not_right
cmp righted,1
jz get_char ;已是右窗口,再按→鍵沒(méi)反應(yīng)
;
push ax
mov al,cury ;保存左窗口光標(biāo)位置
mov ly,al
mov al,curx
mov lx,al
mov al,ry ;取右窗口光標(biāo)位置
mov cury,al
mov al,rx
mov curx,al
pop ax
mov righted,1
mov lefted,0
pos_curce cury,curx ;跳到右窗口光標(biāo)位置
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 ;顯示一個(gè)字符后當(dāng)前列+1
;
pos_curce dwy,dwx ;同時(shí)在下窗口也顯示相同字符
mov ah,0ah
mov bh,0
mov cx,1
int 10h
inc dwx
cmp dwx,65
ja down ;滿行后換行即上卷一行
pos_curce cury,curx ;返回當(dāng)前光標(biāo)繼續(xù)
;
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 ;返回當(dāng)前光標(biāo)繼續(xù)
jmp get_char
;
main endp
;---------------------------------------------------
codes ends
;***************************************************
end start
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -