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

Главная/

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

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

←предыдущая следующая→
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 


Copyright © 2005—2007 «RefStore.Ru»