⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dagl1.asm

📁 用汇编编写的小型个人档案信息管理系统
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;无匹配记录
search6: mov  S_ERR,2
         jmp  end_s
;有匹配记录
search7: lea  dx,L_TAB
         mov  ah,9
         int  21h
         lea  dx,[si-L_ID]
         mov  ah,9
         int  21h
         lea  dx,S_SUC
         mov  ah,9
         int  21h
         lea  dx,continue
         mov  ah,9
         int  21h
         mov  S_ERR,0
;
end_s:   pop  bp
         pop  di
         pop  si
         pop  dx
         pop  cx
         pop  bx
         pop  ax
         ret
search_record endp
;
;************************************************************
;功能:向表中插入新记录
;破坏寄存器:无
;返回值:A_ERR(1)当表满时,A_ERR=1
;             (2)当插入记录的ID与表内某记录重复时,A_ERR=2
;************************************************************
;
add_record  proc  near
         push  ax
         push  bx
         push  cx
         push  dx
         push  si
         push  di
         push  bp
;
         cmp  LEN,num
         jnz  add1
         mov  A_ERR,1                           ;表满
         jmp  end_a
;表不满
add1:    lea  dx,A_TAB
         mov  ah,9
         int  21h
;
         lea  dx,A_ID
         mov  ah,9
         int  21h
;输入ID串并暂存
         mov  si,0
add2:    mov  ah,7
         int  21h
         cmp  al,'0'
         jb  add2
         cmp  al,'9'
         ja  add2
         mov  dl,al
         mov  ah,2
         int  21h
         mov  TEM_ID[si],al
         inc  si
         cmp  si,L_ID
         jnz  add2
;
add3:    mov  ah,7
         int  21h
         cmp  al,13
         jnz  add3
;
         cmp  LEN,0
         jnz  compare
         inc  LEN                                   ;表空
         mov  bx,offset TAB
         mov  A_EA,bx
         add  A_EA,L_REC                             ;A_EA指向第2个记录位置的首地址
         jmp  add10
;表不空,与非空记录比对
compare: mov  bl,0
         cld
         mov  si,(offset TAB)+1
add4:    mov  bp,si
         cmp  byte ptr [si-1],1
         jnz  add5                                   ;转移则为空记录
         inc  bl                                     ;非空记录
         lea  di,TEM_ID
         mov  cx,L_ID
         repz  cmpsb
         jz   add6                                   ;匹配则转
         mov  si,bp
add5:    add  si,L_REC
         cmp  bl,LEN
         jz   add7                                   ;所有记录均已做比对无匹配则转
         jmp  add4
;有匹配记录
add6:    mov  A_ERR,2
         jmp  end_a
;无匹配记录
add7:    mov  bx,A_EA
         inc  LEN
         cmp  LEN,num
         jnz  add8
         mov  A_EA,-1                                ;表满时A_EA为-1
         jmp  add10
;表不满时,计算A_EA
add8:    add  A_EA,L_REC
         cmp  A_EA,offset LEN
         jnz  add9
         mov  A_EA,offset TAB
add9:    mov  bp,A_EA
         cmp  byte ptr ds:[bp],1
         jz   add8
;将暂存的ID串转存记录中
add10:   mov  byte ptr [bx],1
         inc  bx
         mov  di,bx
         lea  si,TEM_ID
         cld
         mov  cx,L_ID
         rep  movsb
         add  bx,L_ID
         add  bx,3
;输入姓名串
         lea  dx,A_NAME
         mov  ah,9
         int  21h
         mov  cl,L_NAM
add11:   mov  ah,7
         int  21h
         cmp  al,'A'
         jb  add11
         cmp  al,'Z'
         ja  add11
         jmp  add13
;
add12:   cmp  al,'A'
         jb  add14
         cmp  al,'Z'
         ja  add14
add13:   mov  dl,al
         mov  ah,2
         int  21h
         mov  [bx],al
         inc  bx
         dec  cl
         jz   add16
;
add14:   mov  ah,7
         int  21h
         cmp  al,13
         jnz  add12
;姓名不足8位则补空格
add15:   mov  byte ptr [bx],20h
         inc  bx
         dec  cl
         jnz  add15
;输入性别
add16:   lea  dx,A_SEX
         mov  ah,9
         int  21h
         add  bx,3
add17:   mov  ah,7
         int  21h
         cmp  al,'F'
         jZ  add18
         cmp  al,'M'
         jnz add17
add18:   mov  dl,al
         mov  ah,2
         int  21h
         mov  [bx],al
add19:   mov  ah,7
         int  21h
         cmp  al,13
         jnz  add19
;输入年龄
         lea  dx,A_AGE
         mov  ah,9
         int  21h
;
         inc  bx
         add  bx,6
         mov  cl,L_AGE
add20:   mov  ah,7
         int  21h
         cmp  al,'1'
         jb  add20
         cmp  al,'9'
         ja  add20
         jmp  add22
;
add21:   cmp  al,'0'
         jb  add23
         cmp  al,'9'
         ja  add23
add22:   mov  dl,al
         mov  ah,2
         int  21h
         mov  [bx],al
         inc  bx
         dec  cl
         jz   add25
;
add23:   mov  ah,7
         int  21h
         cmp  al,13
         jnz  add21
;年龄不足3位则补空格
add24:    mov  byte ptr [bx],20h
         inc  bx
         dec  cl
         jnz  add24
;
add25:   mov  A_ERR,0
;
         lea  dx,A_SUC
         mov  ah,9
         int  21h
         lea  dx,continue
         mov  ah,9
         int  21h
;
end_a:   pop  bp
         pop  di
         pop  si
         pop  dx
         pop  cx
         pop  bx
         pop  ax
         ret
add_record endp
;
;************************************************************
;功能:根据ID号查找表中记录,然后删除
;破坏寄存器:无
;返回值:D_ERR(1)当表空时,D_ERR=1
;             (2)当表内无匹配记录时,D_ERR=2
;             (3)当查找成功,但取消删除操作时,D_ERR=3
;************************************************************
;
delete_record  proc  near
         push  ax
         push  bx
         push  cx
         push  dx
         push  si
         push  di
         push  bp
;
         cmp  LEN,0
         jnz  delete1
         mov  D_ERR,1                                ;表空
         jmp  end_d
;表不空
delete1: lea  dx,D_TAB
         mov  ah,9
         int  21h
;输入ID串并暂存
         mov  si,0
delete2: mov  ah,7
         int  21h
         cmp  al,'0'
         jb   delete2
         cmp  al,'9'
         ja   delete2
         mov  dl,al
         mov  ah,2
         int  21h
         mov  TEM_ID[si],al
         inc  si
         cmp  si,L_ID
         jnz  delete2
;
delete3: mov  ah,7
         int  21h
         cmp  al,13
         jnz  delete3
;与非空记录比对
         mov  bl,0
         cld
         mov  si,(offset TAB)+1
delete4: mov  bp,si
         cmp  byte ptr [si-1],1
         jnz  delete5                                   ;转移则为空记录
         inc  bl                                        ;非空记录
         lea  di,TEM_ID
         mov  cx,L_ID
         repz cmpsb
         jz   delete7                                   ;匹配则转
         mov  si,bp
delete5: add  si,L_REC
         cmp  bl,LEN
         jz   delete6                                   ;所有记录均已做比对无匹配则转
         jmp  delete4
;无匹配记录
delete6: mov  D_ERR,2
         jmp  end_d
;有匹配记录
delete7: lea  dx,D_ASK
         mov  ah,9
         int  21h
;
delete8: mov  ah,7
         int  21h
         cmp  al,'N'
         jZ   cancel
         cmp  al,'Y'
         jnz delete8
         mov  dl,al
         mov  ah,2
         int  21h
delete9: mov  ah,7
         int  21h
         cmp  al,13
         jnz  delete9
;执行删除操作
         mov  byte ptr ds:[bp-1],0                           ;将标志清0
         cmp  LEN,num
         jnz  delete11
         mov  A_EA,bp
         dec  A_EA                                           ;表满时计算A_EA
         jmp  delete11
;取消删除操作
cancel:  mov  dl,al
         mov  ah,2
         int  21h
delete10:mov  ah,7
         int  21h
         cmp  al,13
         jnz  delete10
         mov  D_ERR,3
         jmp  end_d
;删除成功
delete11:dec  LEN                                            ;非空记录数减1
         lea  dx,D_SUC
         mov  ah,9
         int  21h
         lea  dx,continue
         mov  ah,9
         int  21h
         mov  D_ERR,0
;
end_d:   pop  bp
         pop  di
         pop  si
         pop  dx
         pop  cx
         pop  bx
         pop  ax
         ret
delete_record endp
code     ends
         end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -