Смекни!
smekni.com

Вивід вмісту каталогу y середовищі MS DOS (стр. 1 из 6)

зміст

вступ............................................................................................................. 3

1. Постановка задачі............................................................................ 4

2. Програмний інструментарій........................................................ 5

2.1. Вибір засобу виконання поставленої задачі........................................... 5

2.2. Функції переривання INT 21h MS DOS, що використані при роботі програм.......................................................................................................................... 5

2.2.1. Функції роботи із DTA.......................................................................... 5

2.2.2. Інші функції переривання INT 21h, що необхідні для використання у програмі, що розробляється............................................................................................ 7

3. Розробка задачі на мові асемблер.......................................... 10

3.1. Допоміжні процедури............................................................................ 10

3.1.1. Модуль PARAMS.asm........................................................................ 10

3.1.2. Модуль STRIO.asm............................................................................. 14

3.1.3. Модуль BINASC.asm.......................................................................... 17

3.2. Розробка основної програми DR.asm................................................... 20

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

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

Висновки.................................................................................................. 34

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

Додатки..................................................................................................... 36

вступ

Еволюція мов програмування нараховує вже не один десяток років. Пройдено великий етап від мов структурного програмування (таких як С) до систем багатомовного програмування, на роль яких претендують такі бренди як С#, Java, та ін. Однак слід зазначити, що незважаючи на постійне оновлення мов високого рівня щодо їх пристосування до зростаючих потреб програмістів, головна їх задача лишається тією ж самою – транслювати свої команди у машинний код. Тобто, не має ніякої різниці, якою мовою виконувати задачу – результат лишається той же; відмінність полягає лише у тому, як ця мова інтерпретує рішення програміста у мову машинних кодів. Тому відповідь на питання – чому мова асемблера, залишаючись практично незмінною у своїй ідеології і лексичній базі (цього не можна сказати, наприклад, про сімейство С), лишається й досі конкурентноспроможною іншим мовам – є цілком зрозумілою: вона, як мова програмування низького рівня, найближча до мови комп'ютера і, наразі, найбільш ефективна.

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

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

Наразі, друга частина цього проекту присвячена розробці програми, що виконує аналогічні задачі вже мовою Pascal, надаючи реалізацію основного алгоритму асемблерним вставкам, а елементів інтерфейсу – функціям Pascal.

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


1. Постановка задачі

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

Програма має бути виконана мовою асемблера, а також можливий варіант створення програми на мові високого рівня (наприклад Pascal, C та ін.) із використанням фрагментів асемблерного коду, що виконують основний алгоритм задачі.

Програми мають містити коментарі і схеми алгоритмів.


2. Програмний інструментарій

2.1. Вибір засобу виконання поставленої задачі

Існує два шляхи вирішення поставленої задачі. Розглянемо кожний з них окремо.

Перший засіб

Послідовне переміщення по дереву каталогу шляхом безпосереднього читання (за допомогою другої функції переривання INT 13h BIOS) секторів пам'яті, починаючи із ROOT, і пошуку необхідного підкаталогу згідно із вказаним шляхом до потрапляння у кінцевий каталог із виводом даних о всіх файлах і директоріях, що в ньому містяться [1, 2].

Однак даний метод надзвичайно складний, має прив'язку до певної системи FAT, організації BOOT і таблиці розділів, потребує прямого звертання до жорсткого диску, що не свідчить в його користь.

Другий засіб

Пов'язаний із специфікою роботи MS DOS. Коли програма починає виконуватись, регістри DS:0000 і ES:0000 вказують на початок PSP (Program Segment Prefix – префікс програмного сегмента) – об'єм пам'яті, в якому міститься інформація о розмірі доступної пам'яті, опції із рядка команд, імена файлів, оточення, а також DTA (розмір 43 байти) [4, 6].

DTA має наступну структуру:

- Резервна область.

- Атрибут.

- Час створення файлу.

- Розмір файлу.

- Ім'я із розширенням файлу.

Таким чином DTA дає повну і вичерпну інформацію о файлі. Тобто, читаючи послідовно DTA кожного файлу директорії, можна отримати інформацію по кожному файлу і вивести її на екран.

Пошук DTA файлів реалізується за допомогою спеціальних функцій переривання INT 21h MS DOS. Для виводу інформації на екран, і завершення програми, теж використовуються спеціальні функції переривання INT 21h.

2.2. Функції переривання INT 21h MS DOS, що використані при роботі програм

2.2.1. Функції роботи із DTA

Середовище MS DOS пропонує набір функцій переривання INT 21h, що дозволяють працювати із DTA – встановити його адресу (1Ah), дати поточний DTA (2Fh), заповнити DTA при знаходженні першого файлу (4Eh), заповнити DTA при знаходженні наступного файлу (4Fh). Розглянемо кожну з цих функцій окремо:

1Ah функція INT 21h [6]

Вхід: AH 1Ah

DS:DX адреса для DTA

Вихід: не має

Дана функція встановлює адресу для DTA. В регістрову пару DS:DX заноситься, відповідно, сегмент і зміщення буфера розміром >43 байтів, в який буде зберігатись DTA. Якщо адреса DTA змінюється вашою програмою, бажано зберегти попередню адресу DTA (за допомогою функції 2Fh INT 21h) і відновити її після завершення програми.

Приклад:

mov ah, 1Ah ; в ah номер функції

mov dx, offset buffer ; в dx поміщується зміщення буфера,

; сегмент лишається незмінний

int 21h

В даному прикладі перевизначається адреса для буфера DTA.

2Fh функція INT 21h [6]

Вхід: AH 2Fh

Вихід: ES:BS адреса початку поточної DTA.

Функція повертає адресу початку області вводу/виводу DTA. В AH заноситься номер функції; в регістровій парі ES:BS повертається адреса початку DTA.

Дана функція корисна при збереженні адреси DTA для її подальшого відновлення після зміни програмою. Слід бути обережним при її використанні, оскільки функція змінює регістр es.

Приклад:

push es ; збереження у стеку регістрів es, bx, що зміняться

push bx

mov ah, 2Fh ;в ах номер функції

int 21h

mov [DTAs], es ; збереження адреси DTA

mov [DTAo], bx

pop bx ; відновлення попередніх значень регістрів bx і es

pop es ; із стеку

В даному прикладі у змінних DTAs і DTAo зберігається адреса DTA, регістри bx, es незмінні.

4Eh функція INT 21h [6]

Вхід: AH 4Fh

DS:DX адреса ASCII рядка із маскою імені файлу

СХ атрибут файлу для порівняння

Вихід: АХ код помилки, якщо в CF=1 буфер DTA заповнений даними.

Дана функція знаходить ім'я першого файлу у переліку, що відповідає заданій масці і атрибуту, і поміщує інформацію про нього в буфер DTA. В AH поміщується номер функції; регістрова пара вказує на рядок, що задає маску імені файлу; в СХ міститься атрибут файлу.

В імені файлу і розширенні допускаються узагальнені символи "*" і "?".

Функція повертає код помилки в AX, якщо файл не знайдений, або заповнює буфер DTA даними про файл.

4Fh функція INT 21h [6]

Вхід: AH 4Fh

DS:DX адреса даних, повернутих попередньою 4Eh

функцією INT 21h

Вихід: AX код помилки, якщо CF=1

DTA заповнена даними

Дана функція викликається після функції 4Eh INT 21h і знаходить наступний файл, що відповідає параметрам пошуку, заданим при визові 4Eh INT 21h.

В AH заноситься номер функції, в регістрову пару DS:DX – адреса даних, повернутих попередньою функцією.

Функція повертає в AX код помилки, якщо вона не відбулась, або поміщує в буфер DTA дані про файл, що відповідає узагальненому імені і атрибуту.

Приклад:

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

mov dx, affset mask ; в dx зміщення маски

mov cx, 10h

int 21h

jc end

@@01:

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

int 21h

jnc @@01

end:

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

2.2.2. Інші функції переривання INT 21h, що необхідні для використання у програмі, що розробляється

2h функція INT 21h [6]

Вхід: AH 02h

DL код символу, що виводиться на вивід

Вихід: символ на екрані

В AH поміщується код функції, в DL код символу, що необхідно вивести на екран.

Слід відмітити, що при наявності в DL коду 8 (ASCII код Backspace) функція переміщує курсор вліво на одну позицію.

Для виконання переходу на новий рядок слід послідовно вивести символи із кодами 13 і 10 на екран [5].

Приклад:

mov ah, 2 ; номер функції

mov dl, 13 ; вертикальна табуляція

int 21h

mov dl, 10 ; зсув каретки

int 21h

Даний фрагмент коду переводить курсор на новий рядок.

40h функція INT 21h [6]

Вхід: AH 40h

BX описувач файлу

DS:DX адреса буфера, що містить дані, що записуються