←предыдущая следующая→
1 2 3 4 5 6 7
; Номер диска 26 ?
jg not_1 ; Если больше, выходим
mov_val:
mov dl,al ; Заносим номер диска
not_1:
mov ah,36h ; Функция получения информации о диске
int 21h
ret
GetInfo endp
;::::::::::::::::::::::::::::::::::::::::::::::::::
;:: Выводит размер текущего диска в Килобайтах ::::
;::::::::::::::::::::::::::::::::::::::::::::::::::
totsize proc near
call GetInfo
mov temp,dx ; Запоминаем число кластеров
mul cx ; Умножаем число секторов на размер сектора
mul temp ; Умножаем все на количество кластеров
call Div1024 ; Делим на 1024 и получаем размер в Кбайтах
mov word ptr totalKB,ax ; Запоминаем младшее и старшее слово
mov word ptr totalKB+2,dx ; полученного результата
call Decimal
mov ah,9
lea dx,stringT
int 21h
ret
totsize endp
;:::::::::::::::::::::::::::::::::::::::::::::::
;::: Выводит размер свободного пространства ::::
;::: текущего диска в Килобайтах ::::
;:::::::::::::::::::::::::::::::::::::::::::::::
fresize proc near
call GetInfo
mul cx
mul bx
call Div1024
mov word ptr freeKB,ax
mov word ptr freeKB+2,dx
call Decimal
mov ah,9
lea dx,stringF
int 21h
ret
fresize endp
DecWrt proc near
lea si,outst ; очищаем строку
mov cl,0
mov [si],cl
mov [si+1],cl
lea si,outst
mov cl,48
mov [si],cl
mov cx,0010
lea si,outst+1
a20: cmp ax,0010
jb a30
xor dx,dx
div cx
or dl,30h
mov [si],dl
dec si
jmp a20
a30: or al,30h
mov [si],al
mov ah,40h ; выводим строку
mov bx,01
mov cx,02
lea dx,outst
int 21h
ret
outst db ' '
DecWrt endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::
;:: Процедура вывода числа в десятичном формате ::::
;:::::::::::::::::::::::::::::::::::::::::::::::::::
Decimal proc C uses es di bx cx dx ds
mov bx,10
push cs
pop es
push ax ; Заполняем массив DecString байтами 00
xor ax,ax ;
cld ;
mov cx,3 ;
lea di,DecStr ;
rep stosw ;
pop ax ;
lea di,DecStr+5 ; DI адресует последний байт массива
std
div bx
push ax
mov ax,dx
or al,30h ; Преобразуем в ASCII-символ.
stosb
pop ax
c10:
xor cx,cx
c20:
cmp ax,bx ; Делимое в AX, делитель в BX.
jb c30 ; Частное накапливается в CX.
sub ax,bx ; Деление методом вычитания
inc cx ; (страхует от переполнения)
jmp c20
c30:
or al,30h ; Переводим в ASCII
stosb ; Заносим в DecString
mov ax,cx
cmp ax,bx
jae c10
or al,0
jz c50
or al,30h
stosb
c50:
mov ah,9
lea dx,space
int 21h
mov ah,9
lea dx,DecStr
int 21h
ret
DecStr db 6 dup (0)
db '$'
Decimal endp
end begin
←предыдущая следующая→
1 2 3 4 5 6 7
|
|