📄 aaa.asm
字号:
op: mov ah,00h
int 16h
cmp ah,1ch ;是Enter功能键吗?
jnz op
pop bx
ret
open endp
save proc near ;保存文件功能实现
mov ah,40h
mov bx,handle1
mov cx,1830
lea dx,buffer+160
int 21h
ret
save endp
save_as 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
op1: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 op1
exit6:
mov ah,3ch
mov cx,00
lea dx,mypath
int 21h
mov handle1,ax
mov ah,40h
mov bx,handle1
mov cx,1830
lea dx,buffer+160
int 21h
pop bx
ret
save_as endp
exit proc near ;退出功能实现
clear
mov ah,4ch
int 21h
ret
exit endp
crlf proc near ;回车换行子程序
mov ah,02h
mov dl,0dh
int 21h
mov ah,02h
mov dl,0ah
int 21h
ret
crlf endp
edi_mess proc near ;显示EDIT菜单的子菜单
push dx
window 0,2,7,6,13,06h
window 0,1,6,5,12,2fh
postc 0,1,6
xianshi edimes_1
xianshi edimes_2
xianshi edimes_3
postc 0,1,6
pop dx
call compar1
;call backdisp
ret
edi_mess endp
compar1 proc near
push cx
yy: getc
mov cl,dh
mov ah,0
int 16h
cmp ah,50h
jz y1
cmp ah,48h
jz y2
cmp ah,3ch
jz y3
cmp al,0dh
jz y4
jmp ext2
;---------------
y1: cmp cl,3
jnz y11
postc 0,1,6
jmp yy
y11: inc cl
postc 0,cl,6
jmp yy
y2: cmp cl,1
jnz y22
postc 0,3,6
jmp yy
y22: dec cl
postc 0,cl,6
jmp yy
y3: jmp yy
;---------------
y4: cmp cl,1
jz decele
cmp cl,2
jz inse
cmp cl,3
jz rew
decele:
call delet
call backdisp
jmp ext2
inse:
call insert
jmp ext2
rew:
call rewrit
; call backdisp
;jmp ext2
ext2:
pop cx
call backdisp
ret
compar1 endp
delet proc near ;edit菜单中delete的实现
call backdisp
e:
;postc 0,y,x
mov ah,0h
int 16h
cmp al,0dh ;回车
jz en
cmp ah,48h ;上
jz e1
cmp ah,50h ;下
jz e2
cmp ah,4bh ;左
jz e3
cmp ah,4dh ;右
jz e4
cmp ah,0eh
jz ch1 ;删除
e1: cmp y,2
jz e
dec y
postc 0,y,x
call row_line
jmp e
e2: cmp y,23
jz e
inc y
postc 0,y,x
call row_line
jmp e
e3: cmp x,0
jz e
dec x
postc 0,y,x
call row_line
jmp e
e4: cmp x,79
jz e
inc x
postc 0,y,x
call row_line
jmp e
ch1:
push ax
mov bx,80
sub ax,ax
mov al,y
mul bx
mov bx,ax
mov al,x
mov si,ax
pop ax
lea bx,buffer[bx][si]
mov si,bx
inc bx
i1: mov ax,[bx]
mov [si],ax
inc si
inc bx
cmp bx,1600
jz i
jmp i1
i: dec x
cmp x,0
jz e
call row_line
call backdisp
jmp e
en:
ret
delet endp
insert proc near ;edit菜单中insert的实现
call backdisp
; push cx
getc
; mov cl,x
;mov ch,y
ii:
postc 0,y,x
mov ah,0h
int 16h
cmp al,0dh ;回车
jz iin
cmp ah,48h ;上
jz ii1
cmp ah,50h ;下
jz ii2
cmp ah,4bh ;左
jz ii3
cmp ah,4dh ;右
jz ii4
jmp iii1
ii1: cmp y,2
jz ii
dec y
postc 0,y,x
call row_line
jmp ii1
ii2: cmp y,23
jz ii
inc y
postc 0,y,x
call row_line
jmp ii
ii3: cmp x,0
jz ii
dec x
postc 0,y,x
call row_line
jmp ii
ii4: cmp x,79
jz ii
inc x
postc 0,y,x
call row_line
jmp ii
iii1:
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 inse1,al
lea bp, buffer[bx][si]
;jmp ii
;mov buffer[bx][si],al
; call row_line
;call backdisp
;mov ah,01h
;mov dl,al
;int 21h
lea di,buffer+500
mov si,di
dec si
p1: mov ah,[si]
mov [di],ah
dec si
dec di
cmp si,bp
jz p
jmp p1
p: mov ah,inse1
mov [bp],ah
inc x
call backdisp
cmp x,79
jz cc
jmp ii
cc: mov x,0
inc y
jmp ii
iin: mov y,dh
mov x,dl
postc 0,y,x
ret
insert endp
rewrit proc near ;;edit菜单中rewrite的实现
call backdisp
; push cx
getc
; mov cl,x
;mov ch,y
r:
postc 0,y,x
mov ah,0h
int 16h
cmp al,0dh ;回车
jz rn
cmp ah,48h ;上
jz rw1
cmp ah,50h ;下
jz rw2
cmp ah,4bh ;左
jz rw3
cmp ah,4dh ;右
jz rw4
jmp rr1
rw1: cmp y,2
jz r
dec y
postc 0,y,x
call row_line
jmp rr1
rw2: cmp y,23
jz r
inc y
postc 0,y,x
call row_line
jmp r
rw3: cmp x,0
jz r
dec x
postc 0,y,x
call row_line
jmp r
rw4: cmp x,79
jz r
inc x
postc 0,y,x
call row_line
jmp r
rr1:
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
call row_line
call backdisp
;mov ah,01h
;mov dl,al
;int 21h
jmp r
rn: mov y,dh
mov x,dl
postc 0,y,x
; pop cx
;call backdisp
ret
rewrit endp
backdisp proc near
;f1: mov ah,0 ;从键盘读取字符
;int 16h
; cmp ah,01 ;是Escape功能键吗?
;jz f
;jmp f1
f: 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
call row_line
postc 0,2,0
lea dx,buffer+160
mov ah,09h
int 21h
ret
backdisp endp
;过程row_line 动态显示行列
row_line proc near
sub ax,ax
lea di,row
mov al,x
call place
lea di,line
mov al,y
call place
postc 0,0,60
mov ah,09h
lea dx,r_l
int 21h
postc 0,y,x
ret
row_line endp
;过程PLACE将ax中数转换成十进制ASCII码
;并存入由ds:dI寻址的内存单元
;输入参数
;ax=将要转换得数
;DS:DI=数据存放地址
place proc near
mov cx,0 ;清计数值
mov bx,10 ;除数为10
place1:
mov dx,0 ;清DX
div bx ;除以10
push dx
inc cx
cmp ax,0
jne place1 ;循环直到商为0
place2:
mov bx,5
sub bx,cx
place3:
pop dx
add dl,30h ;转换为ASCII码
mov [di],dl ;存储数据
inc di
loop place3
cmp bx,0
je place5
mov cx,bx
place4:
mov byte ptr [di],20h
inc di
loop place4
place5:
ret
place endp
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -