?? 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('$') ;緩沖區(qū)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 ;循環(huán),以此把結(jié)構(gòu)res內(nèi)的各項元素賦空值'$',總分?jǐn)?shù)組個元素賦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 ;置光標(biāo)位置、頁號與總條目數(shù)為初值
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 ;復(fù)制路徑至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 ;讀取文件之緩沖區(qū)buf
mov ah,3fh
mov bx,fd
push bx
mov cx,lb
int 21h
jc re
lea si,buf
mov al,[si] ;緩沖區(qū)第一個字符為條目個數(shù)tot
mov tot,al
inc si
lea di,tota
mov bl,1
rt: cmp bl,tot ;從緩沖區(qū)第二個條目起(tot-1)*2個字節(jié)為總分?jǐn)?shù)組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 ;緩沖區(qū)之后的(tot-1)*44個字節(jié)為結(jié)構(gòu)res的內(nèi)容
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 ;關(guān)閉文件
mov bx,fd
pop bx
int 21h
jc re
jmp rs
re: mov ah,6 ;打開、讀取或關(guān)閉文件出錯
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 ;成功打開、讀取并關(guān)閉文件
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 ;復(fù)制路徑至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 ;將條目個數(shù)tot存入緩沖區(qū)第一個字節(jié)
mov al,tot
mov byte ptr [si],al
inc si
lea di,tota
mov bl,1
wt: cmp bl,tot ;總分?jǐn)?shù)組tota的前(tot-1)項元素存入緩沖區(qū)
jnb wr1
mov ax,[di]
mov [si],ax
add si,2
add di,2
inc bl
jmp wt
wr1: lea di,res ;結(jié)構(gòu)res的內(nèi)容存入緩沖區(qū)
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 ;關(guān)閉文件
mov bx,fd
int 21h
jc we
jmp ws
we: mov ah,6 ;打開、存儲或關(guān)閉文件出錯
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 ;成功打開、存儲并關(guān)閉文件
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 ;繪制輸入窗口子函數(shù)wnd
mov ah,6
mov al,0
mov bh,70h
mov ch,10
mov cl,10
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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -