📄 05312020.asm
字号:
rep movsb
mov dh,dishigh
mov dl,59
mov ah,02
mov bh,0
int 10h
lea dx,phnumber+2
mov ah,09
int 21h
add dishigh,1
sub recdnum,2
cmp recdnum,0
jns disrecords
mov dishigh,6
pop ax
mov recdnum,al
pop di
pop si
cmp recdnum,0
jz error4
cmp inputflag,1
jz error4
mov ah,0
int 16h
error4:
ret
display endp
;--------------------------------------------------------------------
;input new record
input proc near
push si
push di
mov inputflag,1
call display
call opencur
mov inputflag,0
cmp recdnum,33
jz error5
mov dh,24 ;displaymess5
mov dl,24
mov ah,02
mov bh,0
int 10h
lea dx,mess5
mov ah,09
int 21h
mov al,recdnum
sub ah,ah
mov bl,2
div bl
add inputcur,al
cmp ah,1
jz input_2
input_:
add recdnum,1
mov dh,inputcur
mov dl,3
mov ah,02
mov bh,0
int 10h
lea dx,names
mov ah,0ah
int 21h
add dx,2
mov si,dx
lea di,records
add di,count
sub ch,ch
mov cl,names+1
add inputflag,cl
add count,15
rep movsb
cmp recdnum,34
jz inputfinish
mov dh,inputcur
mov dl,20
mov ah,02
mov bh,0
int 10h
lea dx,phnumber
mov ah,0ah
int 21h
add dx,2
mov si,dx
lea di,records
add di,count
sub ch,ch
mov cl,phnumber+1
add inputflag,cl
add count,15
rep movsb
cmp inputflag,0
jz inputfinish
mov inputflag,0
input_2:
add recdnum,1
mov dh,inputcur
mov dl,42
mov ah,02
mov bh,0
int 10h
lea dx,names
mov ah,0ah
int 21h
add dx,2
mov si,dx
lea di,records
add di,count
sub ch,ch
mov cl,names+1
add inputflag,cl
add count,15
rep movsb
mov dh,inputcur
mov dl,59
mov ah,02
mov bh,0
int 10h
lea dx,phnumber
mov ah,0ah
int 21h
add dx,2
mov si,dx
lea di,records
add di,count
sub ch,ch
mov cl,phnumber+1
add inputflag,cl
add count,15
rep movsb
add inputcur,1
cmp inputflag,0
jz inputfinish
mov inputflag,0
cmp recdnum,34
jz inputfinish
jmp input_
inputfinish:
sub recdnum,1
sub count,30
error5:
mov inputcur,6
mov inputflag,0
call sort
call writefile
pop di
pop si
ret
input endp
;--------------------------------------------------------------------
;clear screen
clscreen proc near
push ax
push bx
push cx
push dx
mov ax,0600h
mov bh,3fh
mov cx,0
mov dx,184fh
int 10h
pop dx
pop cx
pop bx
pop ax
ret
clscreen endp
;--------------------------------------------------------------------
;close the cursor
closecur proc near
push cx
push ax
mov cl,0
mov ch,10000b
mov ah,1
int 10h
pop ax
pop cx
ret
closecur endp
;--------------------------------------------------------------------
;open the cursor
opencur proc near
push cx
push ax
mov cl,0
mov ch,0
mov ah,1
int 10h
pop ax
pop cx
ret
opencur endp
;--------------------------------------------------------------------
;write disk file
writefile proc near
call createfile
mov ah,40h
mov bx,handle
mov cx,count
lea dx,records
int 21h
ret
writefile endp
;--------------------------------------------------------------------
;sort by names
sort proc near
push ax
push bx
push cx
push dx
push di
push si
lea ax,records
add ax,count
mov endaddr,ax
sub endaddr,60
next:
lea si,records
mov chflag,0
comp:
mov cx,30
mov di,si
add di,30
mov ax,di
mov bx,si
repe cmpsb
jbe sorted
call exchange
sorted:
mov si,ax
cmp si,endaddr
jbe comp
cmp chflag,0
jnz next
mov chflag,0
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret
sort endp
;--------------------------------------------------------------------
exchange proc near
mov cx,30 ;exchange
lea di,exchag
mov si,bx
rep movsb
mov cx,30
mov di,bx
rep movsb
mov cx,30
lea si,exchag
rep movsb
mov chflag,1
ret
exchange endp
;--------------------------------------------------------------------
;delete record
delete proc near
cmp recdnum,0
jz error6
call dwmess
mov dh,11
mov dl,25
mov ah,02
mov bh,0
int 10h
lea dx,mess11
mov ah,09
int 21h
mov dh,12
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess9
mov ah,09
int 21h
call opencur
lea dx,names
mov ah,0ah
int 21h
lea ax,records
add ax,count
mov endaddr,ax
lea si,records
comp_3:
lea di,names+2
sub ch,ch
mov cl,names+1
cmp cl,0
jz error6
mov ax,si
repe cmpsb
jz searchnumber_
add ax,30
mov si,ax
cmp si,endaddr
jbe comp_3
jmp error6
searchnumber_:
push ax
mov dh,13
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess10
mov ah,09
int 21h
lea dx,phnumber
mov ah,0ah
int 21h
pop ax
add ax,15
lea di,phnumber+2
sub ch,ch
mov cl,phnumber+1
cmp cl,0
jz error6
mov si,ax
repe cmpsb
jz deleterecord
jmp error6
deleterecord:
sub ax,15
mov bx,ax
change:
add bx,30
mov si,bx
mov cx,30
mov di,ax
rep movsb
add ax,30
cmp bx,endaddr
jbe change
sub count,30
sub recdnum,1
call writefile
error6:
ret
delete endp
;--------------------------------------------------------------------
;modify record
modify proc near
cmp recdnum,0
jz error7
call dwmess
mov dh,11
mov dl,25
mov ah,02
mov bh,0
int 10h
lea dx,mess12
mov ah,09
int 21h
mov dh,12
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess9
mov ah,09
int 21h
call opencur
lea dx,names
mov ah,0ah
int 21h
lea ax,records
add ax,count
mov endaddr,ax
lea si,records
comp_4:
lea di,names+2
sub ch,ch
mov cl,names+1
cmp cl,0
jz error7
mov ax,si
repe cmpsb
jz searchnumber_1
add ax,30
mov si,ax
cmp si,endaddr
jbe comp_4
jmp error7
searchnumber_1:
push ax
mov dh,13
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess10
mov ah,09
int 21h
lea dx,phnumber
mov ah,0ah
int 21h
pop ax
add ax,15
lea di,phnumber+2
sub ch,ch
mov cl,phnumber+1
cmp cl,0
jz error7
mov si,ax
repe cmpsb
jz modifyrecd
jmp error7
modifyrecd:
sub ax,15
push ax
mov dh,14
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess4
mov ah,09
int 21h
change_:
lea dx,names
mov ah,0ah
int 21h
pop ax
push ax
add dx,2
mov si,dx
mov di,ax
sub ch,ch
mov cl,names+1
rep movsb
sub ch,ch
mov cl,15
sub cl,names+1
lea si,mess16
rep movsb
mov dh,15
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess6
mov ah,09
int 21h
lea dx,phnumber
mov ah,0ah
int 21h
pop ax
add ax,15
add dx,2
mov si,dx
mov di,ax
sub ch,ch
mov cl,phnumber+1
rep movsb
sub ch,ch
mov cl,15
sub cl,phnumber+1
lea si,mess16
rep movsb
sub ah,ah
mov al,names+1
add al,phnumber+1
cmp al,0
jz error7
call sort
call writefile
error7:
ret
modify endp
;--------------------------------------------------------------------
;search modify record
search proc near
cmp recdnum,0
jz error8
call dwmess
mov dh,11
mov dl,25
mov ah,02
mov bh,0
int 10h
lea dx,mess13
mov ah,09
int 21h
mov dh,12
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess9
mov ah,09
int 21h
call opencur
lea dx,names
mov ah,0ah
int 21h
lea ax,records
add ax,count
mov endaddr,ax
lea si,records
comp_1:
lea di,names+2
sub ch,ch
mov cl,names+1
cmp cl,0
jz searchnumber
mov ax,si
repe cmpsb
jz match1
add ax,30
mov si,ax
cmp si,endaddr
jbe comp_1
searchnumber:
mov dh,13
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess10
mov ah,09
int 21h
lea dx,phnumber
mov ah,0ah
int 21h
lea si,records+15
comp_2:
lea di,phnumber+2
sub ch,ch
mov cl,phnumber+1
cmp cl,0
jz error8
mov ax,si
repe cmpsb
jz match2
add ax,30
mov si,ax
cmp si,endaddr
jbe comp_2
error8:
ret
match1:
add ax,15
mov si,ax
lea di,phnumber+2
sub ch,ch
mov cl,15
rep movsb
mov dh,15
mov dl,28
mov ah,02
mov bh,0
int 10h
lea dx,phnumber+2
mov ah,09
int 21h
mov dh,15
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess10
mov ah,09
int 21h
call closecur
mov ah,0
int 16h
ret
match2:
sub ax,15
mov si,ax
lea di,names+2
sub ch,ch
mov cl,15
rep movsb
mov dh,14
mov dl,20
mov ah,02
mov bh,0
int 10h
lea dx,names+2
mov ah,09
int 21h
mov dh,14
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess9
mov ah,09
int 21h
call closecur
mov ah,0
int 16h
ret
search endp
;--------------------------------------------------------------------
;draw message
dwmess proc near
call clscreen
mov ah,highness
sub al,al
push ax
mov highness,10
mov ax,0600h
mov bh,4ah
mov ch,9
mov cl,13
mov dh,16
mov dl,60
int 10h
mov dh,9 ;display four sides
mov dl,12
mov ah,02
mov bh,0
int 10h
mov al,0d5h
mov bh,0
mov bl,4ah
mov cx,1
mov ah,09
int 10h
mov dh,9
mov dl,13
mov ah,02
mov bh,0
int 10h
mov al,0cdh
mov bh,0
mov bl,4ah
mov cx,MANUWIDE
mov ah,09
int 10h
mov dh,9
mov dl,13+MANUWIDE
mov ah,02
mov bh,0
int 10h
mov al,0b8h
mov bh,0
mov bl,4ah
mov cx,1
mov ah,09
int 10h
drawb3_3:
mov dh,highness
mov dl,12
mov ah,02
mov bh,0
int 10h
mov al,0b3h
mov bh,0
mov bl,4ah
mov cx,1
mov ah,09
int 10h
mov dh,highness
mov dl,3dh
mov ah,02
mov bh,0
int 10h
mov al,0b3h
mov bh,0
mov bl,4ah
mov cx,1
mov ah,09
int 10h
add highness,1
cmp highness,16
jnz drawb3_3
pop ax
mov highness,ah
mov dh,16
mov dl,12
mov ah,02
mov bh,0
int 10h
mov al,0d4h
mov bh,0
mov bl,4ah
mov cx,1
mov ah,09
int 10h
mov dh,16
mov dl,13
mov ah,02
mov bh,0
int 10h
mov al,0cdh
mov bh,0
mov bl,4ah
mov cx,MANUWIDE
mov ah,09
int 10h
mov dh,16
mov dl,13+MANUWIDE
mov ah,02
mov bh,0
int 10h
mov al,0beh
mov bh,0
mov bl,4ah
mov cx,1
mov ah,09
int 10h
mov dh,10 ;displaymess8
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess8
mov ah,09
int 21h
mov dh,11
mov dl,13
mov ah,02
mov bh,0
int 10h
lea dx,mess15
mov ah,09
int 21h
ret
dwmess endp
;--------------------------------------------------------------------
finish proc near
mov ah,31h
mov al,0
mov dx,proc_len+15
mov cl,4
shr dx,cl
add dx,16
inc dx
int 21h
finish endp
;--------------------------------------------------------------------
tsr proc near
mov al,16h
mov ah,35h
int 21h
mov word ptr oldint,bx
mov word ptr oldint+2,es
lea dx,newint
mov ax,seg newint
mov ds,ax
mov al,16h
mov ah,25h
int 21h
mov ah,0
int 16h
ret
tsr endp
;--------------------------------------------------------------------
newint proc far
start:
push ax
push bx
push cx
push dx
push si
push di
push bp
push ds
push es
sti
mov ax,cs
mov ds,ax
mov es,ax
mov ah,2
int 1aH
mov dl,dh
and dh,0fh
mov cl,4
shr dl,cl
add dx,3030h
mov sec,dx
mov ah,13h
mov al,0
mov bh,0
mov bl,7
mov cx,2
mov dx,004eh
lea bp,sec
int 10h
cli
pop es
pop ds
pop bp
pop di
pop si
pop dx
pop cx
pop bx
pop ax
jmp cs:oldint
newint endp
;--------------------------------------------------------------------
sec dw ?
oldint dd ?
proc_len equ $-tsr
;--------------------------------------------------------------------
end begain
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -