- •Лабораторна робота №1
- •Xor ax, ax
- •Int 21h
- •Зміст звіту
- •2 Короткі теоретичні відомості
- •2.1. Етапи розробки програм мовою асемблер
- •2.2 Формати команд мікропроцесора 8086
- •2.3 Елементи мови асемблера
- •2.4 Формат команд і псевдооператорів мови асемблера
- •2.5 Структура програми
- •2.6 Псевдооператори мови асемблера
- •2.6.1 Опис сегмента
- •2.6.2 Псевдооператори визначення ідентифікаторів
- •2.6.3 Директиви опису даних
- •2.6.4 Оператори
- •2.7 Лістинг програми
- •2.8 Програмні переривання
2.6.4 Оператори
Оператор одержання сегментної складової адреси Сегментна складова виразу, який може бути представлений міткою, змінною, ім'ям сегмента іншим символічним ім'ям, складається з адреси сегмента та адреси зсуву в сегменті. Для одержання адреси сегментної для виразу використовується оператор seg:
Seg вираз
Одержати значення зсуву для даного виразу від початку сегмента, у якому він знаходиться, дозволяє оператор offset:
offset вираз
Наприклад,
.data
d_w dw 5
.code
…......
mov ax, seg d_w
mov es, ax
mov dx, offset d_w ;тепер у парі es:dx повна адреса виразу d_w
Лічильник адреси При розробці програм дуже часто виникає потреба у визначенні величини зсуву поточної команди від початку сегмента. Цю задачу виконує лічильник адреси, який позначається знаком $. Транслятор асемблера замість операнда $ підставляє значення лічильника адреси, тобто зсув поточної машинної команди відносно початку сегмента коду.
В деяких випадках лічильник адреси обмежує послідовність даних. Так при виконанні 9-ї функції переривання 21h вивід рядка буде обмежено операндом лічильника адреси.
Розміщення рядків на екран монітору. Для керування розміщенням рядків при виводі на екран монітору можна використовувати службові (керуючі) ASCII-коди:
-
0Ah
LF
Переключення рядка (Line Feed)
0Dh
CR
Повернення каретки (Carriage Return)
При виконанні виводу строкових даних на екран монітору за допомогою переривання 21h ці коди будуть виконувати переміщення курсору на початок рядка або на новий. Відповідно строкові дані будуть формуватися в новій точці.
2.7 Лістинг програми
При розробці програми корисним може бути лістинг програми, який містить машинні коди та їх відносні адреса розміщення , а також коди написаної програми. Якщо в програмі будуть помилки то з’явиться повідомлення, яке містить номера рядків програми з помилкою та їх деталізацію. Але номера рядків у повідомленні не завжди відповідають дійсним номерам помилкових рядків у файлі. В цьому випадку локалізацію помилок краще проводити по лістингу програми.
Рядки файлу лістингу мають наступний формат:
номер_рядка – зміщення – машинний_код – початковий_код.
Тут:номер_рядка – номер рядка програми у файлі лістингу, який використовується для локалізації помилок і формування таблиці перехресних посилань;
зміщення показує у байтах розміщення поточної команди відносно початку сегмента коду і обчислюється транслятором;
машинний_код – машинне подання команди асемблера, розташованої в цьому ж рядку;
початковий_код – рядок коду команди нашої програми.
2.8 Програмні переривання
Програмні переривання виконуються за допомогою двобайтної команди INT type формує запит на переривання з номером вектора від 0 до 255. Переривання з номерами від INT 0h до INT 1Fh, відносяться до базової системи програм вводу/виводу (BIOS) і дозволяють одержувати доступ безпосередньо до всіх функцій системи вводу/виводу. Переривання DOS від INT 20h до INT 0FFh дозволяють звертатися до ПК, використовуючи можливості операційної системи. Кожне з переривань може містити безліч функцій. Для виконання програмного переривання потрібно задати допоміжні параметри. Програма виконання переривання має наступний алгоритм:
Обов'язково потрібно задавати № функції та визивати команду переривання. Інші дві дії необов'язкові і визначаються властивостями кожної з функцій.
Блок програми виводу рядка на екран монітору буде мати наступний вигляд:
a db 'Hello world1',10,13,’$’
……………..
mov ah, 09h
mov dx, offset a
int 21h
Інформацію про застосування переривань можна одержати в програмних пакетах NG, Tech60 та ін. Основні програмні переривання представлені в таблиці
№ переривання |
Опис |
Переривання BIOS | |
INT 00 |
Переповнення при розподілі |
INT 01 |
Покрокове переривання |
INT 02 |
Немаскуємі переривання |
INT 03 |
Переривання по точці зупинки |
INT 04 |
Переривання по переповненню |
INT 05 |
Друк екрана |
INT 08 |
IRQ0 Переривання від таймера |
INT 09 |
IRQ1 Переривання від клавіатури |
INT 0Bh |
IRQ3 Послідовний порт COM2 |
INT 0Ch |
IRQ4 Послідовний порт COM1 |
INT 0Dh |
IRQ5 Жорсткий диск (PC). Паралельний принтер LPT2 (AT) |
INT 0Eh |
IRQ6 Переривання від дискети |
INT 0Fh |
IRQ7 Паралельний принтер LPT1 |
INT 10h |
Відеосервіс |
INT 11h |
Список підключеного обладнання |
INT 12h |
Розмір фізичної пам'яті |
INT 13h |
Дискові операції низького рівня (драйвер) |
INT 14h |
Операції низького рівня для послідовного порту RS-232 (С2) |
INT 15h |
Розширений сервіс для системи вводу/виводу |
INT 16h |
Драйвер клавіатури |
INT 17h |
Драйвер принтера |
INT 18h |
Вмонтований інтерпретатор Бэйсика |
INT 19h |
Перезавантаження системи |
INT 1Ah |
Драйвер годинника “Реального часу” |
INT 1Bh |
Завершення роботи при натисканні Cntr-Break |
INT 1Ch |
Переривання від таймера |
INT 1Dh |
Таблиця параметрів відеоадаптера |
INT 1Eh |
Покажчик на таблицю параметрів дискети |
INT 1Fh |
Покажчик на таблицю графічних символів |
Переривання DOS | |
INT 20h |
Завершити виконання програми |
INT 21h |
Виклик функцій DOS |
INT 22h |
Адреса передачі керування по завершенню програми |
INT 23h |
Адреса передачі керування по натисканню клавіш Ctrl-Break |
INT 24h |
Обробка критичної помилки |
INT 25h |
Читання диска по абсолютній адресі |
INT 26h |
Запис на диск по абсолютній адресі |
INT 27h |
Завершити виконання програми, залишивши її резидентною |
INT 28h |
Квантування часу в DOS |
INT 2Eh |
Виконання команди DOS |
INT 2Fh |
Мультиплексне переривання |
INT 33h |
Драйвер "миші" |
INT 41h |
Блок параметрів жорсткого диска (накопичувач 0) |
INT 46h |
Блок параметрів 2-го жорсткого диска |
INT 4Ah |
Програма обробки сигналу від “будильника” |
INT 67h |
Інтерфейс із драйвером розширеної пам'яті (EMM) |
INT 70h |
Переривання від годинника реального часу з незалежним джерелом живлення |