перейти к полному списку дипломных проектов
Ссылка на скачивания файла в формате .doc находится в конце странички
Attrib and (1 shl i)) <>0
then write(' * ') {вивід зірочок навпроти файлів }
else write(' '); {із відповідними атрибутами}
{------Вивід часу створення файлу}
Write(' ',((DTAAddress^
Вивід інформації про файл довіряється процедурі, яка обробляє поля вказівника на 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
.
скачать бесплатно РОЗРОБКА ЗАДАЧІ НА МОВІ АСЕМБЛЕР
Содержание дипломной работы
Пройдено великий етап від мов структурного програмування (таких як С) до систем багатомовного програмування, на роль яких претендують такі бренди як С, Java, та ін
В AH поміщується номер функції; регістрова пара вказує на рядок, що задає маску імені файлу; в СХ міститься атрибут файлу
Серед них: процедури вводу/виводу даних на консоль, обробки ASCII рядків, а також перетворення числових даних у ASCII формат для подальшого їх виведення на екран
asm, є зручними і простими інструментами виводу інформації на стандартний пристрій виводу і будуть використані в основній програмі
Основну роботу виконує функція DirEngine, в яку, за допомогою регістру bx, передається зміщення функції Action (для подальшого виклику її за зміщенням)
Після цього DirEngine повертає старий DTA і передає курування основній програмі, яка завершує роботу і повертає код виходу
exe повністю відповідає поставленому завданню про створення програми мовою асемблера, яка виводить вміст директорії, атрибути, розмір і час/дату створення файлів і папок, які в ній містяться
Attrib and (1 shl i)) <>0
then write(' * ') {вивід зірочок навпроти файлів }
else write(' '); {із відповідними атрибутами}
{------Вивід часу створення файлу}
Write(' ',((DTAAddress^
SYS * * * 22:22:0 5 /5 /1999 364B6
MSDOS
Інші приклади демонструють різноманітні засоби задання масок файлів із використанням символів "*" і "?", а також задання шляху до директорії, вміст якої необхідно вивести
Версия 1