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

Главная/

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

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

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

Язык ассемблер для IBM PC и программирования, Высшая шко-

ла, 1992г

Приложение

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

; Курсовой проект по дисциплине

; "Системное программное обеспечение"

; студента гр.410703 Федосенко Д.В.

; (c)1997 БГУИР

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

.MODEL TINY

.CODE

ORG 100h

begin: jmp start

HelpStr db 13,10,'KP v1.0, Copyright (c) 1997, БГУИР, Федосенко Д.В.'

db 13,10,13,10,'При запуске без параметров выводит подказку'

db 13,10,'Запуск с параметром должен иметь вид: kp диск:

\каталог\маска [/D] [/M]'

db 13,10,'Где маска (при использовании /D) - любые символы и

имена, включая * и ?'

db 13,10,' (при использовании /M) - название

подкаталога.'

db 13,10,'/D - вывод директория по маске

/M - создание подкаталога по маске'

db 13,10,'Например:kp C:\LANG\BP\*.* /D - вывод всех файлов

и каталогов из C:\LANG\BP'

db 13,10,' kp C:\* /D - вывод только каталогов из

корневого каталога диска C:'

db 13,10,' kp C:\UTIL /M - создание подкаталога UTIL

в корневом каталоге диска С:'

db 13,10,' kp /D - вывод всех файлов и каталогов по

текущему пути'

db 13,10,'Если ВЫ используете /M, то указывать название

подкаталога обязательно!',13,10,'$'

stringT db 'К байт всего на данном диске',13,10,'$'

stringF db 'К байт свободно на диске',13,10,'$'

stringU db 13,10,'Вывод содержимого каталога $'

err_m1 db 13,10,'Ошибка номера функции! $'

err_m2 db 13,10,'Файл не найден! $'

err_m3 db 13,10,'Путь доступа не найден! $'

err_m4 db 13,10,'Открыто слишком много файлов! $'

ok_make db 13,10,'Подкаталог создан! $'

no_make db 13,10,'Подкаталог не создан, т.к. вы не указали его имя!'

db 13,10,'Для вывода подсказке запустите программу без

параметров.',10,13,'$'

str_f db 13,10,'Вы не указали ключ! $'

str_k db 13,10,'Вы указали неверный ключ! $'

totalKB dd 0 ; Ячейка для хранения объема диска

freeKB dd 0 ; Ячейка для хранения размера свободного места

space db ' $' ; Строка разделения

temp dw 0 ; Рабочая переменная

path db 65 dup (0) ; Текущий каталог (пока не определен - пустой)

NewDTA db 21 dup (0) ; Описываем структуру DTA

AttrF db 0 ; Атрибут файла

TimeF dw 0 ; Время создания файла

DateF dw 0 ; Дата создания файла

SizeF dd 0 ; Размер файла

NameF db 13 dup (0) ; Имя файла вместе с расширением

start:

push cs ; Заносим во все регистры сегмент кода

pop ds ;

push cs ;

pop es ;

;Проверяем строку параметров

mov cl,ds:[80h] ; Число символов параметров

cmp cl,0 ; Не равно-ли число параметров нулю ?

je help ; Если параметров нет, переходим

cmp cl,1 ; Если один параметр, например файл запущен

je help ; по Ctrl-Enter в NC, то тоже выходим

mov al,ds:[82h] ; Проверяем на ввод без маски

cmp al,'/' ; Наклонная черта ?

jne not_help ; Нет - выходим

mov al,ds:[83h] ; Да - смотрим дальше

cmp al,'M' ; Если введено /M

je not_m

cmp al,'D' ; Если введно /D

je noparam

jmp not_help

help:

mov ah,9 ; Вывод подсказки

lea dx,HelpStr

int 21h

ret ; Выход в DOS

not_m:

mov ah,9 ; Подкаталог не созданб т.к. вы не

lea dx,no_make ; указали имя

int 21h

ret ; Выход в DOS

not_help: ; Если маска введена

mov ch,0

mov di,81h ; Адрес первого символа параметра

mov al,' ' ; Сканировать будем до первого пробела

CheckParam:

repe scasb ; Запускаем сканирование строки

jne IsParam

IsParam: ; Если пробел найден

mov si,di ; Запоминаем адрес

dec si ; Уменьшаем на единицу

lea di,path ; Устанавливаем адрес строки параметров

inc cl

MoveParam:

lodsb ; Загружаем один символ строки параметров

cmp al,' ' ; Проверяем, не равен ли он пробелу

je EndMoveParam ; Если равен, значит конец строки

stosb ; Иначе пересылаем в строку параметров - path

loop MoveParam ; Цикл до конца строки

EndMoveParam:

push ax ;сохраним на всякий случай

lodsb ;загружаем еще один символ

cmp al,'/' ;если это /

je okk

mov ah,9 ;иначе вываливаемся с error

lea dx,str_F

int 21h

int 20h

okk: lodsb ;загружаем еще один символ

cmp al,'D' ;если это /D

je Dire ;то запуск DirE

cmp al,'M' ;если это /M

je MakeE ;то запускаем MakeE

mov ah,9 ;иначе вываливаемся с error

lea dx,str_K

int 21h

int 20h

DirE: pop ax

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

mov [di],al

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

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

int 21h ; Выводим строку "Текущий каталог"

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

mov bx,01

mov cx,50

lea dx,path

int 21h

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

jmp skip_curdir ; Обходим определение текущего каталога

NoParam: ; Если не заданы параметры

call curdir ; Определяем текущий каталог

skip_curdir:

lea dx,NewDTA ; Устанавливаем указатель на свою область DTA

mov ah,1Ah

int 21h

call WLabel ; Выводим метку диска

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

mov cx,10h ; В CX - атрибут каталога - 10h

lea dx,path ; В DX - путь для поиска (был определен выше)

int 21h

jc NowFiles ; Если ни одного

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


Copyright © 2005—2007 «RefStore.Ru»