title FREE.ASM page,132 cseg segment para 'code' assume cs:cseg main proc far org 100h start: jmp begin banner db 0ah,'FREE Vers 1.0 - Sept. 1985 - by Art Merrill',0dh,0ah,'$' db 'Copyright (C) 1985',0dh,0ah,'$' db 'Ziff-Davis Publishing Company',0dh,0ah,'$' total: db 0ah,8 dup(0),' bytes total disk space',0dh,0ah diff: db 8 dup(0),' bytes allocated',0dh,0ah bytes: db 8 dup(0),' bytes available on disk',0dh,0ah,0ah,'$' hltotal: dw 0,0 hlbytes: dw 0,0 begin: mov dx,offset banner mov ah,9 int 21h mov si,5ch ;address of selected drive mov dl,[si] mov ah,36h ;get disk free space int 21h push ax ;save for total bytes push cx ;save for total bytes push dx ;save for total bytes mul bx ;get total clusters mul cx ;get total bytes std mov di,offset hlbytes+2 xchg ax,dx stosw xchg ax,dx stosw mov di,offset bytes+7 ;storage for ascii printout call ascii pop dx ;get back total clusters pop cx ;get back bytes per sector pop ax ;get back sectors per cluster mul dx ;total clusters mul cx ;bytes per sector mov di,offset hltotal+2 ;same routine as above to get xchg ax,dx ; total bytes stosw xchg ax,dx stosw mov di,offset total+8 ;storage for ascii printout call ascii mov ax,word ptr hltotal+2 ;calculate difference between sub ax,word ptr hlbytes+2 ; total bytes and bytes allocated xchg ax,dx ; to get total bytes remaining mov ax,word ptr hltotal sub ax,word ptr hlbytes jnc skip dec dx ;adjust total for carry skip: mov di,offset diff+7 ;storage for ascii printout call ascii mov dx,offset total ;print results mov ah,9 int 21h int 20h ;exit main endp ascii proc near xchg bp,dx ;save high word mov bx,0ah ;divisor mov cl,30h ;conversion for ascii rpt1: cmp bp,0 ;are we done with high words jz rpt2 ;yes xchg ax,bp ;no-get high word xor dx,dx ;clear dx div bx xchg bp,ax ;this will be the new high word div bx ;divide low word + remainder or dl,cl ;convert hex value to ascii mov [di],dl ;quotient into storage dec di ;step back one byte jmp rpt1 ;go again rpt2: xor dx,dx ;clear dx div bx or dl,cl ;convert hex value to ascii mov [di],dl ;quotient into storage dec di ;step back one byte cmp ax,0 ;are we done? jnz rpt2 ;no ret ;yes ascii endp cseg ends end start