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

📄 file.asm

📁 学生成绩管理系统
💻 ASM
字号:
;file.asm文件包括文件的新建、读取和存储功能
extrn	res:byte,tot:byte,tota:word,fd:word,pag:byte,row:byte,line:byte
public	new,load,save					;新建(刷新)模块new,读取模块load,存储模块save
result	struc
nam	db 11,?,11 dup('$')
num	db 7,?,7 dup('$')
asm	db 4,?,4 dup('$')
ct	db 4,?,4 dup('$')
os	db 4,?,4 dup('$')
total	db 4 dup('$')
result	ends
stacksg	segment stack 's'
	dw 64 dup('s')
stacksg	ends
data	segment public
l	db 'Enter the Load Path:'
ll	equ $-l
rerr	db '        Load Error!','$'
rsu	db '        Load Sucess!','$'
s	db 'Enter the Save Path:'
sl	equ $-s
werr	db '        Save Error!','$'
wsu	db '        Save Sucess!','$'
p	db 32,?,32 dup('$')				;用于输入文件路径的字符串p
path	db 32 dup('$')					;文件路径字符串path
buf	db 2300 dup('$')				;缓冲区buf
lb	equ $-buf
data	ends
code	segment

new	proc far					;新建(刷新)
	assume cs:code,ds:data,es:data,ss:stacksg
	mov ax,data
	mov ds,ax
	mov es,ax

	lea bp,res
	lea di,tota
	mov al,1
n:	cmp al,tot					;循环,以此把结构res内的各项元素赋空值'$',总分数组个元素赋0
	jnb nqu

	lea si,[bp].nam
	mov cl,[si]
	sub cl,1
	xor ch,ch
	mov byte ptr [si+1],0
	add si,2
nl1:	mov byte ptr [si],'$'
	inc si
	loop nl1

	lea si,[bp].num
	mov cl,[si]
	sub cl,1
	xor ch,ch
	mov byte ptr [si+1],0
	add si,2
nl2:	mov byte ptr [si],'$'
	inc si
	loop nl2

	lea si,[bp].asm
	mov cl,[si]
	sub cl,1
	xor ch,ch
	mov byte ptr [si+1],0
	add si,2
nl3:	mov byte ptr [si],'$'
	inc si
	loop nl3

	lea si,[bp].ct
	mov cl,[si]
	sub cl,1
	xor ch,ch
	mov byte ptr [si+1],0
	add si,2
nl4:	mov byte ptr [si],'$'
	inc si
	loop nl4

	lea si,[bp].os
	mov cl,[si]
	sub cl,1
	xor ch,ch
	mov byte ptr [si+1],0
	add si,2
nl5:	mov byte ptr [si],'$'
	inc si
	loop nl5

	lea si,[bp].total
	mov cl,3
	xor ch,ch
nl6:	mov byte ptr [si],' '
	inc si
	loop nl6

	mov word ptr [di],0

	add bp,44
	add di,0
	inc al
	jmp n

nqu:	mov row,3					;置光标位置、页号与总条目数为初值
	mov line,25
	mov pag,0
	mov tot,1
	
	ret
new	endp

load	proc far					;读取
	assume cs:code,ds:data,es:data,ss:stacksg
	mov ax,data
	mov ds,ax
	mov es,ax

	call wnd					;绘制窗口并显示提示
	mov cx,ll
	lea bp,l
	int 10h

	mov ah,2
	mov bh,0
	mov dh,12
	mov dl,13
	int 10h
	mov ah,0ah
	lea dx,p
	int 21h						;输入路径

	lea si,path
	mov cx,31
aspl:	mov byte ptr [si],'$'
	inc si
	loop aspl

	lea si,p					;复制路径至path
	lea di,path
	mov cl,[si+1]
	xor ch,ch
	add si,2
	cld
	rep movsb
	mov byte ptr [di],0

ofl:	mov ah,3dh					;打开文件
	lea dx,path
	mov al,2
	int 21h
	jc re
	mov fd,ax

rf:	lea dx,buf					;读取文件之缓冲区buf
	mov ah,3fh
	mov bx,fd
	push bx
	mov cx,lb
	int 21h
	jc re

	lea si,buf
	mov al,[si]					;缓冲区第一个字符为条目个数tot
	mov tot,al
	inc si
	lea di,tota
	mov bl,1
rt:	cmp bl,tot					;从缓冲区第二个条目起(tot-1)*2个字节为总分数组tota的前(tot-1)项元素(tota为dw型)
	jnb rr1
	mov ax,[si]
	mov [di],ax
	add si,2
	add di,2
	inc bl
	jmp rt
rr1:	lea di,res					;缓冲区之后的(tot-1)*44个字节为结构res的内容
	mov al,tot
	dec al
	xor ah,ah
	mov bl,44
	mul bl
	mov cx,ax
	mov bx,1
rr:	cmp bx,cx
	ja cfl
	mov al,[si]
	mov byte ptr [di],al
	inc si
	inc di
	inc bx
	jmp rr

cfl:	mov ah,3eh					;关闭文件
	mov bx,fd
	pop bx
	int 21h
	jc re
	jmp rs

re:	mov ah,6					;打开、读取或关闭文件出错
	mov al,0
	mov bh,74h
	mov ch,11
	mov cl,20
	mov dh,11
	mov dl,35
	int 10h

	mov ah,2
	mov bh,0
	mov dh,11
	mov dl,12
	int 10h

	mov ah,9					;显示错误提示
	lea dx,rerr
	int 21h
	jmp lqu

rs:	mov ah,6					;成功打开、读取并关闭文件
	mov al,0
	mov bh,72h
	mov ch,11
	mov cl,20
	mov dh,11
	mov dl,35
	int 10h

	mov ah,2
	mov bh,0
	mov dh,11
	mov dl,12
	int 10h

	mov ah,9					;显示成功提示
	lea dx,rsu
	int 21h

lqu:	mov ah,0
	int 16h
	ret
load	endp

save	proc far					;存储
	assume cs:code,ds:data,es:data,ss:stacksg
	mov ax,data
	mov ds,ax
	mov es,ax

	call wnd					;绘制窗口并显示提示
	mov cx,sl
	lea bp,s
	int 10h

	mov ah,2
	mov bh,0
	mov dh,12
	mov dl,13
	int 10h
	mov ah,0ah
	lea dx,p
	int 21h						;输入路径

	lea si,path
	mov cx,31
asps:	mov byte ptr [si],'$'
	inc si
	loop asps

	lea si,p					;复制路径至path
	lea di,path
	mov cl,[si+1]
	xor ch,ch
	add si,2
	cld
	rep movsb
	mov byte ptr [di],0

nf:	mov ah,3ch					;新建文件
	mov cx,0
	lea dx,path
	int 21h
	jc we
	mov fd,ax

ofs:	mov ah,3dh					;打开文件
	lea dx,path
	mov al,2
	int 21h
	jc we
	mov fd,ax
wf:	lea si,buf					;将条目个数tot存入缓冲区第一个字节
	mov al,tot
	mov byte ptr [si],al
	inc si
	lea di,tota
	mov bl,1
wt:	cmp bl,tot					;总分数组tota的前(tot-1)项元素存入缓冲区
	jnb wr1
	mov ax,[di]
	mov [si],ax
	add si,2
	add di,2
	inc bl
	jmp wt
wr1:	lea di,res					;结构res的内容存入缓冲区
	mov al,tot
	dec al
	xor ah,ah
	mov bl,44
	mul bl
	mov cx,ax
	mov bx,1
wr:	cmp bx,cx
	ja ew
	mov al,[di]
	mov byte ptr [si],al
	inc si
	inc di
	inc bx
	jmp wr

ew:	mov al,tot
	dec al
	xor ah,ah
	mov cl,2
	mul cl
	mov bx,ax
	mov al,tot
	dec al
	xor ah,ah
	mov cl,44
	mul cl
	add ax,bx
	add ax,1
	mov cx,ax
	mov bx,fd
	lea dx,buf
	mov al,0
	mov ah,40h
	int 21h
	jc we

cfs:	mov ah,3eh					;关闭文件
	mov bx,fd
	int 21h
	jc we
	jmp ws

we:	mov ah,6					;打开、存储或关闭文件出错
	mov al,0
	mov bh,74h
	mov ch,11
	mov cl,20
	mov dh,11
	mov dl,35
	int 10h

	mov ah,2
	mov bh,0
	mov dh,11
	mov dl,12
	int 10h

	mov ah,9					;显示错误提示
	lea dx,werr
	int 21h
	jmp squ

ws:	mov ah,6					;成功打开、存储并关闭文件
	mov al,0
	mov bh,72h
	mov ch,11
	mov cl,20
	mov dh,11
	mov dl,35
	int 10h

	mov ah,2
	mov bh,0
	mov dh,11
	mov dl,12
	int 10h

	mov ah,9					;显示成功提示
	lea dx,wsu
	int 21h

squ:	mov ah,0
	int 16h
	ret
save	endp

wnd	proc far					;绘制输入窗口子函数wnd

	mov ah,6
	mov al,0
	mov bh,70h
	mov ch,10
	mov cl,10
	mov dh,13
	mov dl,44
	int 10h

	mov ah,2
	mov bh,0
	mov dh,0
	mov dl,0
	int 10h

	mov ah,2
	mov cx,10
d0:	mov dl,0dh
	int 21h
	mov dl,0ah
	int 21h
	loop d0
	mov cx,11
d1:	mov dl,32
	int 21h
	loop d1
	mov dl,0c9h
	int 21h
	mov cx,31
d2:	mov dl,0cdh
	int 21h
	loop d2
	mov dl,0bbh
	int 21h
	mov dl,0dh
	int 21h
	mov dl,0ah
	int 21h
	mov cx,11
d3:	mov dl,32
	int 21h
	loop d3
	mov dl,0bah
	int 21h
	mov cx,31
d4:	mov dl,32
	int 21h
	loop d4
	mov dl,0bah
	int 21h
	mov dl,0dh
	int 21h
	mov dl,0ah
	int 21h
	mov cx,11
d5:	mov dl,32
	int 21h
	loop d5
	mov dl,0bah
	int 21h
	mov cx,31
d6:	mov dl,32
	int 21h
	loop d6
	mov dl,0bah
	int 21h
	mov dl,0dh
	int 21h
	mov dl,0ah
	int 21h
	mov cx,11
d7:	mov dl,32
	int 21h
	loop d7
	mov dl,0c8h
	int 21h
	mov cx,31
d8:	mov dl,0cdh
	int 21h
	loop d8
	mov dl,0bch
	int 21h

	mov ah,13h
	mov al,1
	mov bh,0
	mov bl,70h
	mov dh,11
	mov dl,13

	ret
wnd	endp

code	ends
	end

⌨️ 快捷键说明

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