ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Приклад розбиття програми на зовнішні процедури

Нижче наведено код програми на Асемблері для обчислення суми елементів вектора.

NAME PROG

SSTACK SEGMENT

DB 128 DUP (?)

SSTACK ENDS

DATA SEGMENT

MAS DW 1,3,1,2,1

N DW 5

Y DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:SSTACK

START PROC FAR

PUSH

SUB AX, AX

PUSH AX

MOV AX, DATA

MOV DS, AX

CALL MAIN

CALL OUTPUT

RET

START ENDP

MAIN PROC

SUB AX, AX

MOV CX, 5

LEA SI, MAS

MET: ADD AX, [SI]

ADD SI, 2

LOOP MET

MOV Y,AX

RET

MAIN ENDP

OUTPUT PROC

MOV AX, Y

ADD AL, 48

MOV DL, AL

MOV AH, 06h

INT 21h

RET

OUTPUT ENDP

CODE ENDS

END START

Розіб’ємо цю програму на три процедури: головну процедуру START, процедуру MAIN - для визначення суми, процедуру OUTPUT - для виведення результату обчислень. В процедурі START будуть визначатися всі змінні і здійснюватись виклики решти процедур. Процедура MAIN отримує від процедури START початкові дані для обчислень і повертає їй результат обчислень. Процедура OUTPUT отримує від процедури START значення результату для виведення його на екран дисплея.

З урахуванням вказаних вище умов головна процедура буде мати такий вигляд:

NAME PROG1

EXTRN MAIN:NEAR, OUTPUT:NEAR

PUBLIC MAS, N, Y

SSTACK SEGMENT

DB 128 DUP (?)

SSTACK ENDS

DATA SEGMENT

MAS DW 1,3,1,2,1

N DW 5

Y DW ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS:SSTACK

START PROC FAR

PUSH

SUB AX, AX

PUSH AX

MOV AX, DATA

MOV DS, AX

CALL MAIN

CALL OUTPUT

RET

START ENDP

CODE ENDS

END START

Зовнішня процедура MAIN матиме вигляд:

NAME PROG2

EXTRN MAS:WORD, N:WORD, Y:WORD

PUBLIC MAIN

SSTACK SEGMENT

DB 128 DUP (?)

SSTACK ENDS

CODE SEGMENT PUBLIC

ASSUME CS:CODE, SS:SSTACK

MAIN PROC NEAR

SUB AX, AX

MOV CX, 5

LEA SI, MAS

MET: ADD AX, [SI]

ADD SI, 2

LOOP MET

MOV Y,AX

RET

MAIN ENDP

CODE ENDS

END

Зовнішня процедура OUTPUT буде такою:

NAME PROG3

EXTRN Y:WORD

PUBLIC OUTPUT

SSTACK SEGMENT

DB 128 DUP (?)

SSTACK ENDS

CODE SEGMENT PUBLIC

ASSUME CS:CODE, SS:SSTACK

OUTPUT PROC

MOV AX, Y

ADD AL, 48

MOV DL, AL

MOV AH, 06h

INT 21h

RET

OUTPUT ENDP

CODE ENDS

END

 

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

 

1. Вивчити теоретичну частину лабораторної роботи.

2. Для заданого приклада розбити вхідну програму на зовнішні процедури і виконати трансляцію окремо для кожної процедури.

3. За допомогою компонувача TLINK створити єдиний завантажувальний модуль. Дослідити різні рівні роботи компонувача.

4. Сформувати розширену карту завантаження і здійснити її аналіз з урахуванням типів об’єднання і типів вирівнювання логічних сегментів.


Лабораторна робота № 8

Математичний співпроцесор

Тема: Знайомство з архітектурою математичного співпроцесора. Вив­чення форматів даних та системи команд для управління математичним співпроцесором. Програмування мовою Асемблер із використанням математичного співпроцесора.

 

Теоретичні відомості

 

2.8.1 Архітектура математичного співпроцесора

 

Математичний співпроцесор (МС) призначений для виконання операцій над числами з фіксованою та плаваючою комою. Завдяки математичному співпроцесору можна досягти високої точності і швидкодії при різноманітних математичних обчисленнях, при роботі з машинною графікою, при виконанні статистичних та інженерних роз­рахунків, при використанні засобів мультимедіа і т.д.

Математичний співпроцесор може працювати лише разом із головним процесором, оскільки в ньому відсутній механізм вибірки команд.

Перший математичний співпроцесор 8087 працював у перших моделях ІВМ РС. Згодом були розроблені математичні співпроцесори 80287 та 80387. У процесорах Intel 80486 та Pentium наявний вбудований співпроцесор, що є одним з модулів головного процесора, але з програмної точки зору вони залишились повністю сумісними з 80387.

В загальному випадку МС х87 можна розглядати як архітектурне розширення центрального процесора, тобто до загальних регістрів процесора додаються вісім 80-розрядних арифметичних регістри стека і блок регістрів стану та управління.

Блок регістрів стану та управління складається з таких 16-розрядних регістрів:

- слово стану SWR (Status Word Register);

- слово управління CWR (Control Word Register);

- ознаки;

- покажчик команд;

- покажчик даних.

Група арифметичних регістрів частіше використовується в режимі стеку, тобто операнди зчитуються у порядку, оберненому до порядку запису. Але підтримуються всі форми команд, що виконують запис і зчитування для конкретних регістрів.

З регістрами стеку пов’язаний 3-бітовий покажчик стеку ST, що визначає регістр, який в даний момент є вершиною стеку (рис.10). Нумерація регістрів завжди починається від вершини стеку.

 

ST     79 64 63 0        
  101 0 (порядок) (мантиса) ST(3)     TAG(3)
(покажчик стеку     ST(4)     TAG(4)
    ST(5)     TAG(5)
        ST(6)     TAG(6)
        ST(7)     TAG(7)
    5     ST(0)     TAG(0)
        ST(1)     TAG(1)
        ST(2)     TAG(2)

 

Рисунок 10 – Схема зв’язку покажчика стеку з регістрами співпроцесора

 

При завантаженні даних в арифметичний регістр вміст покажчика сте­ку попередньо зменшується на одиницю (ST ← ST-1) і вказує номер ре­гі­стра, в який здійснюється завантаження. При добуванні даних з регістру вміст покажчика стеку автоматично збільшується на одиницю (ST ← ST+1).

З кожним з арифметичних регістрів пов’язаний регістр тегів, в якому є 2-бітове поле, значення якого залежить від вмісту регістра ST(i) (рис.11).

Математичний співпроцесор має у своєму складі:

- блок обробки мантиси;

- блок обробки порядку;

- ПЗП констант, який зберігає 7 відомих констант: +0.0; +1.0; π; ln2; lg2; log210; log2e.

 

Код поля TAG(i) Вміст регістра ST(i)
Скінчене число, що не дорівнює 0
Нуль
NAN, ± ∞
Регістр пустий (позначається е)

 

Рисунок 11 – Значення полів тегів

 

 

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти