?? dagl1.asm
字號(hào):
;無匹配記錄
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)當(dāng)表滿時(shí),A_ERR=1
; (2)當(dāng)插入記錄的ID與表內(nèi)某記錄重復(fù)時(shí),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個(gè)記錄位置的首地址
jmp add10
;表不空,與非空記錄比對(duì)
compare: mov bl,0
cld
mov si,(offset TAB)+1
add4: mov bp,si
cmp byte ptr [si-1],1
jnz add5 ;轉(zhuǎn)移則為空記錄
inc bl ;非空記錄
lea di,TEM_ID
mov cx,L_ID
repz cmpsb
jz add6 ;匹配則轉(zhuǎn)
mov si,bp
add5: add si,L_REC
cmp bl,LEN
jz add7 ;所有記錄均已做比對(duì)無匹配則轉(zhuǎn)
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 ;表滿時(shí)A_EA為-1
jmp add10
;表不滿時(shí),計(jì)算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串轉(zhuǎn)存記錄中
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位則補(bǔ)空格
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位則補(bǔ)空格
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
;
;************************************************************
;功能:根據(jù)ID號(hào)查找表中記錄,然后刪除
;破壞寄存器:無
;返回值:D_ERR(1)當(dāng)表空時(shí),D_ERR=1
; (2)當(dāng)表內(nèi)無匹配記錄時(shí),D_ERR=2
; (3)當(dāng)查找成功,但取消刪除操作時(shí),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
;與非空記錄比對(duì)
mov bl,0
cld
mov si,(offset TAB)+1
delete4: mov bp,si
cmp byte ptr [si-1],1
jnz delete5 ;轉(zhuǎn)移則為空記錄
inc bl ;非空記錄
lea di,TEM_ID
mov cx,L_ID
repz cmpsb
jz delete7 ;匹配則轉(zhuǎn)
mov si,bp
delete5: add si,L_REC
cmp bl,LEN
jz delete6 ;所有記錄均已做比對(duì)無匹配則轉(zhuǎn)
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
;執(zhí)行刪除操作
mov byte ptr ds:[bp-1],0 ;將標(biāo)志清0
cmp LEN,num
jnz delete11
mov A_EA,bp
dec A_EA ;表滿時(shí)計(jì)算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 ;非空記錄數(shù)減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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -