📄 keti3.asm
字号:
.model Medium
.stack 100h
.data
;-----------------------------
handle dw ?
filenampl label byte
db 30
db ?
filenam db 30 dup(?)
db '$'
;-----------------------------
M_nampl label byte
db 10
db ?
M_nam db 10 dup(?)
db '$'
;----------------------------
M_telpl label byte
db 12
db ?
M_tel db 12 dup(?)
db '$'
;---------------------------
M_mobilepl label byte
db 12
db ?
M_mobile db 12 dup(?)
db '$'
;---------------------------
M_Emailpl label byte
db 20
db ?
M_Email db 20 dup(?)
db '$'
;---------------------------
M_adresspl label byte
db 20
db ?
M_adress db 20 dup(?)
db '$'
;---------------------------
M_mailpl label byte
db 6
db ?
M_mail db 6 dup(?)
db '$'
;---------------------------
recordpl db 80 dup(?)
db '$'
;---------------------------
pointadd dw ?
filerecord dw ?
searchrecord dw ?
cx_cx dw ?
si_si dw ?
fileend db ?
row db ?
col db ?
tenchar db 10 dup(?)
tenchar_cheak db 'yangzhi070'
;---------------------------
;---------------------------------------------------------------------------
;主菜单
menu db ' *********************************',10,13
db ' 1. New file_add new inf. ',10,13
db ' 2. Serch_rew inf. ',10,13
db ' 3. Print inf. ',10,13
db ' 4. Exit ',10,13
db ' ********************************',10,13
db ' Your choice[1,2,3,4]:','$'
;----------------------------
newinf1 db 'Please input file name and path:\>','$'
newinf2 db 10,13,'The file has already exist but not a Tel.notebook file.','$'
newinf3 db 'New Tel.notebook :','$'
newinf4 db 'The Tel.notebook file has already exist.You can add new record.','$'
newinf5 db '#New record.','$'
newinf6 db 10,13,'New record has saved in file.','$'
newinf7 db 'If the information above isn.t right press[n\N]:','$'
newinf8 db 10,13,'There is on record in file!','$'
searchmeg1 db 'You can search information by anyone of the six blow:','$'
nosearch db 10,13,'There is no record about inf.','$'
rewritemeg db 'Do you want to rewrite this record?[y\n]:','$'
;--------------------------
nam_inpl label byte
db 10,13
nam_in db 'Name','$'
;
tel_inpl label byte
db 10,13
tel_in db 'Tel.','$'
;
mobile_inpl label byte
db 10,13
mobile_in db 'Mobile','$'
;
Email_inpl label byte
db 10,13
Email_in db 'Email','$'
;
adress_inpl label byte
db 10,13
adress_in db 'Adress','$'
;
mail_inpl label byte
db 10,13
mail_in db 'Mail','$'
;--------------------------------------------------
;
.code
main proc far
mov ax,@data
mov ds,ax
mov es,ax
;-------主循环
main_loop:
mov al,00
call scrn
mov row,5
mov col,0
call curs
;
lea dx,menu
mov ah,09h
int 21h
call getch
;----------------
cmp al,'4'
ja main_loop
cmp al,'1'
jb main_loop
;----------------
cmp al,'4'
je main_exit
cmp al,'1'
jne main_next1
call newinf_add;==功能1:新文件_添加信息==
jmp main_loop
main_next1:
cmp al,'2'
jne main_next2
call search_renew;==功能2:查找_修改信息==
jmp main_loop
main_next2:
cmp al,'3'
jne main_loop
call inf_print;====功能3:显示信息报表=====
jmp main_loop
;
main_exit:
mov ax,4c00h
int 21h
main endp
;_________________________________________________________功能一
newinf_add proc near
;
mov filerecord,1;文件记录数置一
mov al,00
call scrn
mov row,5
mov col,00
call curs
;清屏 定光标
;--------------------------------
lea dx,newinf1
mov ah,9
int 21h ;提示:输入文件名
lea dx,filenampl
mov ah,0ah
int 21h ;输入文件名
mov di,dx
add di,2 ;dx->文件名地址
mov bx,dx
inc bx ;bx指向实际长度
mov ch,[bx]
mov cl,30
call nam_clear ;清理文件名
;文件名输入完成-------------
;-------------------------------
mov al,00 ;读模式打开文件
mov ah,3ah
lea dx,filenam
int 21h
jc iinf_new ;文件不存在新建>>>>>>>>>>>>>>>>>>>>>>>
;存在 进一步判断是不是NOTEBOOK文件
mov handle,ax
;
mov ch,0
mov cl,10
lea si,tenchar
call nam_clear
;
mov bx,handle
mov cx,10
mov ah,3fh
lea dx,tenchar
int 21h ;读文件开始的10字节
;mov bx,handle
;call closefile ;读完后关闭文件
;为添加做准备
CLD
lea si,tenchar
lea di,tenchar_cheak
mov cx,10
REPE CMPSB
cmp cx,0
je inf_inin;是notebook文件
;------------------------------------!!!!!!!!!!!!!!!!!
lea dx,newinf2
mov ah,09h
int 21h
mov bx,handle
call closefile
call getch
ret ;经检验输入的文件名已存在
;且不是电话本文件 返回
;------------------------------------<<<<<<<<<<<<<<<<<<<<
iinf_new:
;------------------
lea dx,filenam
mov ah,3ch
mov cx,0000
int 21h
;新建一个文件
;-----------------
mov handle,ax
;-----------------
mov bx,ax ;bx=文件代号
lea dx,tenchar_cheak
mov cx,10
call inf_in_file
;写入10个标志字符
;-----------------
mov al,01
call scrn
mov row,24
mov col,00
call curs
;
lea dx,newinf3
mov ah,09h
int 21h; 显示:新建的notebook文件
jmp inf_input ;给文件添加信息
;--------------------------------<<<<<<<<<<<<<<<<<<
inf_inin: ;给文件末尾加信息!!!!!!!!!!!!!!!!!!!!!!
;--------------
mov al,01h
call scrn
mov row,24
mov col,00
call curs
lea dx,newinf4
mov ah,09h
int 21h ;显示:文件已存在添加新记录
;--------------
lea dx,filenam
mov ax,3d02h
int 21h ;以读和写方式打开文件
mov handle,ax;保存文件代号
mov cx,0000
mov dx,0000
mov ax,4202h
int 21h;将文件指针指向文件末尾
inf_input:
;-------------------------------<<<<<<<<<<<<<<<<<<<<
call in_record ;输入一项记录
;-------------------------------
cmp fileend,1 ;文件是否结束?
jne nnextstep ;没
;-------------------
;文件输入过程已结束
lea dx,newinf6
mov ah,09h
int 21h
call getch
mov bx,handle
call closefile
ret;输入结束 返回
;-------------------
nnextstep:
inc filerecord;文件记录数加一
;----------------------------------
call saveinf ;写入一项记录
;----------------------------------
jmp inf_input ;输入下一条记录
;----------------------------------
newinf_add endp
;--------------------------------------------
;---------------------------------------
;至此,新建 添加 功能完成 ==============
;---------------------------------------
search_renew proc near
;--------------------
mov al,00
call scrn
mov col,00
mov row,05
call curs
;清屏 定光标
;--------------------
lea dx,newinf1
mov ah,09h
int 21h
lea dx,filenampl
call nam_in_open
;输入文件名
;--------------------
cmp ax,0000
jne search_infile;<<<<<<<<<<<<<<<<
;文件存在 进行下一步判断
;--------------------
;ax=0000文件不存在
call getch
ret
;--------------------------------------
search_infile: ;<<<<<<<<<<<<<<<<<<<<<
mov handle,ax
;---------------
mov bx,ax
mov cx,10
mov ah,3fh
lea dx,tenchar
int 21h
;读入十个字节的内容
;--------------
lea si,tenchar
lea di,tenchar_cheak
mov cx,10
REPE CMPSB
cmp cx,0
;看是不是notebook文件
;------------------------------------
je search_file;是 进行查找
;---------------
lea dx,newinf2
mov ah,09h
int 21H; 显示:非notebook文件
mov bx,handle;
call closefile;关闭打开的文件
call getch
ret ;返回主函数
;---------------
search_file:
mov al,02h
call scrn
mov row,23
mov col,00
call curs
lea dx,searchmeg1;
mov ah,09h
int 2h;操作提示
;---------------
mov pointadd,0
mov cx_cx,0000
mov si_si,0000
mov si,0
;---------------
mov al,06h
call scrn_bx
mov row,19
mov col,00
call curs
;---------------
call input_nam
cmp cx,0
je search_next2
lea dx,M_nam
mov si_si,dx
mov cx_cx,cx
call search_cmp
cmp ax,0000
jne re_write_1;>>>>>>>>>>>>>>>>
jmp sss_exit
;
search_next2:
add pointadd,10
call input_tel
cmp cx,0
je search_next3
lea dx,M_nam
mov si_si,dx
mov cx_cx,cx
call search_cmp
cmp ax,0000
jne re_write_1;==========
jmp sss_exit
;
search_next3:
add pointadd,12
call input_tel
cmp cx,0
je search_next4
lea dx,M_nam
mov si_si,dx
mov cx_cx,cx
call search_cmp
cmp ax,0000
jne re_write
jmp sss_exit
;
search_next4:
add pointadd,12
call input_Email
cmp cx,0000
je search_next5
mov cx_cx,cx
lea dx,M_nam
mov si_si,dx
call search_cmp
cmp ax,0000
jne re_write
jmp sss_exit
;-----------------
re_write_1:
jmp re_write
;-----------------
search_next5:
add pointadd,20
call input_adress
cmp cx,0
je search_next6
lea dx,M_nam
mov si_si,dx
mov cx_cx,cx
call search_cmp
cmp ax,0000
jne re_write
jmp sss_exit
;
search_next6:
add pointadd,20
call input_mail
cmp cx,0000
je sss_exit
lea dx,M_nam
mov si_si,dx
mov cx_cx,cx
call search_cmp
cmp ax,0
jne re_write
jmp sss_exit
re_write: ;<<<<<<<<<<<<<<<<<
call rewriterecord
sss_exit:
mov bx,handle
call closefile ;关闭文件
ret
search_renew endp
;------------------------------------------------------------
;---------------------------------------------------
;至此 文件查找 修改功能完成 ============
;--------------------------------------------------------------------------------
inf_print proc near
mov fileend,0
;---------------------
mov al,00
call scrn
mov row,05
mov col,00
call curs
;-------------------
lea dx,newinf1
mov ah,09h
int 21h
;
lea dx,filenampl
call nam_in_open
;输入文件名完成
;-------------------------
cmp ax,0000
jne file_text
;文件存在 进一步检查
call getch
ret;文件不存在 返回
;------------------
file_text:
mov handle,ax
;
mov ch,0
mov cl,10
lea si,tenchar
call nam_clear
;
mov bx,handle
mov cx,10
mov ah,3fh
lea dx,tenchar
int 21h
;读开始的10位标志字节
cmp ax,0
jnz next_gege
mov fileend,1
next_gege:
CLD
lea si,tenchar
lea di,tenchar_cheak
mov cx,10
REPE CMPSB
cmp cx,0
;-----------------
je print_begin
;
;-----------------
lea dx,newinf2
mov ah,09h
int 21h
mov bx,handle
call closefile
call getch
ret;非法文件名 返回
;---------------------------------------------------------
print_begin:
call tablehead
cmp fileend,1
jne read_print
;
mov bx,handle
call closefile
lea dx,newinf8
mov ah,09h
int 21h
call getch
ret
read_print:
;----------------
mov bx,handle
mov cx,80
mov ah,3fh
lea dx,recordpl
int 21h
;读一条记录
jc print_exit
cmp ax,0000
jne print_it
;到文件末尾
mov fileend,1
print_it:
call recordtype
cmp fileend,1
jne read_print
print_exit:
mov al,5
call scrn
mov row,20
mov col,00
call curs
ret
inf_print endp
;___________________________________________________
include asm.sub
include keti3_1.sub
include keti3_2.sub
end main
;_________________________________
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -