📄 file.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 + -