- •Основи програмування на мові асемблер та знайомство з програмним забезпеченням для виконання лабораторних робіт
- •Теоретичні відомості
- •1.1 Особливості архітектури мікропроцесора типу Intel 80х86
- •Головні регістри мп Intel 8086 та їх призначення
- •1.2 Організація обчислень та узагальнена архітектура комп’ютера ibm pc
- •1.3 Основи програмування на мові асемблер та її синтаксис. Позначки, коди команд, операнди та директиви
- •1.4. Перетворення програми з тексту на мові асемблера у виконуваний модуль
- •1.5. Основи роботи з програмою afd
- •1.6. Основи роботи з програмою td
- •2. Порядок виконання роботи
- •4. Контрольні питання:
- •Сегментація програми. Сегменти коду, даних та стеку. Їх розташування в пам’яті еом. Директиви мови асемблера segment та ends.
- •Арифметичні та логічні операції мови асемблер
- •1. Теоретичні відомості
- •Директиви визначення даних
- •1.2. Команда перенесення даних
- •1.3. Арифметичні операції над двійковими числами
- •1.4. Команди логічних операцій
- •1.5. Команди зсуву бітів числа
- •1.6. Команди циклічного зсуву бітів числа
- •1.7. Структура асемблерних програм для com- та exe-модулів. Виклик процедур та стек
- •Таким чином, структура com-програми повинна бути такою:
- •2. Варіанти індивідуальні завдання для лабораторної роботи
- •3. Порядок виконання роботи
- •5. Контрольні питання
- •Структура програми на мові асемблер. Команди вітвлення та циклу
- •1. Теоретичні відомості
- •1.1 Механізми передачі керування та зміна послідовності виконання команд. Їх реалізація у мові асемблера. Типи адресації
- •1.2 Команда безумовного переходу jmp
- •1.3 Команда циклу loop
- •1.4 Команда порівняння cmp
- •1.5. Команди умовного переходу в мові асемблер
- •2. Варіанти індивідуальних завдань
- •3. Порядок виконання роботи
- •Виведення даних на монітор персонального комп’ютера
- •1. Теоретичні відомості
- •1.1. Представлення арифметичних та рядкових даних. Формати ascii та bcd. Команди корекції
- •1.2. Команди обробки рядкових даних мови асемблера
- •1.3. Переведення ascii-формату у двійковий формат та навпаки
- •Починаючи з молодшого байту обробляти число у лівому напрямку.
- •Вилучати трійки з шістнадцятирічних цифр кожного ascii-байту.
- •Множити отримані цифри на ваговий коефіцієнт кожного з розрядів та складати результати.
- •1.4. Введення та виведення даних в мові асемблера
- •1.5. Реалізація екранних операцій у мові програмування асемблер
- •2. Індивідуальні завдання для виконання лабораторної роботи №4
- •3. Порядок виконання роботи
- •5. Контрольні питання
- •Перелік рекомендованої літератури
- •Додаток 1 загальні вимоги до оформлення протоколів лабораторних робіт
- •Додаток 2 головні функції перериваннь bios та операційної системи ms-dos д2.1 переривання bios
- •Int 05h. Друк екрану.
- •Int 10h. Керування монітором (більш досконало функції переривання 10н описані у теоретичних відомостях до лабораторної роботи №4).
- •Int 11h. Запит списку приєднаного обладнання.
- •Д2.2 переривання ms-dos
- •Д2.3 головні функції перивання ms-dos int 21н
- •Додаток 3
Таким чином, структура com-програми повинна бути такою:
ORG 100H ; перехід на початок програми користувача
JMP START ; перехід на частину програми, яка виконується
A1 DB 25H ; область визначення даних
.....................................................................................................
START: MOV AX,A1 ; область команд програми
......................................................................................................
RET ; передача керування до MS-DOS
Особливості написання та створення модуля типу exe.
Обов’язкове визначення всіх трьох сегментів - коду, стеку та даних.
Обов’язкова ініциалізація сегментних регістрів через директиву ASSUME.
На початку exe-модуля, що завантажений до пам’яті, стоїть PSP, який їм використовується. Програма автоматичного завантаження MS-DOS використовує регістр DS для встановлення початкової адреси PSP. Тому у програмі користувача треба насамперед зберегти цю адресу, завантаживши її до стеку. Після закінчення програми це значення буде використане командою RET для повернення до MS-DOS.
Для операційної системи потрібно, щоб наступне значення стеку було нульовим. Для цього треба за допомогою команди SUB почистити регістр AX та завантажити до стеку нульове значення.
Програма завантаження встановлює вірні адреси сегментів коду та стеку. Але ж регістр сегменту даних DS використовується нею для інших цілей і має після її виконання невірне значення. Тому треба перезавантажити регістр DS за допомогою двох команд MOV.
exe-програма завжди повинна мати модульну структуру. Тому всі частини програми, включаючи головну, реалізуються як процедури.
Таким чином, структура коректно написаної exe-програми така:
STACKSG SEGMENT PARA STACK 'Stack'
DW 32 DUP(?); Визначення стеку
STACKSG ENDS
DATASG SEGMENT PARA 'Data'
......................................................
DATASG ENDS
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG
PUSH DS;
SUB AX,AX;
PUSH AX;
MOV AX,DATASG ;
MOV DS,AX;
....................................
RET
BEGIN ENDP
CODESG ENDS
END BEGIN
Для отримання exe-модуля потрібно спочатку у програмі tasm встановити опцію для компілювання об’єктного файлу та отримати його (він повинен мати розширення obj), а після цього перевести його до файлу типа exe за допомогою команди link. Формат команди:
link [ім’я об’єктного файлу]
2. Варіанти індивідуальні завдання для лабораторної роботи
Початкові дані для виконання роботи №2 наведені у таблицях 15 та 16. Номер варіанту визначається останніми двома цифрами залікової книжки студента.
Таблиця 15. Умовні позначення
Символ |
Що означає |
+ |
Арифметичне додавання. |
- |
Арифметичне віднімання. |
* |
Арифметичне множення. |
/ |
Арифметичне ділення. |
|
Занести число до регістру процесора або комірки пам’яті. |
a1, a2 ... |
Визначити константи a1та a2 як дві незалежні. |
A(1), a(2) |
Визначити константи a(1) та a(2) як елементи масиву а. |
a1&a2 |
Логічна операція AND над числами a1 та a2. |
a1| a2 |
Логічна операція OR над числами a1 та a2. |
|
Логічна операція NOT над числом a1. |
|
Логічна операція XOR над числом a1. |
|
Логічний зсув числа a1 праворуч на n позицій. |
|
Арифметичний зсув числа a1 праворуч на n позицій. |
|
Циклічний зсув числа a1 праворуч на n позицій. |
|
Циклічний зсув з переносом числа a1 праворуч на n позицій. |
|
Логічний зсув числа a1 ліворуч на n позицій. |
|
Арифметичний зсув числа a1 ліворуч на n позицій. |
|
Циклічний зсув числа a1 ліворуч на n позицій. |
|
Циклічний зсув з перенесенням числа a1 ліворуч на n позицій. |
Таблиця 16. Завдання для лабораторної роботи №2
№ варіанту |
Завдання |
|
|
1. Визначити дані: А110; a215; b140; b225; c15; c26. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа1-a2;
BXb1*b2;
CXc1+c2;
DX |
|
|
1. Визначити дані: а115H; a220H; b14H; b288H; c15H; c26H. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа1+a2;
BXb2/b1;
CXc1+c2;
DX |
|
|
1. Визначити дані: а(1)1; a(2)2; a(3)3; a(4)5; c17; c26. 2. Занести в регістри AX,BX,CX та DX процесора такі величини:
AX(а(1)+a(2))*(а(1)+a(2));
BXа(4)-a(2);
CXc1+c2;
DX |
|
|
1. Визначити дані: а(1)8; a(2)5; a(3) 3; c120; c26. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа(1)+a(2)-а(3);
BXа(1)*a(2);
CXc1-c2;
DX |
|
|
1. Визначити дані: А(1)11; a(2)7; a(3)9; c125; c216. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа1+a2-а3; BXа1*a2;
CXc1+c2;
DX |
|
|
1. Визначити дані: а(1)12; a(2)6; a(3) 17; c123; c216. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа(1)+а(3)-a(2);
BXа(1)/a(2); CX
c1+c2; DX |
|
|
1. Визначити дані: а(1)16H; a(2)8H; a(3)27H; c12FH; c21AH. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AX(а(3)-а(1))*a2; BXа(1)+a(2);
CXc1-c2;
DX |
|
|
1. Визначити дані: а(1)12; a(2)17; a(3)19; c115; c226. Занести в регістри AX,BX,CX та DX процесора такі величини: AX(а(2)-a(1))*а(3);
BXа(1)+a(2);
CXc1+c2;
DX |
|
|
Визначити дані: а117H; a225H; b121H; b23H; c128H; c242H. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа1-a2;
BXb1*b2;
CXc2-c1
DX |
|
|
Визначити дані: а(1)21; a(2)8; a(3)27; c125; c218. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа(1)+а(2)-a(3); BX(а(3)-а(1))*a(2); CXc1+c2;
DX |
|
|
Визначити дані: а(1)29; a(2)14; a(3)5; c135; c228. Занести в регістри AX,BX,CX та DX процесора такі величини: AX(а(1)-a(2))*а3;
BXа(1)+a(3);
CXc1+c2;
DX |
|
|
Визначити дані: а118; a223; b135; b25; c128; c215. Занести в регістри AX,BX,CX та DX процесора такі величини: AX(а2+a1)-b2;
BXb1/b2;
CXc1+c2;
DX |
|
|
Визначити дані: а(1)26H; a(2)A8H; a(3)E7H; c12EH; c27BH Занести в регістри AX,BX,CX та DX процесора такі величини: AXа(3)-а(1)-a(2);
BXа(2)-a(1);
CXc1+c2
DX |
|
|
Визначити дані: а127H; a253H; b15АH; b2Е4H; c12DH; c23EH Занести в регістри AX,BX,CX та DX процесора такі величини: AXа2-a1;
BXb2-b1;
CXc2-c1
DX |
|
|
Визначити дані: а(1)9H; a(2)14H; a(3)DH; c1FH; c2BH. Занести в регістри AX,BX,CX та DX процесора такі величини: AX(а(1)+a(2))*а3; BXа(1)+a(3);CXc1+c2; DX . |
|
|
Визначити дані: а112; a228; b131; b236; c120;c218. Занести в регістри AX,BX,CX та DX процесора такі величини: AX(а2+a1)-b2;
BXb1+b2;
CXc1+c2;
DX |
|
|
Визначити дані: а(1)25; a(2)6; a(3)29; c120; c218. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа(1)+а(3)-a(2); BXа(3)-а(1)+a(2); CXc1+c2; DX . |
|
|
Визначити дані: а(1)23H; a(2)AEH; a(3)EAH; c12ВH; c25DH. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа(3)+а(1)-a(2); BXа(2)+a(1); CXc2-c1; DX . |
|
|
Визначити дані: а118; a223; b135; b25; c128; c215. Занести в регістри AX,BX,CX та DX процесора такі величини: AX(а2+a1)*b2;
BXb1+b2;
CXc1+c2
DX |
|
|
Визначити дані: а117H; a225H; b135H; b234H; c128H; c232H. Занести в регістри AX,BX,CX та DX процесора такі величини: AXа1-a2;
BXb2-b1;
CXc1+c2;
DX |
|
|
Визначити дані: а(1) 11; a(2) 7; a(3) 9; c125; c216. Занести в регістри AX,BX,CX та DX процесора такі величини: AX а1+a2-а3; BX а1a2; CX c1+c2 DX . |
|
|
Визначити дані: а(1) 12; a(2) 6; a(3) 17; c123; c216. Занести в регістри AX,BX,CX та DX процесора такі величини: AX а(1)+а(3)-a(2); BX а(1)a(2); CX c1+c2; DX . |
|
|
Визначити дані: а(1) 28; a(2) 18; a(3) 5; c135; c228. Занести в регістри AX,BX,CX та DX процесора такі величини: AX(а(1)-a(2))а3;BXа(2)-a(3);CX c1+c2;DX |
|
|
Визначити дані: а(1) 1Аh; a(2) 1Еh; a(3) 4h; c1Еh; c2Bh. Занести в регістри AX,BX,CX та DX процесора такі величини: AX(а(1)+a(3))а2; BXа(2)-a(1); CXc1+c2; DX |
|
|
Визначити дані: а(1) 1Аh; a(2) 1Еh; a(3) 4h; c1Еh; c2Bh. Занести в регістри AX,BX,CX та DX процесора такі величини: AX
(а(1)+a(3))а2;
BX
а(2)-a(1); CX
c1+c2; DX
|
|
|
Визначити дані: а(1) 25; a(2) 13; a(3) 5; c131; c226. Занести в регістри AX, BX, CX та DX процесора такі величини: AX
(а(1)-a(2))а3;
BX
а(2)+a(3); CX
c1-c2; DX
|
|
|
Визначити дані: а172h; a235h; b1А5h; b24Еh; c12Аh; c23Eh. Занести в регістри AX, BX, CX та DX процесора такі величини: AX
а1-a2; BX
b1+b2; CX
c2-c1; DX |
|
|
Визначити дані: а(1) 28; a(2)=9; a(3)=31; c1=20; c2=18. Занести в регістри AX, BX, CX та DX процесора такі величини: AX
а(1)+а(2)-a(3); BX
а(3)-а(1)+a(2); CX
c1-c2; DX |
|
|
Визначити дані: а(1)=28h; a(2)=A5h; a(3)=E1h; c1=2Аh; c2=7Сh. Занести в регістри AX, BX, CX та DX процесора такі величини: AX
(а(3)-а(1))a(2); BX
а(1)+a(2); CX c2-c1; DX |
|
|
Визначити дані: а(1)=21; a(2)=5; a(3)=14; c1=25; c2=18. Занести в регістри AX, BX, CX та DX процесора такі величини: AX
а(1)+а(2)-a(3); BX
(а(1)-а(3))a(2);
CX
c1-c2 ; DX |
