Смекни!
smekni.com

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

зміст

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

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

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

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

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

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

2.2.2. Інші функції переривання INT21h, що необхідні для використання у програмі, що розробляється............................................................................................ 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, та ін. Однак слід зазначити, що незважаючи на постійне оновлення мов високого рівня щодо їх пристосування до зростаючих потреб програмістів, головна їх задача лишається тією ж самою – транслювати свої команди у машинний код. Тобто, не має ніякої різниці, якою мовою виконувати задачу – результат лишається той же; відмінність полягає лише у тому, як ця мова інтерпретує рішення програміста у мову машинних кодів. Тому відповідь на питання – чому мова асемблера, залишаючись практично незмінною у своїй ідеології і лексичній базі (цього не можна сказати, наприклад, про сімейство С), лишається й досі конкурентноспроможною іншим мовам – є цілком зрозумілою: вона, як мова програмування низького рівня, найближча до мови комп'ютера і, наразі, найбільш ефективна.

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

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

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

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


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

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

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

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


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

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

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

Перший засіб

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

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

Другий засіб

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

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

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

- Атрибут.

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

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

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

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

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

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

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

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

1Ahфункція INT21h[6]

Вхід: AH1Ah

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

Вихід:не має

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

Приклад:

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

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

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

int21h

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

2Fhфункція INT21h[6]

Вхід: AH2Fh

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

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

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

Приклад:

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

pushbx

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

int21h

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

mov[DTAo], bx

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

popes ; із стеку

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

4Ehфункція INT21h[6]

Вхід: AH4Fh

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

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

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

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

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

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

4Fhфункція INT21h[6]

Вхід: AH4Fh

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

функцією INT21h

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

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

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

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

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

Приклад:

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

movdx, affsetmask ; в dxзміщення маски

mov cx, 10h

int 21h

jc end

@@01:

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

int21h

jnc@@01

end:

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

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

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

Вхід: AH02h

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

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

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

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

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

Приклад:

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

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

int 21h

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

int 21h

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

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

Вхід: AH 40h

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

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

CX число байт, що записуються

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

ALчисло реально зчитаних байт