我想写个获得磁盘剩余容量的程序,查了一些资料,可是写出来后问题很多,高手指点一下吧!
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