mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-19 09:56:10 +00:00
112 lines
3.9 KiB
NASM
112 lines
3.9 KiB
NASM
|
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
|
|||
|
|