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

📄 05312020.asm

📁 汇编语言实现的电话号码本~含有内存驻留的功能
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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 + -