2022-08-21 09:07:57 +00:00
|
|
|
|
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
|
2021-01-12 23:44:11 +00:00
|
|
|
|
|