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


Приклади програм із використанням математичного співпроцесора.41

ЗМІСТ

 

Вступ.....................................................................................................................5

Лабораторна робота №5- Макрозасоби мови Асемблера……………..6

2.5.1 Призначення макрозасобів…………………………......................…......6

2.5.2 Макровизначення і макрокоманди….................................................…6

2.5.3 Приклад програми з використанням макровизначень............................7

2.5.4 Проблема міток у макровизначеннях……...............................................9

2.5.5 Циклічні макроси (директиви повторення).............................................9

2.5.6 Умовні макроси (умовні директиви)......................................................11

2.5.7 Використання макробібліотек................................................................12

2.5.8 Директиви управління лістингом програми ….............................….13

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

Лабораторна робота №6 -Транслятор з мови Асемблера.................…13

2.6.1 Призначення та основні функції транслятора з мови Асемблер........13

2.6.2 Види трансляторів з мови Асемблера ...................................................14

2.6.3 Запуск на виконання транслятора TASM...............................................14

2.6.4 Структура лістинга програми..................................................................16

2.6.5 Структура об’єктної програми………………........................................17

2.6.6 Приклад ручного асемблювання програми.........................................20

2.6.7 Таблиця символічних імен......................................................................21

2.6.8 Таблиці перехресних посилань...............................................................23

2.6.9 Об’єктні бібліотеки..................................................................................24

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

Лабораторна робота №7 – Компонувачі...............................................25

2.7.1 Призначення та основні функції компонувача (редактора зв’язків)...25

2.7.2 Типи компонувачів ..................................................................................26

2.7.3 Запуск компонувача на виконання.........................................................27

2.7.4 Карта завантаження..................................................................................28

2.7.5 Директиви зв’язку модулів та сегментів................................................29

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

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

Лабораторна робота №8 – Математичний співпроцесор.......................34

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

2.8.2 Формати даних співпроцесора 8087.......................................................36

2.8.3 Система команд співпроцесора 8087.....................................................38

Приклади програм із використанням математичного співпроцесора.41

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

Лабораторна робота №9 – Керування дисплеєм……...........................43

2.9.1 Технічні особливості дисплеїв................................................................43

2.9.2 Текстовий режим роботи дисплея………...……………………..…….44

2.9.3 Приклад програми прямого доступу до відеопам’яті.........................47

2.9.4 Графічний режим роботи дисплеїв.........................................................49

2.9.5 Керування дисплеєм за допомогою функцій BIOS...............................52

2.9.6 Основні функції BIOS для керування дисплеєм……………………...53

2.9.7 Приклади програми для виведення зображення в текстовому режимі з використанням функцій BIOS.......................................................................57

2.9.8 Приклади програми для виведення зображення в графічному режимі з використанням функцій BIOS.......................................................................59

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

Лабораторна робота №10 – Робота з файлами…................................61

2.10.1 Класи функцій для роботи з файлами..................................................61

2.10.2 Створення файлів...................................................................................62

2.10.3 Відкриття файла......................................................................................63

2.10.4 Закриття файла........................................................................................64

2.10.5 Читання даних із файла або пристрою..............................................64

2.10.6 Запис даних у файл або на пристрій.....................................................65

2.10.7 Вилучення файла....................................................................................65

2.10.8 Приклад програми роботи з файлом.....................................................66

2.10.9 Методи доступу до файлів.....................................................................67

2.10.10 Алгоритм запису даних у послідовний файл.....................................67

2.10.11 Алгоритм читання даних із послідовного файла……...…...……....68

2.10.12 Операції читання та запису даних у файлах прямого доступу........68

2.10.13 Приклад програми читання даних із послідовного файла………...68

2.10.14 Робота з атрибутами файлів................................................................70

2.10.15 Робота з дисками, каталогами та організація пошуку файлів……..73

2.10.16 Робота з файлами в MS DOS у випадку довгих імен………………77

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

Лабораторна робота №11 – Керування пристроєм “миша”.............80

2.11.1 Ініціалізація та визначення поточного стану драйвера

пристрою “миші”.............................................................................. ….80

2.11.2 Визначення типу і форми курсора “миші” у текстовому режимі....81

2.11.3 Визначення типу і форми курсора “миші” у графічному режимі....83

2.11.4 Установлення чутливості курсора “миші”……..…………………...85

2.11.5 Керування станом курсора “миші”......................................................87

2.11.6 Читання позиції курсора і стану кнопок “миші”.................................87

2.11.7 Позиціонування курсора “миші” пристроєм і прикладною програмою…………………………………………………………….89

2.11.8 Приклад програми для керування пристроєм “миша” в

текстовому режимі роботи відеоадаптера..........................................90

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

Література..........................................................................................................92

 

Вступ

 

Друга частина лабораторного практикуму орієнтована на продовження практичного вивчення програмування мовою Асемблера для мікропроцесорів фірми Intel.

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

Наступні дві роботи присвячені вивченню двох основних системних програм обробки – транслятора Turbo Assembler (TASM) і компонувача TLINK. Знання особливостей їх функціонування дозволяє створювати ефективні багатомодульні програми і здійснювати їх швидке налагоджування.

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

Дві лабораторні роботи пов’язані із програмним керуванням двох важливих периферійних пристроїв: дисплея та “миші”. Вивчивши графіку на Асемблері в текстовому та графічному режимах роботи дисплея можна легко формувати графічні зображення будь-якої складності з максимально можливою швидкодією. Це дасть змогу створювати програми з динамічними зображеннями, які часто використовуються в різноманітних ігрових та навчальних програмах. Використання в таких програмах пристрою “миша” є обов’язковим.

Велику користь програмісту надасть також вміння програмувати роботу з файлами в різних режимах.

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

 

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

Макрозасоби мови Асемблера

Тема: Макрозасоби мови Асемблера. Директиви повторення, умовні дирек­тиви. Макробібліотеки.

 

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

 

Призначення макрозасобів

 

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

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

Машиноорієнтована мова, в якій використовуються макрозасоби (макро­визначення, макрокоманди, макробібліотеки і таке інше), називається макромовою або Макроасемблером.

 

Макровизначення і макрокоманди

 

Припустимо, що ми маємо два фрагменти програми:

Фрагмент 1: MOV AX, A ADD AX, B SUB AX, C Фрагмент 2: MOV AX, M ADD AX, N SUB AX, P

Якщо ввести формальні параметри ARG1, ARG2, ARG3, тоді можна написати одну узагальнену програму:

MOV AX, ARG1

ADD AX, ARG2

SUB AX, ARG3

Така узагальнена програма може бути оформлена у вигляді макровизначення.

Макровизначення – це записана за чітко визначеними правилами послідовність машинних команд Асемблера, якій присвоєно ім’я.

Загальний формат макровизначення:

Ім’я макровизначення MACRO [Список формальних параметрів]

Тіло макровизначення

ENDM

Для нашого прикладу макровизначення буде мати такий вигляд:

CALC MACRO ARG1, ARG2, ARG3

MOV AX, ARG1

ADD AX, ARG2

SUB AX, ARG3

ENDM

У тому місці програми, де повинна виконуватись послідовність ко­манд, яка розміщена у макровизначенні, записується макрокоманда. Її формат:

Ім’я макровизначення [Список фактичних параметрів]

Для нашої програми приклади макрокоманд:

CALC A, B, C

CALC M, N, P

Ім’я макрокоманди повинно збігатись з іменем макровизначення, до якого звертається макрокоманда.

У макрокоманді фактичні параметри записуються у тому самому порядку, в якому перераховані формальні параметри у відповідному макровизначенні.

У середині макровизначення може бути розташоване звернення до іншої макрокоманди, яка в цьому випадку носить назву вкладеної макрокоманди.

Під час трансляції програми макрокоманда заміняється командами з від­повідного макровизначення. Цей процес називається макророз­ши­ренням.

 

Проблема міток у макровизначеннях

 

В одній програмі одне й те саме макровизначення може бути викорис­тано декілька разів. Якщо макровизначення містить мітку, то при його багаторазовому використанні у відповідних макророзширеннях з’являються оператори з однаковими мітками. З точки зору мови це є синтаксичною помилкою.

Для запобігання дублювання міток вони описуються за допомогою директиви (оператора) LOCAL, наприклад:

LOCAL МЕТ1, МЕТ2

У цьому випадку транслятор замість вказаної мітки записує число, а при кожному зверненні до макровизначення це число збільшується на 1.

 

Використання макробібліотек

Найбільшої ефективності і зручності у роботі з макросами можна досягти лише при використанні макробібліотек.

За допомогою будь-якого текстового редактора можна створити свою особисту бібліотеку, куди можуть бути розміщені макровизначення.

Якщо файл макробібліотеки має ім’я MACRO.LIB, то для її підключення на початку програми слід використати таку директиву:

INCLUDE MACRO.LIB

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

Наприклад, якщо в наведеному вище прикладі вилучити макроси KARETKA, OUT_STR та OUT_NUMB і записати їх в окремий файл з іменем “MyLib.lib”, то в основній програмі замість текстів коду цих макросів слід написати лише одну директиву:

 

INCLUDE MyLib.lib.

 

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

- вивчити теоретичну частину даної лабораторної роботи;

- для заданого прикладу скласти макровизначення;

- виконати програму з макровизначенням у тексті програми;

- створити власну макробібліотеку і виконати програму з підключенням цієї макробібліотеки;

- отримати лістинг програми і оформити звіт з лабораторної роботи.

 

 

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

Транслятор з мови Асемблера

Тема: Вивчення роботи транслятора з мови Асемблера. Структура лістинга Асемблера. Об’єктні бібліотеки.

 

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

 

Структура лістинга програми

Після асемблювання лістинг програми містить таку інформацію:

- вхідну та об’єктну програми;

- таблицю символічних імен;

- таблицю перехресних посилань (вона може бути і відсутньою);

- повідомлення про помилки.

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

Директива LIST передбачає видачу повного лістингу (дії за замовчуванням). Директива XLIST забороняє видачу вхідної та об’єктної програм у лістингу.

Директива NAME у форматі

NAME ім’я_модуля

присвоює “внутрішнє” ім’я об’єктному модулю.

Для того, щоб зверху на кожній сторінці лістингу виводився заголовок (титул) програми, використовується директива TITLE у такому форматі:

TITLE текст.

Перші 6 знаків тексту використовуються як ім’я модуля, якщо немає директиви NAME. В разі відсутності директив NAME та TITLE ім’я вхідного файла вважається іменем об’єктного модуля.

Директиви CREF та XREF означають відповідно видачу і заборону таблиці перехресних посилань.

Для встановлення ширини та довжини сторінки використовується директива PAGE у такому форматі:

PAGE операнд_1, операнд_2,

де операнд_1кількість рядків на сторінку (число від 10 до 255), операнд_2кількість символів у рідку (число від 60 до 132). За замовчуванням в асемблері встановлено PAGE 66, 80.

 

Таблиця символічних імен

За об’єктною та вхідною програмами розташована таблиця символічних імен.

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

У другій частині таблиці символічних імен зібрані дані про використані в програмі символічні імена, для змінних вказується їх тип (BYTE, WORD, DWORD), зміщення та ім’я сегмента. Якщо в програмі використані зовнішні змінні та глобальні імена, тоді всі вони перераховуються у таблиці символічних імен.

 

Таблиця 4 – Побудова машинного коду фрагменту програми

Команди програми І прохід ІІ прохід Шістнад-цятковий код команди
. . . DATE SEGMENT A DB 1,2,33,4,2,0 DB 5,6,7,8,5,-3 DB 9,7,11,1,2,2 DB 4,5,6,10,1,0 N DB 4 M DB 6 . . . . . . 7 0000 8 0000 9 0006 10 000C 11 0012 12 0018 13 0019 . . .          
MOV AL, N 39 0010   A0 00 18
CBW 40 0013      
MUL M 41 0014 F6 26 00 19
MOV CX, АX 42 0018     8B C8
SUB AX, AX 43 001A     2B C0
MOV SI, 0 44 001C   BE 00 00
MOV AL, A[SI] 45 001F 8A 84 00 00
M1: 46 0023          
INC SI 47 0023      
CMP A[SI], AL 48 0024 38 84 00 00
JGE M2 49 0028     7D 04
MOV AL, A[SI] 50 002A 8A 84 00 00
M2: 51 002E          
LOOP M1 52 002E     E2 F3
CBW 53 0030      
RET . . . 54 0031 . . .       C3

 

Для всіх сегментів і груп, що використовуються в програмі, наводяться їх імена, розмір в байтах, типи об’єднання та вирівнювання.

Нижче показано таблицю символічних імен для програми, яку ми навели вище.

Symbol Table

Symbol Name Type Value

 

??DATE Text "16/02/04"

??FILENAME Text "lab4 "

??TIME Text "08:36:34"

??VERSION Number 040A

@CPU Text 0101H

@CURSEG Text CODE_SG

@FILENAME Text LAB4

@WORDSIZE Text 2

A Byte DATE:0000

ADDRMES Dword DATE_SG:0045

BUF Byte DATE:001B

M Byte DATE:0019

M1 Near CODE:0023

M2 Near CODE:002E

MAIN Near CODE_SG:0010

MAX Byte DATE:001A

MESS Byte DATE:003B

MET1 Near CODE_SG:0049

MET2 Near CODE_SG:0055

N Byte DATE_SG:0018

START Far CODE_SG:0000

VYVOD Near CODE_SG:0032

 

Groups & Segments Bit Size Align Combine Class

 

CODE_SG 16 0063 Para none

DATE_SG 16 0049 Para none

STACKSG 16 0080 Para Stack

 

Об’єктні бібліотеки

При налагоджуванні багатомодульних програм є сенс об’єднувати окремі об’єктні модулі в одну об’єктну бібліотеку. Формат команди запуску об’єктної бібліотеки TLIB на виконання має вигляд:

TLIB libname [/c] [/e] commands, listfile

де libname – ім’я бібліотеки;

commands – операції з бібліотекою, наприклад:

+ означає додавання модуля в бібліотеку;

- означає вилучення модуля з бібліотеки;

* означає добування модуля з бібліотеки без його вилучення;

/c – режим роботи з урахуванням регістра, тобто режим, при якому роз­різ­няються великі і малі літери;

/e – створення розширеного словника.

Наприклад, для створення об’єктної бібліотеки MYLIB.LIB і помі­щен­ня туди об’єктних модулів PROG1.obj та PROG2.OBJ необхідно виконати команду:

TLIB MYLIB + PROG1, PROG2

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

 

- вивчити теоретичну частину лабораторної роботи;

- для заданого прикладу скласти текст програми мовою Асемблер і виконати трансляцію з отриманням лістинга програми;

- вивчити різні варіанти отримання лістинга програми;

- отримати окремий файл перехресних посилань в коді ASCII.

- виконати вручну асемблювання вхідної програми для першого і другого проходів транслятора;

- оформити звіт по лабораторній роботі.

 

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

Компонувачі

Тема: Вивчення роботи компонувача (редактора зв’язків). Структура кар­ти завантаження. Розбиття програми на Асемблері на зовнішні процедури (модулі).

 

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

 

Типи компонувачів

 

Існує декілька типів компонувачів. Найбільше розповсюджені з них такі:

· компонувач LINK ( розробник – фірма Microsoft);

· компонувач MSLINK (розробник – фірма Microsoft);

· компонувач TLINK (розробник – фірма Borland International).

Компонувач TLINK серед наведених є найшвидшим, хоча і має ряд обмежень:

- не підтримуються оверлейні структури;

- сегменти з одним і тим самим іменем і класом повинні бути всі здатні до об’єднання, або всі не здатні;

- не можна зв’язати разом об’єктні коди, відтрансльовані компіляторами Microsoft С та Microsoft Fortran, оскільки вони мають різні формати об’єктних модулів.

Надалі розглядатимемо функціонування компонувачів TLINК та LINK, які за виконуваними функціями близькі один до одного.

 

Карта завантаження

Карта завантаження (карта зв’язків), що знаходиться у файлі “.МАР”, містить результат роботи компонувача, тобто являє собою по суті лістинг компонувача.

У цій карті для кожного сегмента вказано його довжину в байтах, а також початкову та кінцеву адреси у тому вигляді, в якому вони будуть завантажені в оперативну пам’ять. Всі ці адреси є 20-бітовими і розпочинаються від нульової комірки.

Приклад найпростішої карти завантаження:

START STOP LENGTH NAME

00000H 0007FH 00080H SSTACK

00080H 00085H 00006H DATA

00090H 000B8H 00029H CODE

Оскільки завантаження програми в оперативну пам’ять здійснюється операційною системою, то завантажувач змінить значення цих адрес. Але ж відносно один одного їх значення залишаться такими самими.

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

Наприкінці карти завантаження вказується вхідна точка вико­нуваного файла. Ця адреса, як і інші, розраховується по відношенню до початку завантажувального модуля і настроюється в пам’яті завантажувача. Існує декілька способів вказування стартової адреси для завантажувального модуля типу “.ЕХЕ”.

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

Переважає спосіб задання вхідної точки в директиві END головного модуля програми:

END START,

де START – мітка першої виконуваної команди у програмі.

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

Все це справедливо для завантажувального модуля типу “.ЕХЕ”. Модулі типу “.СОМ” завжди починають виконуватись зі зміщення 100Н сегмента коду.

 

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

 

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 – Значення полів тегів

 

 

Формати цілих чисел

 

На рис. 12 наведені формати цілих чисел математичного співпроцесора Х87.

 

Ціле слово (ЦС):        
S Двійковий код - 16 розрядів
Коротке ціле (КЦ):        
S Двійковий код - 32 розряди
Довге ціле (ДЦ):        
S Двійковий код - 64 розряди
                 

 

Рисунок 12 – Формати цілих чисел.

 

У всіх цих форматах від’ємні числа записуються у доповняльному коді (якщо s=0, число додатне, якщо s=1, - число від’ємне).

 

Формати дійсних чисел

 

Дійсні числа можуть бути представлені в одному з трьох форматів (рис.13).

Мантиса числа завжди записується в нормалізованому вигляді:

1, m1m2m3

Порядок дійсного числа завжди записується в зміщеному вигляді, тому реальний порядок дорівнює числу в полі порядку мінус значення зміщення. Це дозволяє спростити порівняння чисел.

 

Коротке дійсне (КД): 22 0        
S Порядок Мантиса - 32 розряди
Довге дійсне (ДД):      
S Порядок Мантиса - 64 розряди
Тимчасове дійсне (ТД):      
S Порядок Мантиса - 80 розрядів
                       

 

Рисунок 13 – Формати дійсних чисел

Для обчислення реальних значень коротких дійсних чисел викорис­товують таку формулу:

(-1)S · (1, m1m2…m23) · 2E-127 .

Наприклад, нехай задано:

S E m1m2m3m4m5…m23

-----------------------------------------------

1 01111101 1 0 1 1 0 … 0

Обчислюємо реальне значення числа:

(-1)1 · (1,1011)2 · 2125-127 = - (1,6775)10 · 2-2 = - 0,419375.

Число +1.0 представляється у вигляді:

S E m1m2m3m4m5…m23

-----------------------------------------------

0 01111111 0 0 0 0 0 … 0

У форматах короткого та довгого дійсних чисел такі величини, як +∞, -∞ та NAN (Not a Number, тобто не числа) представляються таким чином (рис. 14).

 

Знак S Порядок Мантиса Значення  
11 ... 11 00 ... 00 +∞  
11 ... 11 00 ... 00 -∞  
11 ... 11 11 ... 11 NAN тобто, коли в полі мантиси будь-яке ненульове число
11 ... 11 11 ... 01 NAN
... ... ... NAN
11 ... 11 00 ... 11 NAN
11 ... 11 00 ... 01 NAN

 

Рисунок 14 – Представлення величин +∞, -∞ та NAN

 

Формат десяткового числа

Двійково-десяткове число має такий формат:

 

S D17 d16 d15 … d1 d0

де d – тетрада (4 двійкових розряди).

 

Система команд 8087

 

Повна система команд 8087 включає в себе 6 команд і побудована на основі команди ESC. Використовується 2 формати команди ESC.

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

 

ESC                  
КОП   mod КОП r/m   Молодший байт   Старший байт
       
      Байт адресації   Зміщення disp

Рисунок 15 – Формат команди з постбайтом

Зміщення disp може дорівнювати:

1 байт ( у цьому випадку mod = 01);

2 байти (у цьому випадку mod = 10);

бути відсутнім (тоді mod = 00 або mod = 11).

У випадку mod=11 операнд розміщується в одному з арифметичних регістрів. Виняток складають випадки, коли mod=11 і r/m=110, - тоді зміщення складає 2 байти і повністю визначає виконувану адресу.

Б) Формат команди без постбайта – застосовується у тих випадках, коли операнд розташований в регістрі ST(i) або в командах управління (рис. 16).

 

ESC            
КОП   КОП - формат команди управління
ESC            
КОП   КОП ST(i) - формат команди. коли операнд розташований в регістрі ST(i)

Рисунок 16 – Формат команди без постбайта

Команди керування

 

До команд керування відносяться 15 команд, які використовуються не для обчислень. а для виконання системних функцій. Більшість із цих команд має два варіанти (два мнемокоди). Другий мнемокод утворюється шляхом додавання до мнемокоду букви N, яка вказує, що при асемблюванні даного мнемокоду перед ним не треба розміщувати команду WAIT. Другий мнемокод використовується у програмах, які є критичними за часом виконання. До основних команд керування належать:

· команда ініціалізації співпроцесора – FINIT або FNINIT;

· команда очікування – FWAIT;

· команда збільшення покажчика стека – FINCSTR

(якщо ST=7, то після виконання даної команди ST=0);

· команда зменшення покажчика стека – FDECSTR

(якщо ST=0, то після виконання команди ST=7).

 

Команди передавання даних

Команди передавання даних включають 4 типи команд:

- команди завантаження;

- команди збереження (запам’ятовування);

- команда обміну;

- команди завантаження констант.

 

До основних команд завантаження належать:

· команда завантаження дійсного числа – FLD src або FLD ST(0),src

(передача даних здійснюється від джерела src у вершину стека ST(0));

· команда завантаження цілого числа – FILD src

(число завантажується у вершину стека);

· команда завантаження десяткового числа – FBLD src

(число завантажується у вершину стека).

 

До основних команд збереження належать:

· команда збереження дійсного числа – FST dst або FST ST(i)

(Число завантажується з вершини стеку в пам’ять за адресою dst або в інший регістр ST(i));

· команда збереження цілого числа – FIST dst;

· команда збереження дійсного числа з одночасним виштовхуванням зі стека – FSTP dst;

· команда збереження цілого числа з одночасним виштовхуванням зі стека – FISTP dst;

· команда збереження десяткового числа з одночасним виштовхуван- ням зі стека – FSTP dst.

 

До команди обміну належить:

· команда обміну – FXCH dst

(обмінюється вміст регістра-приймача dst з вершиною стека. За замовчуванням (команда FXCH) для обміну з вершиною стека ST(0) береться dst=ST(1).

 

До основних команд завантаження констант належать:

· команда завантаження числа +0.0 – FLDZ

(число завантажується у вершину стека);

· команда завантаження числа 1.0 – FLD1

(число завантажується у вершину стека);

· команда завантаження числа π FBLPI

(число завантажується у вершину стека);

· команда завантаження числа log210 – FLDL2T

(число завантажується у вершину стека).

 

Арифметичні команди

 

Арифметичні команди включають 6 типів команд:

- додавання;

- віднімання;

- множення;

- ділення;

- порівняння;

- аналізу.

 

До основних арифметичних команд належать:

· команда додавання дійсних чисел – FADD dst, src

(Як правило, dst=ST(0), src=ST(i) або dst=ST(i), src=ST(0). За замовчуванням (команда FADD) вважається, що dst=ST(0), src=ST(1). Результат операції в ST(0));

· команда віднімання дійсних чисел – FSUB dst, src;

· команда множення дійсних чисел – FMUL dst, src;

· команда ділення дійсних чисел – FDIV dst, src;

· Команда порівняння з нулем вершини стека – FTST;

· команда порівняння дійсних чисел – FCOM src

Остання команда виконує віднімання вмісту src від вмісту вершини стека ST(0), формуючи значення прапорців С3 та С0 (рис. 17).

 

Відношення С3 С0
ST(0) > (src) 0 0
ST(0) < (src) 0 1
ST(0) = (src) 1 0
ST(0) не може бути порівняно з (src) 1 1

 

Рисунок 17 – значення прапорців С3 та С0

 

Спеціальні команди для обчислень

До спеціальних команд належать:

· команда обчислення кореня квадратного ­­ – FSQRT;

· команда обчислення функції sin – FSIN;

· команда обчислення функції cos – FCOS;

· команда обчислення функції arctg – FRATAN.

 

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

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

2. Скласти програму мовою Асемблер для обчислення значення заданого виразу згідно з варіантом індивідуального завдання.

3. Скласти програму мовою Сі для обчислення цього виразу і порівняти результати обчислень.


Лабораторн

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