汇编通讯录程序的软件架构组成,各部分的核心技术及其具体如何实现啥呢
STACK SEGMENT PARA STACK 'stack'
DW 20H DUP(?)
STACK ENDS
DATA SEGMENT
TITL DB '汇编通讯录程序'
LENG EQU $-TITL
NAM DB ' * * * * * * ',0DH,0AH
DB ' * 通 讯 录 * ',0DH,0AH
DB ' * * * * * * ',0DH,0AH,'$'
SELECT DB ' ┏━━━━━━━━━━━┓ ',0DH,0AH
DB ' ┃ 1.添加新记录并回显 ┃ ',0DH,0AH
DB ' ┃ 2.查看所有记录 ┃ ',0DH,0AH
DB ' ┃ 3.查寻检索某一记录 ┃ ',0DH,0AH
DB ' ┃ 4.修改记录 ┃ ',0DH,0AH
DB ' ┃ 5.删除记录 ┃ ',0DH,0AH
DB ' ┃ 6.退出 ┃ ',0DH,0AH
DB ' ┗━━━━━━━━━━━┛ ',0DH,0AH,'$'
SEL DB ' 请选择(1,2,3,4,5,6):','$'
RGST STRUC
NA DB 18,?,18 DUP(20H)
TEL DB 18,?,18 DUP(20H)
ADDR DB 20,?,20 DUP(20H)
PS DB 0DH,0AH,'$'
RGST ENDS
PRNA DB '请输入姓名:$'
PRTEL DB '请输入电话号码:$'
PRADDR DB '请输入家庭住址:$'
PROMPT DB '**********************************************************',0DH,0AH
DB ' 姓名 电话号码 家庭住址 ',0DH,0AH
DB '**********************************************************',0DH,0AH,'$'
Q RGST <> ;用于恢复D
D RGST 10H DUP(<>)
S RGST <> ;数据缓冲区
T DB 18,?,18 DUP(20H) ;存放检索人名
PATH DB 'yf.DAT',0 ;文件路径
SELF DB ' 错误!请在规定范围内选择.',0DH,0AH,'$'
WRITEF DB '写文件错误!',0DH,0AH,'$'
OPENF DB '打开文件错误!',0DH,0AH,'$' ; 错误提示
READF DB '读文件错误!',0DH,0AH,'$'
CLSETF DB '关闭文件错误!',0DH,0AH,'$'
HNF DW ? ; 文件代号
CNT DB 0
FANHUI DB 0
SEARC1 DB ' ┏━━━━━━━━━┓ ',0DH,0AH
DB ' ┃1.按姓名查询 ┃ ',0DH,0AH
DB ' ┃2.按电话号码查询 ┃ ',0DH,0AH
DB ' ┃3.按家庭住址查询 ┃ ',0DH,0AH
DB ' ┃4.返回主菜单 ┃ ',0DH,0AH
DB ' ┗━━━━━━━━━┛ ',0DH,0AH
DB ' 请选择查询方式:$'
SEARCF DB ' 错误!请重新选择查询方式:$'
SEARCH1 DB '请输入要查询的人名:$'
SEARCH2 DB '请输入要查询的电话号码:$'
SEARCH3 DB '请输入要查询的住址:$'
FAI DB '* *对不起!没有找到!* *',0DH,0AH,'$'
SEA DB '* * O K ! !已经找到! * *',0DH,0AH,'$'
LINE DB '**********************************************************',0DH,0AH,'$'
LINE1 DB '----------------------',0DH,0AH,'$'
ROW DB 0
OVER DB '显示一屏完毕,按任意键继续..................$'
NOTIC DB '★★THAT IS ALL! !全部显示完毕★★ 按任意健返回主菜单...........$'
NOTI DB '&& OK!! 添加完毕! !按任意键返回主菜单................$'
NOTI1 DB '按任意键返回主菜单! !.......................$'
NOTI2 DB '&& 查询完毕! !按任意键返回主菜单.....................$'
NOTI4 DB '&& 修改完毕! !按任意键返回主菜单.....................$'
NOTI5 DB '&& 删除完毕! !按任意键返回主菜单.....................$'
CHAN1 DB '! ! 确实要修改该记录 ? ? (Y && N ):$'
DEL1 DB '! ! 确实要删除该记录 ? ? (Y && N ):$'
TTT DB '★★汇编语言毕业计★★ ',0DH,0AH
LEN EQU $-TTT
TTT1 DB '指导老师',0DH,0AH
LEN1 EQU $-TTT1
TTT2 DB '学生:',0AH,0DH
LEN2 EQU $-TTT2
TTT3 DB ' 计算机',0DH,0AH
LEN3 EQU $-TTT3
TTT4 DB ' 按 < Enter >键进入,按 < Esc >键退出 ',0DH,0AH
LEN4 EQU $-TTT4
TTT5 DB ' 说明:本程序参考了一些汇编',0DH,0AH
DB ' 二零一零年四月 ',0DH,0AH,'$'
DATA ENDS
CURS MACRO A,B,C ;宏
MOV AH,2
MOV DH,A
MOV DL,B
MOV BH,0
INT 10H
LEA DX,C
CALL PRINT
ENDM
WIND MACRO X,Y,Z,U,V,W
MOV AH,6
MOV AL,X
MOV CH,Y
MOV CL,Z
MOV DH,U
MOV DL,V
MOV BH,W
INT 10H
ENDM
PRI MACRO X,Y,Z,U
MOV BP,OFFSET X
MOV CX,Y
MOV DX,Z
MOV BL,U
MOV AL,1
MOV AH,13H
INT 10H
ENDM
SHIFT MACRO A,B ;文件指针
MOV BX,HNF
MOV DX,A
MOV CX,B
MOV AX,4201H
INT 21H
ENDM
BIJIAO MACRO X
LOCAL CIC,SUC,FAIL,RETU
CIC: CALL READFILE
CMP AX,0
JZ FAIL
LEA SI,X
ADD SI,2
LEA DI,T
ADD DI,2
MOV CX,18
CLD
REPZ CMPSB
CMP CX,0
JZ SUC
JMP CIC
SUC: CALL SUCC
JMP RETU
FAIL: CALL LSPACE
LEA DX,FAI
CALL PRINT
MOV CNT,1
RETU: CALL CLEAN
ENDM
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV AL,3
MOV AH,0
INT 10H ;彩色文本
CALL SKIN1
CALL SKIN ;界面
NEXT1: CMP AL,'1'
JZ LP1
CMP AL,'2'
JZ LP2
CMP AL,'3' ;分几种情况处理
JZ LP3
CMP AL,'4'
JZ LP4
CMP AL,'5'
JZ LP5
CMP AL,'6'
JZ EXIT
LEA DX,SELF
CALL PRINT
LEA DX,SEL
CALL PRINT
MOV AH,1
INT 21H
JMP NEXT1
LP1: CALL LSPACE
CALL OPENFILE
CALL DONE
CALL SKIN
JMP NEXT1
LP2: CALL CLS ;显示所有记录
LEA DX,PROMPT
CALL PRINT
CALL OPENFILE
CALL PRINT1
JMP NEXT1
LP3: CALL OPENFILE
CALL SEAFILE
CALL CLSET
MOV CNT,0 ;没找到 标记
CMP FANHUI,0 ;直接返回标记
JNZ EXIT6
CALL LSPACE
LEA DX,NOTI2
CALL PRINT
MOV AH,7
INT 21H
EXIT6: MOV FANHUI,0
CALL SKIN
JMP NEXT1
LP4: CALL CHAN
MOV FANHUI,0
CALL SKIN
JMP NEXT1
LP5: CALL DEL
MOV FANHUI,0
CALL SKIN
JMP NEXT1
EXIT: MOV AH,4CH
INT 21H ;主程序结束
[解决办法]
还是没,哎