📄 aaa.asm
字号:
data segment ;数据段定义
menu db 'File Edit Help',13,10,'$'
menu_1 db 'New',13,10,'$'
menu_2 db 'Open',13,10,'$'
menu_3 db 'Save',13,10,'$'
menu_4 db 'Save as',13,10,'$'
menu_5 db 'Exit ', '$'
edimes_1 db 'Delete',13,10,'$'
edimes_2 db ' Insert',13,10,'$'
edimes_3 db ' Rewrite','$'
painl db 80 dup('='),'$'
message1 db 'Welcome to use this editor Press F10 active Help','$'
helpmessage1 db '=======Welcome to use this editor=======',13,10,13,10,13,10
db 18 dup(' '),'Press F1 active File and F2 active Edit',13,10
db 18 dup(' '), 'The File includes "New,Open,Save,Save as,Exit"',13,10
db 18 dup(' '),'And the Edit has "Delete,Insert,Rewrite"',13,10,13,10,13,10
db 18 dup(' '), '========================================',13,10
db 18 dup(' '), 'Press any key to quit Help function......$'
x db ?
y db ?
buffer db 23 dup( 80 dup(?) ),'$'
buffer1 db 23 dup( 80 dup(?) ),'$'
r_l db 'row='
row db ' '
db 'line='
line db ' $'
path1 db 'D:\xinjian.txt',00
mypath db 16,?,16 dup(0)
handle1 dw ?
wrtpath db 'please input newpathnam:','$' ; 字符串
opnpath db 'please input openfilename:','$' ; 字符串
opnmsg db '* * * open error * * *',0dh,0ah
error1 db '* * * write error * * *',0dh,0ah
openfile db 23 dup( 80 dup(?) ),'$'
inse1 db ?
data ends
;---------------------------------------------
clear macro ;清屏的宏定义
mov ah,6
mov al,0
mov ch,0
mov dh,24
mov dl,79
mov bh,7
int 10h
endm
window macro op1,op2,op3,op4,op5,op6 ;绘制窗口的宏定义
mov ah,6
mov al,op1 ;al=0初始化窗口或为上卷行数
mov ch,op2 ;左上角的行号
mov cl,op3 ;左上角的列号
mov dh,op4 ;右上角的行号
mov dl,op5 ;右上角的列号
mov bh,op6 ;卷入行的属性
int 10h
endm
postc macro op1,op2,op3 ;光标位置的宏定义
mov ah,2 ;调用BIOS的2号功能
mov bh,op1 ;页号
mov dh,op2 ;行号
mov dl,op3 ;列号
int 10h
endm
getc macro ;读取光标位置的宏定义
mov ah,03h
mov bh,0
int 10h
endm
win macro
clear
window 1,0,0,0,79,5fh
window 0,1,0,23,79,3fh
window 0,24,0,24,79,5fh
postc 0,0,1
xianshi menu
xianshi painl
postc 0,24,0
xianshi message1
postc 0,2,0
endm
xianshi macro op ;显示字符串的宏定义
mov ah,9
lea dx,op
int 21h
endm
;---------------------------------------------
code segment
main proc far
assume cs:code,ds:data
start:
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
clear
window 1,0,0,0,79,5fh
window 0,1,0,23,79,3fh
window 0,24,0,24,79,5fh
postc 0,0,1
xianshi menu
xianshi painl
postc 0,24,0
xianshi message1
postc 0,2,0
mov x,dl
mov y,dh
call input_1
ret
main endp
input_1 proc near
input:
postc 0,y,x
mov ah,0 ;从键盘读取字符
int 16h
cmp ah,4bh ;是左方向功能键吗?
jnz noleft
cmp x,0 ;是,和0比较
jnz L1
cmp y,1
jnz L3
jmp input
L1: dec x
jmp L5
L3: dec y
mov x,78
L5: postc 0,y,x
call row_line
jmp input ;获取下一个字符
noleft:
cmp ah,4dh ;是右方向功能键吗?
jnz noright
cmp x,78 ;是,和79比较
jnz r1
cmp y,23
jnz r3
jmp input
r1: inc x
jmp r5
r3: inc y
mov x,0
r5: postc 0,y,x
call row_line
jmp input
noright:
cmp ah,48h ;是向上功能键吗?
jnz noup
cmp y,1
jz up1
dec y
postc 0,y,x
call row_line
up1: jmp input
noup:
cmp ah,50h ;是向下功能键吗?
jnz nodown
cmp y,23
jz d1
inc y
postc 0,y,x
call row_line
d1: jmp input
nodown:
cmp ah,4fh ;是end功能键吗?
jz en_d ;是,就换行
cmp ah,47h ;是Home功能键吗?
jz homf
cmp ah,53h ;是Del功能键吗?
jz delf
cmp ah,0eh ;是Backspace功能键吗?
jz backspae
cmp ah,1ch ;是Enter功能键吗?
jz enter
cmp ah,01 ;是Escape功能键吗?
jnz noescape
jmp ext
ext: window 0,0,0,24,79,0fh
postc 0,0,0
ret
en_d: ;end键功能的实现,置光标于当前行尾列
getc
mov y,dh
mov x,79
postc 0,y,x
call row_line
jmp input
homf: ;Home功能键的实现,置光标于当前行首列
getc
mov y,dh
mov x,0
postc 0,y,x
call row_line
jmp input
delf:
call delfunc ;调用delfuc子程序
jmp input
backspae: ;调用back_spae子程序
call back_spae
jmp input
enter: ;调用crlf子程序
call crlf
jmp input
noescape:
cmp ah,44h ;是F10功能键吗?
jz helpmess
cmp ah,3bh ;是F1功能键吗?
jz filsec
cmp ah,3ch ;是F2功能键吗?
jz editemess
jmp dispchar
filsec:
call fil_second
jmp input
editemess:
call edi_mess
jmp input
helpmess:
clear
win
window 0,4,17,21,65,06h
window 0,3,16,20,64,6fh
postc 0,4,21
xianshi helpmessage1
hh: mov ah,0
int 16h
cmp ah,44h
jz hh
call backdisp
jmp input
dispchar: ;在光标位置显示字符
mov ah,2
mov dl,al
int 21h
push ax
mov bx,80
sub ax,ax
mov al,y
mul bx
mov bx,ax
mov al,x
mov si,ax
pop ax
mov buffer[bx][si],al
inc x
call row_line
jmp input
huanhang: ;按enter换行
call crlf
inc y
postc 0,y,0
jmp input
ret
input_1 endp
delfunc proc near ;实现Delete键功能的子程序
u1: getc
mov y,dh
mov x,dl
dec x
cmp x,0
jnz lmv
cmp y,2
jnz umv
postc 0,y,x
mov ah,02h
mov dl,00h
int 21h
postc 0,y,x
lmv: jmp u1
umv: jmp u1
ret
delfunc endp
back_spae proc near ;实现Backspace键功能的子程序
getc
mov y,dh
mov x,dl
cmp x,0
jz next
dec x
jmp abc
next: mov x,0
abc: postc 0,y,x
mov ah,2
mov dl,00
int 21h
postc 0,y,x ;要注意此处定义光标
ret
back_spae endp
fil_second proc near ;显示FILE的下拉菜单
push dx
window 0,2,1,6,8,06h
window 0,1,0,5,7,2fh
postc 0,1,0
xianshi menu_1
xianshi menu_2
xianshi menu_3
xianshi menu_4
xianshi menu_5
postc 0,1,0
pop dx
call compar ;在下拉菜单中判断输入的字符
ret
fil_second endp
compar proc near
push cx
xx: getc
mov cl,dh
mov ah,0
int 16h
cmp ah,50h
jz x1
cmp ah,48h
jz x2
cmp ah,3bh
jz x3
cmp al,0dh
jz x4
jmp ext1
;---------------
x1: cmp cl,5
jnz x11
postc 0,1,0
jmp xx
x11: inc cl
postc 0,cl,0
jmp xx
x2: cmp cl,1
jnz x22
postc 0,5,0
jmp xx
x22: dec cl
postc 0,cl,0
jmp xx
x3: jmp xx
;---------------
x4: cmp cl,1
jz new1
cmp cl,2
jz open1
cmp cl,3
jz save1
cmp cl,4
jz save_as1
cmp cl,5
jz exit1
new1:
call new
jmp ext1
open1:
call open
jmp ext1
save1:
call save
jmp ext1
save_as1:
call save_as
jmp ext1
exit1:
call exit
ext1: pop cx
call backdisp
ret
compar endp
new proc near ;新建文件功能的实现
push cx
push bx
mov cx,1840
mov bx,0
nw: mov buffer[bx],0
inc bx
sub cx,1
jnz nw
mov ah,3ch ; 建立文件
mov cx,0
lea dx,path1
int 21h
jc error
mov handle1,ax
jmp exit2
error: lea dx,error1
mov ah,09h
int 21h
exit2:pop bx
pop cx
ret
new endp
open proc near ;打开文件功能实现
clear
win
push bx
window 0,9,18,13,68,6fh
postc 0,11,18
mov ah,09h
lea dx,wrtpath
int 21h
mov di,offset mypath
sa:mov ah,00h
int 16h
cmp ah,1ch ;是Enter功能键吗?
jz exit5
mov dl,al
mov ah,02
int 21h
mov [di],al
inc di
jmp sa
exit5:
clear
win
mov ah,3dh
mov al,00
lea dx,mypath
int 21h
mov handle1,ax
mov ah,3fh
mov bx,handle1
mov cx,1600
lea dx,buffer1+160
int 21h
mov bx,160
postc 0,2,0
replay:
mov dl,buffer1[bx]
inc bx
mov ah,2
int 21h
loop replay
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -