Алгоритм реалізації та функціонування програми, яка імітує команду DOS dir. Засоби мови Assembler, що використовуються в програмі: команди, директиви, переривання. Функціонування програми; інтерфейс, який застосовується при спілкуванні з користувачем.
Аннотация к работе
Спочатку програма обробляє данні які були введені тобто параметри з якими була запущена програма до таких параметрів відносяться повний шлях до каталогу вміст якого нам потрібно вивести на екран та маску за якою відбуваються пошук файлів. Потім програма заповнює область DTA за введеними параметрами і розпочинає пошук каталогів та файлів, при цьому спочатку виводяться всі знайдені каталоги а потім вже файли. Крім того що програма виводить вміст каталогів на екран вона також виводить час створення каталогів і файлів. Всі обрахунки розміру файлу, час його створення та вивід самого файлу чи каталогу на екран виконують в окремих процедурах що робить програмний код більш легшим для розуміння. А тепер розглянемо те що робиться в середині програми при її запуску спочатку програма перевіряє наявність введених параметрі, якщо вони відсутні то на екран виводиться текст в якому чітко описано на прикладах як правильно вводити потрібні параметри і як саме користуватися програмою.Програму реалізовано на машино-орієнтованій мові програмування Assembler.;перевіряємо стрічку параметрів 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,"D" ; якщо введено /D je noparam cmp al,64h ; якщо введено /D(маленьке) je noparam jmp not_help help: mov ah,9 ; вивід підказки lea dx,HELPSTR int 21h ret; вихід в DOS not_help:; якщо маска введена mov ch,0 mov di,81h ; адреса першого символа параметра mov al," "; сканувати будемо до першого пробілу DIRE: pop ax mov al,0 ; додаємо символ NUL в кінець стрічки параметрів mov [di],al mov ah,9 ; функція виводу стрічки lea dx,STRINGU ; В DX - адреса стрічки int 21h ; виводимо стрічку "Vuvod tekyshego kataloga" 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 ; якщо каталогу немає шукаємо файли call WRTDIR; виводимо імя першого знайденого каталогу ;::::::::::::::::::::::::::::::::::::::: ;::: виводимо імя файлу на екран ::::::: ;::::::::::::::::::::::::::::::::::::::: WRTFILE proc near cmp ATTRF,10h ; перевіряємо атрибут: якщо це не файл то виходимо je exit2 lea si,NAMEF ; завантажуємо адресу стрічки в SI mov cx,1 loop1: cmp cx,13 ; перевіряєм, якщо CX=13, то вивід закінчено je exit2 ; вихід mov al,[si] ; заносимо в AL символ що потрібно вивести cmp al,65 ; порівнюємо його з "A" jl skip1 ; якщо менше,то не переводимо в нижній регістр cmp al,90 ; порівнюємо AL з "Z" jg skip1 ; якщо більше то не переводимо в нижній регістр add al,32 ; переводимо симвіл в нижній регістр skip1: mov dl,al mov ah,02 ; функція виводу символа на екран int 21h inc si ; збільшуємо адресу inc cx ; збільшуємо лічильник jmp loop1 ; переходимо на наступний симвіл exit2: call CLRNAME ; чистимо поле виводу mov ah,9 lea dx,spk int 21h call WRTTIME mov ah,9 lea dx,spk int 21h mov ax,word ptr SIZEF mov dx,word ptr SIZEF 2 call Decimal call crlf ret spk db "$" ;::::::::::::::::::::::::::::::::::::::: ;::: виводимо мітку активного диску :::: ;::::::::::::::::::::::::::::::::::::::: 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, т.е.
План
ЗМІСТ
Вступ
Опис алгоритму
Опис програми
Програмна реалізація та тестування
Висновки
Література
Додаток А Додаток Б
Вывод
Дана курсова робота реалізує програму, яка імітує команду DOS dir. Програму реалізовано на машино-орієнтованій мові програмування Assembler. Був розроблений алгоритм, який повністю імітує потрібну команду.
Для написання цієї програми потрібно було ознайомитися з великим обсягом матеріалу по можливостях даної мови програмування та роботи файлової системи компютера. Дана програма не є аналогом команди DOS dir вона відрізняється від неї меншою кількістю можливостей , але вона в деяких випадках може бути використана як заміна їй.
Список литературы
1. Зубков для DOS, Windows и Unix. - М.: ДМК Пресс, 2000. - 608 с.: ил. (Серия «Для программистов»).
2. Абель П. Язык Ассемблера для IBM PC и программирования / Пер. с англ. Ю.В. Сальникова. - М.: Высш. Шк., 1992. - 447 с.: ил.
3. Бек Л. Введение в системное программирование програма dosdir assembler інтерфейс