Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Особливості написання та створення модуля типу 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. 1. Визначити дані: А1®10; a2®15; b1®40; b2®25; c1®5; c2®6. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а1-a2; BX®b1*b2; CX®c1+c2; DX®
2. 1. Визначити дані: а1®15H; a2®20H; b1®4H; b2®88H; c1®5H; c2®6H. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а1+a2; BX®b2/b1; CX®c1+c2; DX® .
3. 1. Визначити дані: а(1)®1; a(2)®2; a(3)®3; a(4)®5; c1®7; c2®6. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а(1)+a(2))*(а(1)+a(2)); BX®а(4)-a(2); CX®c1+c2; DX® .
4. 1. Визначити дані: а(1)®8; a(2)®5; a(3) ®3; c1®20; c2®6. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а(1)+a(2)-а(3); BX®а(1)*a(2); CX®c1-c2; DX® .
5. 1. Визначити дані: А(1)®11; a(2)®7; a(3)®9; c1®25; c2®16. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а1+a2-а3; BX®а1*a2; CX®c1+c2; DX® .
6. 1. Визначити дані: а(1)®12; a(2)®6; a(3) ®17; c1®23; c2®16. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а(1)+а(3)-a(2); BX®а(1)/a(2); CX ® c1+c2; DX® .
7. 1. Визначити дані: а(1)®16H; a(2)®8H; a(3)®27H; c1®2FH; c2®1AH. 2. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а(3)-а(1))*a2; BX®а(1)+a(2); CX®c1-c2; DX® .
8. 1. Визначити дані: а(1)®12; a(2)®17; a(3)®19; c1®15; c2®26. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а(2)-a(1))*а(3); BX®а(1)+a(2); CX®c1+c2; DX® .
9. Визначити дані: а1®17H; a2®25H; b1®21H; b2®3H; c1®28H; c2®42H. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а1-a2; BX®b1*b2; CX®c2-c1 DX® .
10. Визначити дані: а(1)®21; a(2)®8; a(3)®27; c1®25; c2®18. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а(1)+а(2)-a(3); BX®(а(3)-а(1))*a(2); CX®c1+c2; DX® .
11. Визначити дані: а(1)®29; a(2)®14; a(3)®5; c1®35; c2®28. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а(1)-a(2))*а3; BX®а(1)+a(3); CX®c1+c2; DX® .
12. Визначити дані: а1®18; a2®23; b1®35; b2®5; c1®28; c2®15. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а2+a1)-b2; BX®b1/b2; CX®c1+c2; DX® .
13. Визначити дані: а(1)®26H; a(2)®A8H; a(3)®E7H; c1®2EH; c2®7BH Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а(3)-а(1)-a(2); BX®а(2)-a(1); CX®c1+c2 DX® .
14. Визначити дані: а1®27H; a2®53H; b1®5АH; b2®Е4H; c1®2DH; c2®3EH Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а2-a1; BX®b2-b1; CX®c2-c1 DX® .
15. Визначити дані: а(1)®9H; a(2)®14H; a(3)®DH; c1®FH; c2®BH. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а(1)+a(2))*а3; BX®а(1)+a(3);CX®c1+c2; DX®.
16. Визначити дані: а1®12; a2®28; b1®31; b2®36; c1®20;c2®18. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а2+a1)-b2; BX®b1+b2; CX®c1+c2; DX® .
17. Визначити дані: а(1)®25; a(2)®6; a(3)®29; c1®20; c2®18. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а(1)+а(3)-a(2); BX®а(3)-а(1)+a(2); CX®c1+c2; DX®.
18. Визначити дані: а(1)®23H; a(2)®AEH; a(3)®EAH; c1®2ВH; c2®5DH. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а(3)+а(1)-a(2); BX®а(2)+a(1); CX®c2-c1; DX®.
19. Визначити дані: а1®18; a2®23; b1®35; b2®5; c1®28; c2®15. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а2+a1)*b2; BX®b1+b2; CX®c1+c2 DX® .
20. Визначити дані: а1®17H; a2®25H; b1®35H; b2®34H; c1®28H; c2®32H. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®а1-a2; BX®b2-b1; CX®c1+c2; DX® .
21. Визначити дані: а(1) ®11; a(2) ®7; a(3) ®9; c1®25; c2®16. Занести в регістри AX,BX,CX та DX процесора такі величини: AX ® а1+a2-а3; BX ® а1×a2; CX ® c1+c2 DX ®.
22. Визначити дані: а(1) ®12; a(2) ®6; a(3) ®17; c1®23; c2®16. Занести в регістри AX,BX,CX та DX процесора такі величини: AX ® а(1)+а(3)-a(2); BX ® а(1)×a(2); CX ® c1+c2; DX ®.
23. Визначити дані: а(1) ®28; a(2) ®18; a(3) ®5; c1®35; c2®28. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а(1)-a(2))×а3;BX®а(2)-a(3);CX ® c1+c2;DX ®
24. Визначити дані: а(1) ®1Аh; a(2) ®1Еh; a(3) ®4h; c1®Еh; c2®Bh. Занести в регістри AX,BX,CX та DX процесора такі величини: AX®(а(1)+a(3))×а2; BX®а(2)-a(1); CX®c1+c2; DX®
25. Визначити дані: а(1) ®1Аh; a(2) ®1Еh; a(3) ®4h; c1®Еh; c2®Bh. Занести в регістри AX,BX,CX та DX процесора такі величини: AX ® (а(1)+a(3))×а2; BX ® а(2)-a(1); CX ® c1+c2; DX ®
26. Визначити дані: а(1) ®25; a(2) ®13; a(3) ®5; c1®31; c2®26. Занести в регістри AX, BX, CX та DX процесора такі величини: AX ® (а(1)-a(2))×а3; BX ® а(2)+a(3); CX ® c1-c2; DX ® .
27. Визначити дані: а1®72h; a2®35h; b1®А5h; b2®4Еh; c1®2Аh; c2®3Eh. Занести в регістри AX, BX, CX та DX процесора такі величини: AX ® а1-a2; BX ® b1+b2; CX ® c2-c1; DX® .
28. Визначити дані: а(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® .
29. Визначити дані: а(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® .
30. Визначити дані: а(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® .

 

Порядок виконання роботи

Проаналізувати індивідуальне завдання та написати програму на мові асемблера. З’ясувати, як будуть змінюватися дані в усіх регістрах процесора при виконанні кожної з команд програми.

Сформувати виконуваний модуль за допомогою програми TASM.

Запустити програму на обробку. Переконайтеся у тому, що її коректно виконується (комп’ютер не «підвисає»).

Завантажити програму до відладчика AFDабо TASMта крок за кроком виконати усі її команди. Після виконання кожної з команд проаналізувати стан кожного з регістрів процесору.

Зміст звіту

1. Роздрукована програму на мові асемблера.

2. Таблиця результатів з трьох колонок. У першу занести початковий код асемблерної програми, в другу - її машинний код, в третю - стан усіх регістрів процесору після її виконання.

3. Чисельне значення усіх комірок пам’яті, у яких розташована програма. З’ясувати, чому до них були завантажені саме такі числа.

4. Висновки за роботою.

5. Контрольні питання

1. Які Ви знаєте арифметичні команди мови асемблер? Як вони записуються? Які мають операнди? Який результат їх виконання?

2. Які Ви знаєте логічні команди мови асемблер? Як вони записуються? Які мають операнди? Який результат їх виконання?

3. Які Ви знаєте команди зсуву бітів числа у мові асемблер? Як вони записуються? Які мають операнди? Який результат їх виконання?

4. Стекова організація пам’яті, її особливості. Які Ви знаєте команди мови асемблера для роботи зі стеком?

5. Команди виклика процедури та повернення з неї.

6. Особливості написання com та exe виконуємих модулей мовою асемблера.

7. Виконати завдання для перевірки 1-12.


 



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 251; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.52.243 (0.007 с.)