📄 t2.asm
字号:
;#Mode=Dos
widows macro p1,p2,p3,p4,p5,p6 ;建立窗口
mov ah,06h ;功能号
mov al,p1 ;页号
mov bh,p2 ;属性
mov ch,p3 ;左上角行
mov cl,p4 ;左上角列
mov dh,p5 ;右上角行
mov dl,p6 ;右上角列
int 10h ;调用BIOS子函数
endm
layp macro op1,op2,op3 ;定义光标位置
mov ah,2
mov bh,op1 ;页号
mov dh,op2 ;行
mov dl,op3 ;列
int 10h ;调用BIOS子函数
endm
getp macro ;显示光标位置
mov ah,03h
mov bh,0
int 10h
endm
readp macro ;读取字符宏定义
mov ah,0
int 16h ;调用BIOS子函数
endm
string macro p1 ;输入字符光标
mov ah,9 ;功能号
lea dx,p1 ;字符串的首地址
int 21h ;调用DOS子函数
endm
data segment ;定义数据段
menu db 'File(F1) Edit Help(f10) $'
manu_1 db ' New ',13,10,'$' ;子菜单
manu_2 db ' Open ',13,10,'$'
manu_3 db ' Save ',13,10,'$'
manu_4 db ' Save as ',13,10,'$'
manu_5 db ' Exit ','$'
handle dw ?
message1 db ' Please input file name:','$'
message2 db ' Please input save file name:','$'
message3 db ' Please input open file name:','$'
message4 db ' ***The file is not save! Save it now? (Y/N)***: ','$'
help1 db '==========================================================$' ;帮助内容
help2 db 'Press F1 to active file. $'
help3 db 'You can use DOWN cursor key to choose the fuction $'
help4 db 'Press F10 to show the help massage.Press Esc To Quit$'
path db 50 dup(0),'$'
buffer db 2000 dup(?)
bak db 3850 dup(0)
line db ?
row db ?
char db ?
data ends
code segment
main proc far ;主程序
assume cs:code,ds:data
start:
push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
call build ;调用子函数创建窗口
call edit ;调用编辑子函数
ret
main endp
build proc near ;创建窗口子程序
widows 0,70h,1,0,50,99 ;定义窗口背景
widows 1,07h,0,0,0,99
show: ;显示菜单位置及内容
layp 0,0,1
mov ah,9
lea dx,menu ;菜单字串首地址
int 21h
layp 0,1,0
mov row,dh
mov line,dl
build endp
edit proc near
getc: ;读字符
call com
com proc near ;定义功能鍵
getp ;得到当前位置
mov row,dh
mov line,dl
first:
layp 0,row,line
j00: mov ah,0
int 16h ;从键盘读字符 ah=扫描码 al=字符码
push ax
lea dx,buffer
mov buffer[bx],al
inc bx
cmp ah,48h ;是否向上
jz up_1
cmp ah,50h ;是否向下
jz down_1
cmp ah,4bh ;是否向左
jz left
cmp ah,4dh ;是否向右
jz right
cmp ah,1ch ;是否回车
jz enter_1
call fuc_key ;调用子功能函数
mov ah,2
mov dl,al
int 21h
pop ax
call menu_show
jmp j6
down_1:
jmp down
enter_1:
jmp enter_2
up_1: jmp up
left: ;光标左移
getp
mov row,dh
mov dl,line
cmp line,0
jnz direct
mov line,99
dec row
cmp row,0
je stop2
jmp first
stop2:
mov row,1
jmp first
direct:
dec line
;显示光标位置
jmp first
right: ;光标右移
getp
mov row,dh
mov dl,line
cmp line,99
jnz direct2
mov line,0
inc row
cmp row,50
je returns1
jmp first
direct2:
inc line
jmp first
enter_2:
jmp enter
up: ;上移光标
getp
mov row,dh
mov dl,line
dec row
cmp row,0
je stop1
jmp first
stop1:
mov row,1
jmp first
down: ;下移光标
getp
mov row,dh
mov dl,line
inc row
cmp row,50
je stop3
jmp first
stop3:
mov row,23
jmp first
returns1:
jmp returns
enter: ;回车换行
getp
mov row,dh
mov line,dl
inc row
cmp row,50
je returns
mov line,0
jmp first
returns:
mov row,50
mov line,0
jmp first
j6:
ret
com endp
fuc_key proc near ;功能键子程序
next:
cmp ah,0eh ;backspace
jz bak_sp
cmp ah,53h
jz del
cmp ah,44h ;F10
jz help_0
ret
help_0: call help
bak_sp: ;退格键的功能
getp
mov row,dh
mov line,dl
cmp line,0
je stop
dec line
jmp ab
stop:
mov line,0
ab:
getp 0,row,line
mov ah,2
mov dl,00
int 21h
jmp first
del: ;DEL删除
getp
mov row,dh
mov line,dl
dec line
getp 0,row,line
mov ah,2
mov dl,00
int 21h
inc line
jmp first
cm:
cmp line,00
jz pos_cm
pos_cm:
layp 0,0,0
jmp first
help proc near ;显示帮助信息
call savedisplay ;显示帮助信息每行的位置
getp
push dx
widows 0,3eh,4,5,21,70
layp 0,6,11
string help1
layp 0,8,11
string help2
layp 0,10,11
string help3
layp 0,12,11
string help4
layp 0,14,11
string help1
pop dx
layp 0,dh,dl
mov ah,0
int 16h
cmp ah,36h ;F10 active help
jnz cls
call help
cls:
widows 0,1eh,9,10,13,70 ;清屏
call backdisplay
help endp
fuc_key endp
menu_show proc near ;显示菜单
call savedisplay
push cx
cmp ah,3bh ;F1功能
jz menu_sh
jmp getc
menu_sh: ;定义菜单的背景字体颜色
getp
push dx
widows 0,07h,2,1,7,11
widows 0,65h,1,0,6,10
layp 0,1,0
string manu_1
string manu_2
string manu_3
string manu_4
string manu_5
pop dx
dec dl
layp 0,dh,dl
copmar:
readp
cmp ah,50h
jz manu_n
jmp manu_hid
manu_hid: ;菜单隐藏
widows 0,1eh,1,1,7,11
call backdisplay
jmp getc
manu_n: ;开始定义各个菜单项
widows 0,65h,5,1,5,8
layp 0,5,0
string manu_5
widows 0,15h,1,1,1,8
layp 0,1,0
string manu_1
readp
cmp ah,48h
je manu_n
cmp al,0dh
jz new_1
cmp ah,50h
je manu_o
jmp manu_hid
manu_n0:
jmp manu_n
manu_o:
widows 0,65h,1,1,1,8
layp 0,1,0
string manu_1
widows 0,15h,2,1,2,8
layp 0,2,0
string manu_2
readp
cmp ah,48h
je manu_o
cmp al,0dh
jz open_1
cmp ah,50h
je manu_s
jmp manu_hid
new_1: jmp new_2
manu_s:
widows 0,65h,2,1,2,8
layp 0,2,0
string manu_2
widows 0,15h,3,1,3,8
layp 0,3,0
string manu_3
readp
cmp al,0dh
jz save_1
cmp ah,48h
je manu_s
cmp ah,50h
je manu_a
jmp manu_hid
open_1: jmp open_2
manu_n1:
jmp manu_n
manu_a:
widows 0,65h,3,1,3,8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -