←предыдущая следующая→
1 2 3 4 5 6 7
Переводим символ в нижний регистр
skip1:
mov dl,al
mov ah,02 ; Функция вывода символа на экран
int 21h
inc si ; Увеличиваем адрес
inc cx ; Увеличиваем сченчик
jmp loop1 ; Переход на следующий символ
exit2:
call ClrName ; Чистим поле вывода
mov ax,word ptr SizeF
mov dx,word ptr SizeF+2
call Decimal
call WrtDate
call WrtTime
call crlf
ret
WrtFile endp
;:::::::::::::::::::::::::::::::::::::::
;::: Выводит метку текущего диска ::::::
;:::::::::::::::::::::::::::::::::::::::
WLabel proc near
call ClrName ; Чистим поле вывода
mov ah,9 ; Функция вывода строки на экран
lea dx,StringL ; В DX - адрес строки
int 21h
lea si,path4
mov ah,19h ; Получаем текущий диск
int 21h
add al,41h ; Переводим его в букву
mov [si],al ; Заносим во временную строку
lea si,path ; Путь поиска
lea di,path4 ; Временная строка
mov al,[si] ; Берем первый символ пути поиска
cmp al,65 ; Буква диска 'A'?
jl not_xchg ; Если меньше, выходим
cmp al,122 ; Буква диска 'z'?
jg not_xchg ; Если больше, выходим
cmp al,91 ; Если '[' - выход
je not_xchg
cmp al,92 ; Если '\' - выход
je not_xchg
cmp al,93 ; Если ']' - выход
je not_xchg
cmp al,94 ; Если '^' - выход
je not_xchg
cmp al,95 ; Если '_' - выход
je not_xchg
cmp al,96 ; Если '`' - выход
je not_xchg
mov [di],al
not_xchg:
mov ah,4eh ; Ищем файл
mov cx,08h ; с атрибутом 08h, т.е. метку тома
lea dx,path4 ; В DX - путь для поиска
int 21h
mov ah,40h ; Функция вывода строки на экран
mov bx,01
mov cx,13 ; Выводим 13 символов
lea dx,NameF ; В DX - адрес строки
int 21h
call crlf ; Перевод строки, возврат каретки
call crlf ; Перевод строки, возврат каретки
call ClrName ; Чистим поле вывода
ret
StringL db 'Метка диска $'
path4 db 'c:\*.*',0 ; Первый символ будет заменен на текущий диск
WLabel endp
;::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:::: Производит перевод строки и возврат каретки :::::
;::::::::::::::::::::::::::::::::::::::::::::::::::::::
crlf proc near
mov ax,0e0dh ; Функция вывода символа
int 10h ; Выводим символ 13 на экран
mov ax,0e0ah ; Функция вывода символа
int 10h ; Выводим символ 10 на экран
ret
crlf endp
;::::::::::::::::::::::::::::::::::::::::::
;::: Выводит на экран текущий каталог :::::
;::::::::::::::::::::::::::::::::::::::::::
curdir proc near
mov ah,9 ; Функция вывода строки
lea dx,stringC ; В DX - адрес строки
int 21h ; Выводим строку "Текущий каталог"
lea si,path
mov ah,19h ; Получаем текущий диск
int 21h
add al,41h ; Переводим его в букву
mov [si],al
inc si
mov al,58 ; Добавляем символ ':'
mov [si],al
inc si
mov al,92 ; Добавляем символ '\'
mov [si],al
mov ah,47h ; Функция получения текущего каталога
mov dl,00
lea si,path+3 ; Добавляем к диску каталог
int 21h
lea si,path ; Производим посимвольный вывод полного пути
a10loop:
cmp byte ptr [si],0
je a20exit
mov al,[si]
mov dl,al
mov ah,02
int 21h
inc si
jmp a10loop
a20exit:
; Добавляем к текущему пути маску *.* для поиска каталогов и файлов
dec si ; Уменьшаем адрес на 1 и получаем последний
mov al,[si] ; символ, а не NUL
inc si ; Возвращаем назад SI
cmp al,92 ; Проверяем, если посл. символ - слэш, то выход
je skip_slash
mov al,92 ; Иначе добавляем символ '\'
mov [si],al
inc si
skip_slash:
mov al,42 ; Добавляем символ '*'
mov [si],al
inc si
mov al,46 ; Добавляем символ '.'
mov [si],al
inc si
mov al,42 ; Добавляем символ '*'
mov [si],al
inc si
mov al,0 ; Добавляем символ NUL
mov [si],al
call crlf
ret
stringC db 13,10,'Текущий каталог $'
curdir endp
Div1024 proc near
mov cx,10
dd20: shr ax,1
shr dx,1
jnc dd30
or ah,10000000b
dd30: loop dd20
ret
Div1024 endp
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:: Получает информацию о диске. Номер диска берет из строки поиска :::
;:: После вызова в AX - количество секторов в кластере :::
;:: в BX - число свободных кластеров :::
;:: в CX - число байтов в секторе :::
;:: в DX - число кластеров на диске :::
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
GetInfo proc near
mov dl,0 ; В DL заносим 0, т.е. текущий диск
lea si,path ; Получаем букву диска из пути поиска
mov al,[si]
sub al,40h ; Переводим ее в цифру
cmp al,0 ; Номер диска 0 ?
jl not_1 ; Если меньше, выходим
cmp al,26 ; Номер диска 26 ?
jg again ; Если больше, то идем на проверку строчных букв
jmp mov_val ; Переход на обработку
again:
sub al,32 ; Если буква диска строчная, уменьшаем еще раз
cmp al,0 ; Номер диска 0 ?
jl not_1 ; Если меньше, выходим
cmp al,26
←предыдущая следующая→
1 2 3 4 5 6 7
|
|