📄 wenben.asm
字号:
red_chr macro
mov ah,0
int 16h
endm
string macro p1
mov ah,9
lea dx,p1
int 21h
endm
win macro opr1,opr2,opr3,opr4,opr5,opr6
mov ah,06h
mov al,opr1
mov bh,opr2
mov ch,opr3
mov cl,opr4
mov dh,opr5
mov dl,opr6
int 10h
endm
pos_curse macro op1,op2,op3
mov ah,2
mov bh,op1
mov dh,op2
mov dl,op3
int 10h
endm
pos_get macro
mov ah,03h
mov bh,0
int 10h
endm
date segment
manu db 'File Edit Option Search Help$'
filnm db 'Please enter your file name:',13,10,'$'
mass_1 db 'F1: active manu F10: active help','$'
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 your creat file name:','$'
message2 db 'Please input your save file name:','$'
message3 db 'Please input your open file name:','$'
message4 db '***The file is not save! Save it now? (Y/N)***','$'
path db 50 dup(0),'$'
buffer db 2000 dup(?)
count dw 1
bak db 3850 dup(0)
line db ?
row db ?
char db ?
help_mas db ' Press esc to clear$'
data db 'Today ??/??/','$'
date ends
code segment
main proc far
assume cs:code,ds:date
start:
push ds
sub ax,ax
push ax
mov ax,date
mov ds,ax
call wind
call edit
ret
main endp
;******************************
wind proc near
win 0,1eh,1,0,24,79
win 1,30h,0,0,0,79
win 0,30h,24,0,24,79
show:
pos_curse 0,0,1
mov ah,9
lea dx,manu
int 21h
show_2:
pos_curse 0,24,1
mov ah,9
lea dx,mass_1
int 21h
call win3
pos_curse 0,1,0
mov row,dh
mov line,dl
wind endp
;******************************
edit proc near
;******************************
;mov cx,80
;mov bx,0
char_get:
call com
com proc near
pos_get
mov row,dh
mov line,dl
first:
pos_curse 0,row,line
j00: mov ah,0
int 16h
push ax
lea dx,buffer
mov buffer[bx],al
inc bx
cmp ah,1ch
jz enter_1
cmp ah,48h ;up
jz up
cmp ah,50h ;down
jz down_1
cmp ah,4bh ;left
jz left
cmp ah,4dh ;right
jz right
cmp ah,1ch ;enter
jz enter_1
call fuc_key
mov ah,2
mov dl,al
int 21h
pop ax
call manu_show
jmp j6
down_1:
jmp down
left:
pos_get
mov row,dh
mov dl,line
cmp line,0
jnz direct
mov line,79
dec row
jmp first
direct:
dec line
jmp first
right:
pos_get
mov row,dh
mov dl,line
cmp line,79
jnz direct2
mov line,0
inc row
jmp first
direct2:
inc line
jmp first
enter_1: jmp enter
up:
pos_get
mov row,dh
mov dl,line
dec row
jmp first
down:
pos_get
mov row,dh
mov dl,line
inc row
jmp first
enter:
mov buffer[bx],10
inc bx
pos_get
mov row,dh
mov line,dl
inc row
mov line,0
jmp first
j6: ret
com endp
fuc_key proc near
cmp ah,47h ;home
jz home
cmp ah,4fh ;end
jz _end
cmp ah,0eh ;backspace
jz bak_sp
cmp ah,53h
jz del
cmp ah,44h ;F10
jz help_0
ret
help_0:
call help
home:
pos_get
mov row,dh
mov line,0
jmp first
_end:
pos_get
mov row,dh
mov line,79
_end0:
dec line
pos_curse 0,row,line
mov ah,8
mov bh,0
int 10h
cmp al,20h
jz _end0
jmp first
bak_sp:
pos_get
mov row,dh
mov line,dl
dec line
pos_get 0,row,line
mov ah,2
mov dl,00
int 21h
jmp first
del:
pos_get
mov row,dh
mov line,dl
dec line
pos_get 0,row,line
mov ah,2
mov dl,00
int 21h
inc line
jmp first
cm: cmp line,00
jz pos_cm
pos_cm:
pos_curse 0,0,0
jmp first
help proc near
call savedisplay
pos_get
push dx
win 0,0fh,9,15,11,60
pos_curse 0,10,16
string help_mas
pop dx
pos_curse 0,dh,dl
mov ah,0
int 16h
cmp ah,36h
jnz cls
call help
cls: win 0,1eh,9,15,11,60
call backdisplay
help endp
fuc_key endp
;******************************
manu_show proc near
call savedisplay
push cx
cmp ah,3bh
jz manu_sh
jmp char_get
manu_sh:
pos_get
push dx
win 0,07h,2,1,7,11
win 0,71h,1,0,6,10
pos_curse 0,1,0
string manu_1
string manu_2
string manu_3
string manu_4
string manu_5
pop dx
dec dl
pos_curse 0,dh,dl
copmar:
red_chr
cmp ah,50h
jz manu_n
jmp manu_hid
manu_hid:
win 0,1eh,1,1,7,11
call backdisplay
jmp char_get
manu_n:
win 0,71h,5,1,5,8
pos_curse 0,5,0
string manu_5
win 0,15h,1,1,1,8
pos_curse 0,1,0
string manu_1
red_chr
cmp al,0dh
jz new_1
cmp ah,50h
je manu_o
jmp manu_hid
manu_n0: jmp manu_n
manu_o:
win 0,71h,1,1,1,8
pos_curse 0,1,0
string manu_1
win 0,15h,2,1,2,8
pos_curse 0,2,0
string manu_2
red_chr
cmp ah,48h
je manu_n0
cmp al,0dh
jz open_1
cmp ah,50h
je manu_s
jmp manu_hid
new_1: jmp new_2
manu_s:
win 0,71h,2,1,2,8
pos_curse 0,2,0
string manu_2
win 0,15h,3,1,3,8
pos_curse 0,3,0
string manu_3
red_chr
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:
win 0,71h,3,1,3,8
pos_curse 0,3,0
string manu_3
win 0,15h,4,1,4,8
pos_curse 0,4,0
string manu_4
red_chr
cmp ah,1ch
jz save_2
cmp ah,48h
je manu_a
cmp ah,50h
je manu_e
jmp manu_hid
manu_n2:jmp manu_n1
new_2: jmp new
save_1: call save
save_2: call saveas
manu_e:
win 0,71h,4,1,4,8
pos_curse 0,4,0
string manu_4
win 0,15h,5,1,5,8
pos_curse 0,5,0
string manu_5
red_chr
cmp ah,50h
je manu_n2
cmp ah,1ch
je exit
exit:
call backdisplay
win 0,07h,15,10,17,61
win 0,30h,14,9,16,60
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message4
mov ah,9
int 21h
mov ah,1
int 21h
cmp al,79h
jnz q
call quitt
q: cmp al,6eh
jz quit
quit: win 0,07h,0,0,24,79
pos_curse 0,0,0
mov ah,4ch
int 21h
ret
manu_show endp
;******************************
new proc near
pos_get
push dx
call backdisplay
win 0,07h,15,10,17,61
win 0,30h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message1
cmp al,0dh
mov ah,9
int 21h
mov bx,0
all:
mov ah,1
int 21h
cmp al,0dh
je alll
mov path[bx],al
inc bx
jmp all
alll:
win 0,1eh,15,9,17,61
pop dx
pos_curse 0,dh,dl
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
mov bx,ax
mov ah,3eh
int 21h
win 0,1eh,1,0,23,79
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
jmp char_get
new endp
open_2:
jmp open
;******************************
saveas proc near
win 0,1eh,1,0,6,10
call backdisplay
win 0,07h,15,10,17,61
win 0,30h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
bll:
mov ah,1
int 21h
cmp al,0dh
je blll
mov path[bx],al
inc bx
jmp bll
blll:
pos_get
push dx
win 0,1eh,1,0,23,79
call backdisplay
pop dx
pos_curse 0,dh,dl
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
jmp char_get
saveas endp
;******************************
open proc near
call backdisplay
win 0,07h,15,10,17,61
win 0,30h,14,9,16,60
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message3
mov ah,9
int 21h
mov bx,0
cll:
mov ah,1
int 21h
cmp al,13
je clll
mov path[bx],al
inc bx
jmp cll
clll:
win 0,1eh,1,0,23,79
lea dx,path
mov ah,3dh
mov al,0
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,3fh
int 21h
win 0,1eh,1,23,1,79
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
mov cx,1000
sub bx,bx
replay:
mov dl,buffer[bx]
inc bx
mov ah,2
int 21h
loop replay
mov bx,handle
mov ah,3eh
int 21h
mov dh,1
mov dl,0
mov bh,0
mov ah,2
int 10h
mov cx,10
mov bx,0
cleapath_3:
mov bl,0
mov path[bx],bl
loop cleapath_3
jmp char_get
open endp
save proc near
pos_get
push dx
win 0,1eh,1,0,6,10
call backdisplay
mov ah,path
cmp ah,21h
jl j_3
jmp j_4
j_3:
win 0,07h,15,10,17,61
win 0,30h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
dll:
mov ah,1
int 21h
cmp al,0dh
je dlll
mov path[bx],al
inc bx
jmp dll
dlll:
win 0,1eh,1,0,23,79
pop dx
pos_curse 0,dh,dl
j_4: lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
jmp char_get
save endp
;******************************
savedisplay proc near
push ax
push bx
push cx
push dx
push ds
mov ax,0002h
int 33h
mov bx,0d
mov cx,3840d
loop1:
mov ax,0b800h
mov ds,ax
mov dl,ds:[bx]
mov ax,date
mov ds,ax
mov bak[bx],dl
inc bx
loop loop1
mov ax,0001h
int 33h
pop ds
pop dx
pop cx
pop bx
pop ax
;ret
savedisplay endp
backdisplay proc near
push ax
push bx
push cx
push dx
push ds
mov bx,0d
mov cx,3840d
loop11:
mov ax,date
mov ds,ax
mov dl,bak[bx]
mov ax,0b800h
mov ds,ax
mov ds:[bx],dl
inc bx
loop loop11
pop ds
pop dx
pop cx
pop bx
pop ax
ret
backdisplay endp
;******************************
quitt proc near
;win 0,1eh,1,0,6,10
call backdisplay
win 0,07h,15,10,17,61
win 0,30h,14,9,16,60,
mov dh,15
mov dl,9
mov bh,0
mov ah,2
int 10h
lea dx,message2
mov ah,9
int 21h
mov bx,0
qll:
mov ah,1
int 21h
cmp al,0dh
je qlll
mov path[bx],al
inc bx
jmp qll
qlll:
win 0,07h,15,10,17,61
win 0,1eh,14,9,16,60
call backdisplay
lea dx,path
mov ah,3ch
mov cx,00
int 21h
mov handle,ax
lea dx,buffer
mov bx,handle
mov cx,2000
mov ah,40h
int 21h
mov bx,handle
mov ah,3eh
int 21h
call backdisplay
win 0,07h,0,0,24,79
mov ah,4ch
int 21h
ret
quitt endp
;******************************
edit endp
;******************************
win3 proc near
mov ah,2ah
int 21h
mov bl,10d
mov ax,0
mov al,dh
div bl
add ax,3030h
mov [data+6],al
mov [data+7],ah
mov ax,0
mov al,dl
div bl
add ax,3030h
mov [data+9],al
mov [data+10],ah
win 0,0fh,0,67,0,79
pos_curse 0,0,67
mov dx,offset data
mov ah,09h
int 21h
ret
win3 endp
;****************************
code ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -