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 адреса буфера, що містить дані, що записуються
CX число байт, що записуються
Вихід: AX код помилки, якщо CF=1
AL число реально зчитаних байт
Дана функція записує CX байт даних в файл, або пристрій, заданий описувачем в BX. В AH поміщується номер функції, BX містить описувач [6]:
0 Стандартний пристрій вводу (звичайна клавіатура)
1 Стандартний пристрій виводу (звичайний екран)
2 Стандартний пристрій помилок (CON-екран)
3 Стандартний пристрій AUX (COM 1)
4 Стандартний принтер (LPT1)
Регістрова пара DS:DX адресується на буфер. В CX міститься кількість записуваних байт.
Функція повертає в AX код помилки при умові, що CF встановився в 1, або кількість реально зчитаних байтів в AL.
Для нас дана функція цікава як інструмент для виводу даних на екран, тому в BX має бути занесено 1.
Приклад:
mov ah, 40h ; код функції
mov bx, 1 ; вивід на екран
mov dx, offset sstring ; в dx зміщення рядка виводу
mov cx, FFh ; в cx кількість символів, що виводяться
int 21h
Даний фрагмент коду виводить на екран рядок символів, що містяться в змінній sstring.
4Ch функція INT 21h [6]
Вхід: AH 4Ch
AL код виходу
Вихід: не має
Функція завершення програми (EXIT). Повертає управління від породженого процесу його батьківському процесу. Встановлює код виходу (його можна опитати функцією WAIT (4Dh)).
В AХ міститься номер функції, в AL – код виходу:
0 нормальне завершення
1 завершення через Ctrl-Break (INT 23h)
2 завершення по критичній помилці пристрою (INT 24h)
3 завершення через функцію KEEP (31h)
Приклад:
mov ax, 04ch ; в al – код виходу
int 21h ; в ah – номер функції
Даний фрагмент коду задає нормальне завершення роботи програми (повертається код виходу – 0).
3. Розробка задачі на мові асемблер
3.1. Допоміжні процедури
Очевидно, що основна програма потребує допоміжні процедури для отримання необхідних параметрів, які задає користувач в командному рядку при визові програми. Серед них: процедури вводу/виводу даних на консоль, обробки ASCII рядків, а також перетворення числових даних у ASCII формат для подальшого їх виведення на екран. Для цього були розроблені спеціальні модулі PARAMS.asm, STRIO.asm та BINASC.asm, які містять необхідні процедури. Розглянемо їх окремо.
... · пошуковий механізм, який користувачі використовують як інтерфейс для взаємодії з базою даних. Засоби пошуку типу агентів, павуків, кроулерів і роботів використовуються для збору інформації про документи, які знаходяться в мережі Інтернет. Це спеціальні програми, які займаються пошуком сторінок в мережі, збирають гіпертекстові посилання з цих сторінок і автоматично індексують інформацію, яку ...
... . Механізм переривань забезпечує ефективна взаємодія пристроїв уведення-висновку з мікропроцесором. Переривання цікавлять нас тому, що обробка переривань - це прерогатива програмування на мові асемблера. У високорівневих мовах відсутні засоби роботи з перериваннями на машинному рівні. Переривання звичайно викликаються зовнішніми пристроями. Переривання сигналізує мікропроцесору, щоб він призупинив ...
... ів» (Tools Palette), яка дозволяє (як у PageMaker) переключатися між виділеними рамками та редагувати їх вміст. При запуску програми ця панель не з’являється і її потрібно спеціально викликати із меню «Графика» (Graphics) — погодьтесь, це досить неочікуване місце для цієї команди. Програма підтримує тільки один рівень відкату, у той час як багато інших пакетів підтримують до ста таких рівнів. ...
... обміну даними з ПЭВМ у процесі виконання програми користувача; 11. Вкажіть типи буферних схем, використаних в УУМС-2. Їх призначення та особливості роботи. 12. Дайте визначення адресного простору мікропроцесорної системи та розпишіть його розподіл в УУМС-2. Адресний простір УУМС складається з областей, состав яких показаний у табл.2. Варто звернути увагу, що внутрішні адресні області ...
0 комментариев