主题:请教个问题,谁帮我看一下?
我想写个获得磁盘剩余容量的程序,查了一些资料,可是写出来后问题很多,高手指点一下吧!
INCLUDE Irvine16.inc
.data
buffer ExtGetDskFreSpcStruc <>
driveName BYTE "C:\",0
str2 BYTE "Free space (KB): ","$"
str3 BYTE "Function call failed.",0dh,0ah,"$"
.code
main PROC
mov ax,@data
mov ds,ax
mov es,ax
mov buffer.Level,0
mov di, OFFSET buffer
mov cx, SIZEOF buffer
mov dx, OFFSET DriveName
mov ax, 7303h
int 21h
jc error
mov dx,OFFSET str2
call Write
call CalcVolumeFree
call WriteDec
call Crlf
jmp quit
error:
mov dx,OFFSET str3
call Write
quit:
mov ax,4c00h
int 21h
main ENDP
;-------------------------------------------------------------------
CalcVolumeFree PROC
mov eax,buffer.SectorsPerCluster
shl eax,9
mul buffer.AvailableClusters
mov ebx,1024
div ebx
ret
CalcVolumeFree ENDP
;-------------------------------------------------------------------
Crlf proc
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
Crlf endp
;-------------------------------------------------------------------
WriteDec proc
mov ecx,1000000000d
call decdiv
mov ecx,100000000d
call decdiv
mov ecx,10000000d
call decdiv
mov ecx,1000000d
call decdiv
mov ecx,100000d
call decdiv
mov ecx,10000d
call decdiv
mov ecx,1000d
call decdiv
mov ecx,100d
call decdiv
mov ecx,10d
call decdiv
mov ecx,1d
call decdiv
ret
WriteDec endp
;-------------------------------------------------------------------
decdiv proc
mov edx,0
div ecx
mov eax,edx
mov dl,al
add dl,30
mov ah,2
int 21h
ret
decdiv endp
;-------------------------------------------------------------------
Write proc
mov ah,9
int 21h
ret
Write endp
;---------------------------------------------------------
END main
INCLUDE Irvine16.inc
.data
buffer ExtGetDskFreSpcStruc <>
driveName BYTE "C:\",0
str2 BYTE "Free space (KB): ","$"
str3 BYTE "Function call failed.",0dh,0ah,"$"
.code
main PROC
mov ax,@data
mov ds,ax
mov es,ax
mov buffer.Level,0
mov di, OFFSET buffer
mov cx, SIZEOF buffer
mov dx, OFFSET DriveName
mov ax, 7303h
int 21h
jc error
mov dx,OFFSET str2
call Write
call CalcVolumeFree
call WriteDec
call Crlf
jmp quit
error:
mov dx,OFFSET str3
call Write
quit:
mov ax,4c00h
int 21h
main ENDP
;-------------------------------------------------------------------
CalcVolumeFree PROC
mov eax,buffer.SectorsPerCluster
shl eax,9
mul buffer.AvailableClusters
mov ebx,1024
div ebx
ret
CalcVolumeFree ENDP
;-------------------------------------------------------------------
Crlf proc
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
mov ah,2
int 21h
ret
Crlf endp
;-------------------------------------------------------------------
WriteDec proc
mov ecx,1000000000d
call decdiv
mov ecx,100000000d
call decdiv
mov ecx,10000000d
call decdiv
mov ecx,1000000d
call decdiv
mov ecx,100000d
call decdiv
mov ecx,10000d
call decdiv
mov ecx,1000d
call decdiv
mov ecx,100d
call decdiv
mov ecx,10d
call decdiv
mov ecx,1d
call decdiv
ret
WriteDec endp
;-------------------------------------------------------------------
decdiv proc
mov edx,0
div ecx
mov eax,edx
mov dl,al
add dl,30
mov ah,2
int 21h
ret
decdiv endp
;-------------------------------------------------------------------
Write proc
mov ah,9
int 21h
ret
Write endp
;---------------------------------------------------------
END main