Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM / asm_лр_ир_copy / О_ASM_ЛР1т.doc
Скачиваний:
8
Добавлен:
15.02.2015
Размер:
237.57 Кб
Скачать

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

Переривання від годинника реального часу з незалежним джерелом живлення

11

Соседние файлы в папке asm_лр_ир_copy