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

mov bx, offset Action ; поміщення в bx адреси процедури Action

call DirEngine ; виклик процедури DirEngine розгляду

; каталогу

; ------Завершення роботи

Exit:

call NewLine ; перехід на новий рядок

mov ah, 04Ch ; в ah номер функції виходу із програми

mov al, [exCode] ; в al код виходу

int 21h ; виклик DOS, завершення програми

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

; DirEngine перегляд каталогу

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

; Вхід cx:bx адреса підпрограми Action

; ds:di адреса ASCII-рядка для пошуку (маска)

; Вихід викликає процедуру Action при кожному знаходженні

; файла, що відповідає масці

Регістри ax, cx, dl, di

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

PROC DirEngine

; ------Виведення заголовку таблиці

push di ; збереження di у стеку

mov di,offset tabl ; в di зміщення рядка заголовка таблиці

; ASCII

call StrWrite ; вивід на екран заголовка таблиці

call NewLine

pop di ; відновлення di

; ------Отримання поточного DTA

push es ; збереження змінюваних регістрів

push bx

mov ah, 2Fh ; в ah номер функції DOS отримання DTA

int 21h ; отримати поточний DTA

mov [DTAseg], es ; збереження адреси сегмента DTA

mov [DTAofs], bx ; збереження адреси зміщення DTA

pop bx ; відновлення регістрів

pop es

; ------Встановлення нового DTA в глобальному 43-байтовому буфері dirData

mov dx, offset dirData ; адреса змінної dirData поміщується

; в ds:dx

mov ah, 1Ah ; а ah номер функції DOS встановлення

; DTA

int 21h ; встановлення нового DTA

; ------Перевірка каталогу на співпадіння імен файлів із маскою в ds:dx

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

; пошуку

mov cx, 10h ; атрибут файлів і директорій

mov dx, di ; поміщення адреси рядка в ds:dx

jmp short @@20 ; пропуск наступної дії

@@10:

mov ah, 4Fh ; в ah номер функції DOS продовження

; пошуку

@@20:

int 21h ; пошук першого/наступного входження

jc @@99 ; вихід при помилці, або закінченні

call bx ; виклик процедури Action

jmp @@10 ; повтор дій

@@99:

; ------Відновлення початкової адреси DTA

push ds ; збереження ds у стеку

mov ds, [DTAseg] ; встановлення старої адреси DTA в ds:dx

mov dx, [DTAofs]

mov ah, 1Ah ; в ah номер функції DOS встановлення

; DTA

int 21h ; повернення до старої DTA

pop ds ; відновлення ds

ret ; завершення процедури

ENDP DirEngine

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

; Action виводить дані про файл із буфера dirData

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

; Вхід dirData DTA файла

; Вихід виводить дані про файл (назву, атрибути, дату/час створення,

; розмір)

; Регістри ax, dl, di, cx

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

PROC Action

push bx ; збереження регістрів

; ------Вивід імені файлу

mov di, offset dirData + FileName ; в di зміщення початку імені файлу

call StrWrite ; вивід імені на екран

call StrLength ; отримання в cx довжини імені

sub cx, 15 ; виявлення на скільки довжина імені

neg cx ; файлу менше поля із 15 символів

mov dl, ' ' ; в dl символ пробілу

call WriteSimv ; вивести на екран необхідну, для

; доповнення поля із 15 символів,

; кількість разів

; ------Вивід атрибутів файлу

mov al,[offset dirData + FileName -9]; в al поміщується байт атрибуту

mov cx,6 ; в cx кількість значущих бітів у байті

; атрибуту

@@01:

shr al,1 ; зсув al вправо,

; в CF поміщується молодший біт

jb @@02 ; якщо CF=1, то перехід

mov dl, ' ' ; в dl поміщується пробіл (символ виводу)

push cx ; збереження cx в стеку

mov cx,4 ; поміщення в cx кількості символів для

; виводу (4)

call WriteSimv ; вивід 4-х пробілів

pop cx ; відновлення cx

jmp @@03 ; перехід

@@02:

mov di,offset point ; в di поміщується зміщення змінної point

push cx ; збереження cx

call StrWrite ; вивід на екран зірочки

pop cx ; відновлення cx

@@03:

loop @@01 ; виконувати цикл, доки cx?0 (6-ть разів)

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

mov bx,[offset dirData + FileName-8] ; в bx поміщується слово часу

; створення файлу

mov ax,bx ; в ax поміщуються слово години

; створення файлу

and ax,0f800h ; накладання маски

shr ax,11 ; зсув результату (отримали години)

mov cx,1

mov di,offset buffer ; di вказує на пустий буфер buffer

call BinToAscDec ; передача в змінну buffer 10-кового

; ASCII-представлення числа з ax

mov cx,2 ; в cx ширина поля виводу

call StrWrite2 ; вивід ASCII-представлення числа з ax

mov cx,1 ; встановлення в cx кількості виводів

mov dl, ':' ; передача в dl символу, що виводиться

call WriteSimv ; вивід один раз символу із dl

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

mov ax,bx ; в ax поміщується слово хвилини

; створення файлу

and ax,7e0h ; накладання маски

shr ax,5 ; зсув результату (отримали хвилини)

mov cx,1

mov di,offset buffer ; di вказує на пустий буфер buffer

call BinToAscDec ; передача в змінну buffer 10-кового

; ASCII-представлення числа з ax

mov cx,2 ; в cx ширина поля виводу

call StrWrite2 ; вивід ASCII-представлення числа з ax

mov cx,1 ; встановлення в cx кількості виводів

mov dl, ':' ; передача в dl символу, що виводиться

call WriteSimv ; вивід один раз символу із dl

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

mov ax,bx ; в ax поміщується слово секунди

; створення файлу

and ax,1fh ; накладання маски

shl ax,1 ; помноження на 2 (отримання секунд із

; двохсекундних одиниць)

mov cx,1

mov di,offset buffer ; di вказує на пустий буфер buffer

call BinToAscDec ; передача в змінну buffer 10-кового

; ASCII-представлення числа з ax

mov cx,3 ; в cx ширина поля виводу

call StrWrite2 ; вивід ASCII представлення числа з ax

mov cx,1 ; встановлення в cx кількості виводів

mov dl, ' ' ; передача в dl символу, що виводиться

call WriteSimv ; вивід один раз символу із dl

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

mov bx,[offset dirData + FileName-6] ; в bx слово дати створення

; файлу

mov ax,bx ; в ax слово дня створення файлу

and ax,01fh ; накладання маски

mov cx,1 ; встановлення мінімальної довжини

; перетворюваного рядка

mov di,offset buffer ; в di зміщення пустого буферу

call BinToAscDec ; заповнення буферу buffer 10-ковим

; ASCII-представленням числа з ax

mov cx,2 ; в cx ширина поля виводу

call StrWrite2 ; вивід ASCII представлення номера дня

mov cx,1 ; в cx кількість виводів

mov dl, '\' ; в dl символ для виводу

call WriteSimv ; вивід символу із dl задану кількість разів

; ------Вивід місяця створення файлу

mov ax,bx ; в ax слово місяця створення файлу

and ax,1e0h ; накладання маски

shr ax,5 ; зсув результату (отримання місяця)

mov cx,1 ; встановлення мінімальної довжини

; перетворюваного рядка

mov di,offset buffer ; в di зміщення пустого буферу

call BinToAscDec ; заповнення буферу buffer 10-ковим

; ASCII-представленням числа з ax

mov cx,2 ; в cx ширина поля виводу

call StrWrite2 ; вивід ASCII представлення номера дня

mov cx,1 ; в cx кількість виводів

mov dl, '\' ; в dl символ для виводу

call WriteSimv ; вивід символу із dl задану кількість разів

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

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



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