Пример: Глобальная сеть INTERNET
Я ищу:
На главную  |  Добавить в избранное  

Главная/

Программирование, базы данных. /

Разработка командного процессора, реализующего команды dir и mkdir на ассемблере

←предыдущая следующая→
1 2 3 4 5 6 7 

одного каталога нет, ищем файлы

call WrtDir ; Выводим имя первого найденного каталога

FindNextDir:

mov ah,4fh ; Функция продолжает поиск, начатый ф-цией 4eh

int 21h

jc NowFiles ; Если больше каталогов нет, ищем файлы

call WrtDir ; Выводим найденный каталог

jmp FindNextDir ; Переходим на поиск следующего

NowFiles:

mov ah,4eh ; Функция находит первый файл с маской *.*

mov cx,27h ; В CX - атрибут файла - 27h (RO+Hid+Sys+Arc)

lea dx,path ; В DX - путь для поиска файлов

int 21h

jc halt ; Если файлов нет, то на выход

call WrtFile ; Если файл найден, выводим его имя

FindNextFile:

mov ah,4fh ; Функция продолжает поиск файлов

int 21h

jc halt ; Если больше файлов нет, то на выход

call WrtFile ; Выводим имя файла на экран

jmp FindNextFile ; Переход на поиск следующего файла

halt: call crlf ; Перевод строки, возврат каретки

call totsize ; Вывод объема диска

call fresize ; Вывод оставшегося места

ret ; Выход в DOS

;------------- создание подкаталога ---------------------------------

MakeE: pop ax ; восстанавливаем ax

mov al,0 ; Добавляем символ NUL к строке параметров

mov [di],al

mov ah,40h ; Выводим маску поиска

mov bx,01

mov cx,50

lea dx,path

int 21h

mov ah,39h ; функция создания подкаталога

lea dx,path

int 21h ; выполнить

cmp ax,01h ; проверка на ошибку #1

je p_err1

cmp ax,02h ; проверка на ошибку #2

je p_err2

cmp ax,03h ; проверка на ошибку #3

je p_err3

cmp ax,04h ; проверка на ошибку #4

je p_err4

mov ah,9h ; Ошибки нет!

lea dx,ok_make ; Вывод строки - Подкаталог создан

int 21h

int 20h ; Выход в DOS

;-------- Обработка ошибок --------------------------------

p_err1: mov ah,9h

lea dx,err_m1

int 21h

int 20h

p_err2: mov ah,9h

lea dx,err_m2

int 21h

int 20h

p_err3: mov ah,9h

lea dx,err_m3

int 21h

int 20h

p_err4: mov ah,9h

lea dx,err_m4

int 21h

int 20h ; Выход в DOS

;------------------------------------------------------------------------

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

;:: Процедура высчитывает и выводит время создания файла/каталога :::

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

WrtTime proc near

mov ah,9

lea dx,space

int 21h

mov ax,TimeF

shr ax,11

call DecWrt

mov ax,0e3ah

int 10h

mov ax,TimeF

shl ax,5

shr ax,10

call DecWrt

mov ax,0e3ah

int 10h

mov ax,TimeF

shl ax,11

shr ax,10

call DecWrt

ret

WrtTime endp

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

;::: Процедура высчитывает и выводит дату создания файла/каталога :::

;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

WrtDate proc near

mov ah,9

lea dx,space

int 21h

mov ax,DateF

shl ax,11

shr ax,11

call DecWrt

mov ax,0e2fh

int 10h

mov ax,DateF

shl ax,7

shr ax,12

call DecWrt

mov ax,0e2fh

int 10h

mov ax,DateF

shr ax,9

add ax,80

call DecWrt

ret

WrtDate endp

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

; Забивает пробелами поле, в которое записывается имя файла (NameF) ::

; Это необходимо для того, чтобы не было наложений имен файлов при выводе ::

;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

ClrName proc near

lea si,NameF ; Получаем адрес имени файла

mov cx,1

rp: cmp cx,13 ; Если CX=13, то имя обработано полностью

je vihod ; поэтому выходим

mov al,0 ; Заносим код символа 0 (пустой символ)

mov [si],al ; Записываем пустой символ в строку NameF

inc si ; Увеличиваем адрес строки

inc cx ; Увеличиваем счетчик записаных символов

jmp rp ; Повторяем цикл

vihod: ret

ClrName endp

;::::::::::::::::::::::::::::::::::::::

;::: Выводит имя каталога на экран ::::

;::::::::::::::::::::::::::::::::::::::

WrtDir proc near

cmp AttrF,10h ; Проверяем атрибут: если 10h, то каталог

jne exit1 ; Иначе на выход

mov ah,40h ; Функция вывода строки

mov bx,01

mov cx,12 ; Выводим 13 символов

lea dx,NameF ; В DX - адрес строки вывода

int 21h

mov ah,9

lea dx,dirstr

int 21h

call WrtDate

call WrtTime

call crlf ; Перевод строки, возврат каретки

exit1: call ClrName ; Чистим поле вывода

ret

dirstr db '<КАТАЛОГ>$'

WrtDir endp

;:::::::::::::::::::::::::::::::::::::::

;::: Выводит имя файла на экран ::::::::

;:::::::::::::::::::::::::::::::::::::::

WrtFile proc near

cmp AttrF,10h ; Проверяем атрибут: если не файл, то выходим

je exit2

lea si,NameF ; Загружанм адрес строки в SI

mov cx,1

loop1:

cmp cx,13 ; Проверяем, если CX=13, то вывод закончен

je exit2 ; выходим

mov al,[si] ; Заносим в AL выводимый символ

cmp al,65 ; Сравниваем его с 'A'

jl skip1 ; Если меньше, то не переводим в нижний регистр

cmp al,90 ; Сравниваем AL с 'Z'

jg skip1 ; Если больше, то не переводим в нижний регистр

add al,32 ; Переводим

←предыдущая следующая→
1 2 3 4 5 6 7 


Copyright © 2005—2007 «RefStore.Ru»