Рефераты. Вивід вмісту каталогу y середовищі MS DOS

Copyright (C) 2005 by Romanov Alexander

Filename OnR Skr Sys Tom Kat Arh Time Data Size

. * 11:59:18 11\5 \2005 00

.. * 11:59:18 11\5 \2005 00

BLW32.DLL * 12:12:0 14\5 \1996 52020

DEBUG.EXE * * 22:22:0 5 \5 \1999 0518A

USA.BLL * 12:12:0 14\5 \1996 18DCD

MYREP.CBA * 18:48:42 25\1 \2002 01F

DIRECT * 12:27:54 11\5 \2005 00

CATALOG3.CAB * * 22:22:0 5 \5 \1999 425C3

SUHELPER.BIN * * 22:22:0 5 \5 \1999 05C0

SAVE32.COM * * 22:22:0 5 \5 \1999 0398

ASD.LOG * * 13:8 :20 11\8 \2004 0162

IO.SYS * * * 22:22:0 5 \5 \1999 364B6

MSDOS.SYS * * * * 18:30:28 16\7 \2004 0697

08-APRIL.MP3 * 11:42:44 7 \12\2003 B11100

DR.EXE * 12:14:28 11\5 \2005 05A1

DR.BAT * 12:54:34 4 \5 \2005 09B

D:\Program\ASM\misk>dr.exe *.exe

The DIRWUER wersion 1.0

Romanov Alexander Urievich. KIT-13A NTU"KhPI"

Copyright (C) 2005 by Romanov Alexander

Filename OnR Skr Sys Tom Kat Arh Time Data Size

DEBUG.EXE * * 22:22:0 5 \5 \1999 0518A

DR.EXE * 12:14:28 11\5 \2005 05A1

D:\Program\ASM\misk>dr s*.???

The DIRWUER wersion 1.0

Romanov Alexander Urievich. KIT-13A NTU"KhPI"

Copyright (C) 2005 by Romanov Alexander

Filename OnR Skr Sys Tom Kat Arh Time Data Size

SUHELPER.BIN * * 22:22:0 5 \5 \1999 05C0

SAVE32.COM * * 22:22:0 5 \5 \1999 0398

D:\Program\ASM\misk>dr d:\program\asm\misk\direct\*.*

The DIRWUER wersion 1.0

Romanov Alexander Urievich. KIT-13A NTU"KhPI"

Copyright (C) 2005 by Romanov Alexander

Filename OnR Skr Sys Tom Kat Arh Time Data Size

. * 12:27:54 11\5 \2005 00

.. * 12:27:54 11\5 \2005 00

BINASC.ASM * 11:3 :40 8 \5 \2005 0300

PARAMS.ASM * 13:31:20 6 \5 \2005 04E4

TD.EXE * 14:39:40 24\12\2002 784F0

Як видно із приведених результатів програма DR.EXE за умовчанням виводить весь вміст директорії, в якій вона розташована (приклад 1). Інші приклади демонструють різноманітні засоби виклику програми із заданням різноманітних масок, використовуючи символи "*" і "?". Останній приклад демонструє, що виклик DR.exe можна реалізувати і з маскою, що задає повний шлях до директорії, інформацію про яку необхідно вивести.

Таким чином, розроблена програма DR.exe повністю відповідає поставленому завданню про створення програми мовою асемблера, яка виводить вміст директорії, атрибути, розмір і час/дату створення файлів і папок, які в ній містяться.

4. Розробка задачі на мові високого рівня із використанням асемблерних фрагментів коду

Як показала третя глава, розробка програми чисто на асемблері є складним процесом і потребує розробки супутніх (допоміжних) модулів для реалізації моментів, що не пов'язані із основним алгоритмом задачі (таких, як вивід на екран, перетворення двійкових даних у ASCII-рядки, тощо). Мови високого рівня дають можливість реалізувати все автоматично [3]. Такий стан речей спонукає розробити програму, в якій основний алгоритм пошуку DTA і необхідних файлів, що відповідають масці, реалізовані асемблерними вставками, а задачі, пов'язані із розробкою інтерфейсу і виводу даних на екран, реалізовані, наприклад, мовою Pascal.

4.1. Розробка програми на Pascal

Мова Pascal дає можливість створити вказівник типу "запис" (поля "запису" описують атрибут, час, дату, розмір і ім'я файлу) прямо на стандартний буфер DTA, не створюючи власного і не виконуючи зайвих дій по встановленню нової адреси буфера DTA і відновлення старої після завершення програми. Вивід інформації про файл довіряється процедурі, яка обробляє поля вказівника на DTA і виводить дані стандартними функціями Pascal.

На початку програми є сенс запитувати користувача про бажання задати власну маску для файлів, або лишити стандартну ("*.*").

Згідно із зазначеними змінами було розроблено програму DIRWUER.pas, приведену нижче:

{DIRWUER.pas}

Uses crt;

{------FindFirst - шукає перше входження файлу, що відповідає заданій масці}

Function FindFirst (Path : PChar) : Boolean; assembler;

asm

mov ah, 4Eh {в ah номер функції першого пошуку}

mov cx, 3fh {в cx маска для всіх атрибутів файлу}

mov dx, word ptr Path {dx вказує на маску файлу}

int 21h {виклик функції першого пошуку файлу}

mov al, 0 {в al поміщується 0 - код помилки (false)}

jc @Failed {якщо помилка, повернути код помилки,}

inc al {інакше повернути 1 - true }

@Failed:

end;

{------FindNext шукає наступне входження файлів, маска і атрибути яких були задані при попередньому пошуку.}

Function FindNext : Boolean; assembler;

asm

mov ah, 4Fh {в ah номер функції наступного пошуку }

{файлу}

int 21h {пошук наступного файлу за параметром,}

{заданим функцією 4Eh}

mov al, 0 {в al поміщується 0 - код помилки (false)}

jc @Failed {повернути код помилки, якщо помилка}

inc al {інакше повернути 1 - true }

@Failed:

end;

Type

DTA = record {запис описує структуру DTA-буфера}

Reserved : Array[0..$14] of Byte; {резервна область пам'яті}

Attrib : Byte; {поле атрибуту}

Time : Word; {поле часу створення}

Date : Word; {поле дати}

Size : Longint; {розмір}

Name : Array[0..$C] of Char; {ім'я файлу із розширенням}

end;

PDTA = ^DTA; {вказівник на буфер DTA}

{------GetDTAAddress повертає адресу буфера DTA}

Function GetDTAAddress : PDTA; assembler;

asm

mov ah, 2Fh {в ah номер функції пошуку DTA}

int 21h {отримання в as:bx адреси DTA }

push es {в dx через стек передаються дані із es}

pop dx

mov ax, bx {передача в ax даних із bx}

{в dx:ax повертається результат}

end;

Var

DTAAddress : PDTA;

s : string;

Path : PChar;

i : byte;

Label 1;

{------Процедура виводу даних о файлі/директорії згідно із інформацією в DTA}

Procedure ShowEntry;

Begin

Write(DTAAddress^.Name:13,' '); {вивід імені файлу із розширенням}

for i: = 0 to 5 do

if (DTAAddress^.Attrib and (1 shl i)) <>0

then write(' * ') {вивід зірочок навпроти файлів }

else write(' '); {із відповідними атрибутами}

{------Вивід часу створення файлу}

Write(' ',((DTAAddress^.Time and $0f800)shr 11):2);

Write(':',((DTAAddress^.Time and $07e0)shr 5):2,':');

Write(((DTAAddress^.Time and $1f)shl 1):2);

{------Вивід дати створення файлу}

Write(' ',(DTAAddress^.Date and $1f):2,'/');

Write(((DTAAddress^.Date and $01e0)shr 5):2,'/');

Write((((DTAAddress^.Date and $0f800)shr 9)+$07bc):4);

Writeln(' ',DTAAddress^.Size:7); {вивід розміру файлу}

end;

BEGIN

ClrScr; {очистка екрану}

{------Вивід інформації о програмі}

Writeln('The DIRWUER wersion 1.0');

Writeln('Romanov Alexander Urievich. KIT-13A KHPI');

Writeln('Copyright (C) 2005 by Romanov Alexander');

DTAAddress := GetDTAAddress; {встановлення вказівника}

{на адресу DTA}

1:

Write('Input the mask (default: *.*; exit: q): '); {запит на введення маски}

Readln(s); {отримання відповіді}

if s='' then Path:='*.*' {якщо відповіді не має,}

{встановлення стандартної маски}

else if s='q' then halt {якщо відповідь 'q', завершення}

{роботи програми}

else Path:=Addr(s[1]); {встановлення заданої маски}

if FindFirst (Path) then {знаходження першого файлу}

begin

Write('Filename OnR Skr Sys Tom ');

Writeln('Kat Arh Time DataSize'); {вивід заголовка таблиці}

ShowEntry; {вивід на екран даних про файл}

while FindNext do ShowEntry; {доки знайдено наступний файл,}

{виводити дані про нього на екран}

end

else writeln('Failed');{інакше, при незнаходженні}

{жодного файлу, виводиться}

{повідомлення про їх відсутність}

goto 1; {перехід на початок}

END.

Схема алгоритму програми приведена в додатках (Додаток Б).

Програма реалізує запит на введення маски файлу і, згідно із реакцією користувача, встановлює стандартну маску, або введену користувачем. При відповіді q - програма завершується.

Після задання маски встановлюється вказівник на DTA-буфер, після чого програма реалізує пошук файлів, що відповідають масці і вивід даних на екран. Потім програма повертається до початкового кроку запиту нової маски файлів для наступних дій.

Результати роботи програми проілюструємо наступним чином:

The DIRWUER wersion 1.0

Romanov Alexander Urievich. KIT-13A KHPI

Copyright (C) 2005 by Romanov Alexander

Input the mask (default: *.*; exit: q):

Filename OnR Skr Sys Tom Kat Arh Time Data Razmer

. * 11:59:18 11/5 /2005 00

.. * 11:59:18 11/5 /2005 00

BLW32.DLL * 12:12:0 14/5 /1996 52020

DEBUG.EXE * * 22:22:0 5 /5 /1999 0518A

USA.BLL * 12:12:0 14/5 /1996 18DCD

MYREP.CBA * 18:48:42 25/1 /2002 01F

DIRECT * 12:27:54 11/5 /2005 00

CATALOG3.CAB * * 22:22:0 5 /5 /1999 425C3

SUHELPER.BIN * * 22:22:0 5 /5 /1999 05C0

SAVE32.COM * * 22:22:0 5 /5 /1999 0398

ASD.LOG * * 13:8 :20 11/8 /2004 0162

IO.SYS * * * 22:22:0 5 /5 /1999 364B6

MSDOS.SYS * * * * 18:30:28 16/7 /2004 0697

08-APRIL.MP3 * 11:42:44 7 /12/2003 B11100

DR.EXE * 12:14:28 11/5 /2005 05A1

DR.BAT * 12:54:34 4 /5 /2005 09B

DIRWUER.EXE * 13:48:38 13/ 5/2005 6256

Input the mask (default: *.*; exit: q): *.b??

Filename OnR Skr Sys Tom Kat Arh Time Data Razmer

USA.BLL * 12:12: 0 14/ 5/1996 101837

SUHELPER.BIN * * 22:22: 0 5/ 5/1999 1472

DR.BAT * 12:54:34 4/ 5/2005 155

Input the mask (default: *.*; exit: q): direct/*.*

Filename OnR Skr Sys Tom Kat Arh Time Data Razmer

. * 12:27:54 11/ 5/2005 0

.. * 12:27:54 11/ 5/2005 0

BINASC.ASM * 11: 3:40 8/ 5/2005 768

PARAMS.ASM * 13:31:20 6/ 5/2005 1252

TD.EXE * 14:39:40 24/12/2002 492784

Input the mask (default: *.*; exit: q): q

Аналізуючи отримані результати, зазначимо, що за умовчанням (перший приклад) програма DIRWUER.exe виводить увесь вміст директорії, в якій вона розташована. Інші приклади демонструють різноманітні засоби задання масок файлів із використанням символів "*" і "?", а також задання шляху до директорії, вміст якої необхідно вивести. Відповідь "q" завершує програму.

Таким чином DIRWUER.exe є повноцінною програмою, яка реалізує вивід інформації о файлах, що відповідають заданій масці. Відмінність програми DIRWUER.exe від DR.exe полягає в покращеному інтерфейсі і більш ефективній роботі із буфером DTA, що стало можливим при використанні мови високого рівня Pascal, як оболонки при написанні програми.

Висновки

За результатами дослідження виводу вмісту каталогу у середовищі MS DOS було проаналізовано деякі аспекти його роботи із файлами і консоллю і створено дві повноцінні програми мовами асемблер і Pascal, які дозволяють реалізувати перегляд дерева каталогів і отримувати всю інформацію про файли, що в них містяться.

Слід зазначити, що у тому разі, коли програма, написана мовою асемблер, має розмір лише 1441 байт, то програма, створена за допомогою мови Pascal, займає вже 6256 байт, тобто більше, ніж у чотири рази. Однак витрати на написання цих програм співвідносяться приблизно у тій же пропорції, але в інший бік, оскільки ті задачі, які мовою Pascal були вирішені вбудованими методами, мовою асемблер треба було виконувати власноруч.

Таким чином, мета даного курсового проекту вважається виконаною: було досліджено особливості програмування мовами різного рівня, а також на конкретному прикладі виводу вмісту каталогу у середовищі MS DOS продемонстровані переваги та недоліки, котрі при цьому виникають.

Список використаних джерел

1. Методические указания к лабораторным работам № 10-№ 18 по курсу "Архитектура вычислительных систем" / Составит. А.И. Поворознюк, И.С. Зыков. - Харьков: ХПИ. - 88 с.

2. Поворознюк А.И. Архитектура компьютеров. Архитектура микропроцессорного ядра и системных устройств: Учеб. пособие. Ч.2. - Харьков: Торнадо, 2004. - 355 с.

3. Пустоваров В.И. Язык Ассемблера в программировании информационных и управляющих систем. - М.: ЭНТРОП, 1997. - 304 с.

4. Сван Т. Освоение Turbo Assembler. - К.: Диалектика, 1996. - 544 с.

5. Белецкий Я. Турбо Ассемблер: Версия 2.0: Учеб. пособие для студентов вузов / Пер. с польск. В.В. Яценко. М.: Машиностроение, 1994. - 160 с.

6. Rollins D. TECH Help. Электронный справочник. Версия 1.2. / Адапт. С.М. Абель. - Flambeaux Software. -© 1985-1987.

7. Norton P. Peter Norton's DOS Guide. - New Delhi: Prentice Hall of India Private Limited, 1996. - 744 p.

Додатки

Додаток А

Схема алгоритму DR.asm

Додаток Б

Схема алгоритму DIRWUER.pas

Схема алгоритму DIRWUER.pas (продовження)

Страницы: 1, 2, 3, 4, 5, 6, 7



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.