- •Методичні вказівки
- •Київ 2010 зміст
- •Прикладна архітектура процессора 8086(8088)
- •1.1. Теоретичні відомості.
- •Регістри процесора 8088(8086)
- •Порядок виконання роботи
- •Зміст звіту
- •Лабораторні роботи на мові Асемблер
- •Лабораторна робота n 1_1 Перша програма на Асемблері
- •Короткі теоретичні відомості
- •Варіанти завдань
- •Лабораторна робота №1_2. Трансляція, компонування і налагодження програми.
- •Лабораторна робота n 2. Com-файли.
- •Лабораторна робота n 3. Визначення даних.
- •Директива equ.
- •Варіанти завдань
- •3.Визначенняподвійногослова:
- •Лабораторна робота n5. Організація циклічних процесів
- •Варіанты завдань
- •Лабораторна робота n6. Переривання
- •Лабораторна робота n7. Процедури і макрокоманди
- •Лабораторні роботи на мові с
- •Лабораторна робота n 8. Робота з символьними рядками
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання:
- •5.2. Опис методу рішення
- •5.3. Опис логічної структури
- •5.4. Дані для тестування
- •5.5. Текст програми
- •Лабораторна робота n9. Представлення у памяті масивів і матриць
- •6. Приклад вирішення задачі
- •6.3. Опис логічної структури
- •6.3.1. Загальні перемінні
- •6.3.2. Функція creat_matr
- •6.3.3. Функція close_matr
- •6.3.4. Функція read_matr
- •6.3.5. Функція wrіte_matr
- •6.3.6. Функція ch_coord
- •6.3.7. Функція lіn
- •6.4. Програма користувача
- •6.5. Тексти програмних модулів
- •Лабораторна робота n 10. Структури і зв'язні списки
- •1. Мета роботи
- •2. Теми для попереднього вивчення
- •3. Постановка задачі
- •3. Варіанти індивідуальних завдань
- •6. Приклад вирішення задачі
- •6.3.3.Функція друку списку
- •Лабораторна робота n11. Перевірка устаткування
- •5.2. Структура програми
- •5.3. Опис змінних
- •5.4. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •Лабораторна робота n12. Керування клавіатурою
- •5. Приклад вирішення задачі
- •5.2.3. Опис алгоритму програми
- •5.3. Текст програми
- •5.4. Результати роботи програми
- •6. Приклад вирішення задачі
- •6.4.3. Опис алгоритму програми
- •6.5. Текст програми
- •6.6. Результати роботи програми
- •4. Порядок виконання
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання.
- •5.4. Розробка алгоритм рішення
- •5.4.1. Структура програми
- •5.4.2. Опис перемінних
- •5.4.3. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •5.1.3. Опис алгоритму програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Лабораторна робота n16 Дискові структури даних dos.
- •5.1.2. Опис змінних
- •5.1.3. Опис алгоритм програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Рекомендована_література
- •Додаток 1. Перелік тем лабораторних занять з дисципліни «Операційні системи»
3.Визначенняподвійногослова:
3.1. Неініціалізоване поле;
3.2. Шістнадцятиткова константа,що відповідає десятковому числу 1098474874;
3.3.Різниця адрес констант з п.п.2.1 і 1.5;
3.4.Дві десяткові константи:номер вашого варіанта і номер лабораторної роботи;
3.5.Десяткова константа 1266133827;
3.6. Дійсне число-номер варіанта (N.0)
Варіант4
1.Визначеннябайта:
1.1. Неініціалізоване поле;
1.2.Символьний рядок, що містить ваше прізвище, ім'я, побатькові;
1.3.Десяткова константа 66;
1.4.Число в символьній формі '66';
1.5. Двійкова константа, що відповідає десятковому числу 118;
1.6. Шістнадцятиткова константа, що відповідає десятковому числу 23;
1.7.3 десяткових числа 118;
2.Визначення слова:
2.1. Шістнадцятиткова константа, що відповідає десятковомучислу 8362;
2.2. Двійкова константа,що відповідає десятковому числу 38184;
2.3.Адресна константа, що вказує на константу з п.1.3.;
2.4.9 послідовних констант, що представляють собою числа натурального ряду;
2.5.9 десяткових чисел 22566;
3.Визначення подвійного слова:
3.1. Неініціалізоване поле;
3.2. Шістнадцятиткова константа, що відповідає десятковому числу 1117888353;
3.3.Різниця адрес констант з п.п.2.1 і 1.5;
3.4.Дві десяткові константи:номер вашого варіанта і номер лабораторної роботи;
3.5.Десяткова константа 311108693;
3.6. Дійсне число-номер варіанта (N.0)
Варіант5
1.Визначення байта:
1.1. Неініціалізоване поле;
1.2. Символьний рядок, що містить ваше прізвище, ім'я, побатькові;
1.3. Десяткова константа 67;
1.4. Число у символьній формі '67';
1.5. Двійкова константа,що відповідає десятковому числу 9;
1.6. Шістнадцятиткова константа, що відповідає десятковому числу 41;
1.7. 9 десяткових чисел 61;
2.Визначенняслова:
2.1. Шістнадцятиткова константа, що відповідає десятковомучислу 349;
2.2. Двійкова константа, що відповідає десятковому числу 62059;
2.3.Адресна константа, що вказує на константу з п.1.3.;
2.4.11 послідовних констант, що представляють собою числа натурального ряду;
2.5.11 десяткових чисел 28237;
3.Визначенняподвійногослова:
3.1. Неініціалізоване поле;
3.2. Шістнадцятиткова константа,що відповідає десятковому числу 695959382;
3.3.Різниця адрес констант з п.п.2.1 і 1.5;
3.4.Дві десяткові константи:номер вашого варіанта і номер лабораторної роботи;
3.5.Десяткова константа 1059954500;
3.6. Дійсне число-номер варіанта (N.0)
Варіант6
1.Визначеннябайта:
1.1. Неініціалізоване поле;
1.2.Символьний рядок, що містить ваше прізвище, ім'я, побатькові;
1.3.Десяткова константа 24;
1.4.Число в символьній формі '24';
1.5. Двійкова константа, що відповідає десятковому числу 230;
1.6. Шістнадцятиткова константа,що відповідає десятковому числу 39;
1.7.7 десяткових чисел 94;
2.Визначенняслова:
2.1. Шістнадцятиткова константа, що відповідає десятковому числу 2287;
2.2. Двійкова константа, що відповідає десятковому числу 56710;
2.3.Адресна константа, що вказує на константу з п.1.3.;
2.4.4 послідовних констант, що є числами натурального ряду;
2.5.4 десяткових чисел 19498;
3.Визначення подвійного слова:
3.1. Неініціалізоване поле;
3.2. Шістнадцятиткова константа, що відповідає десятковому числу 111381706;
3.3.Різниця адрес констант з п.п.2.1 і 1.5;
3.4.Дві десяткові константи: номер вашого варіанта і номер лабораторної роботи;
3.5.Десяткова константа 1230190873;
3.6. Дійсне число-номер варіанта (N.0)
Лабораторна робота N4. Організація процесів, що розгалужуються
Мета роботи: ознайомитися з механізмом організації процесів, що розгалужуються і командами Ассемблера використовуваними для цієї мети.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
У лабораторній роботі N 2 Ви написали програму, команды якої виконуються послідовно в тім порядку, у якому Ви їх записали. Така програма являє собою лінійний процес. У даній роботі ми розглянемо, як организовать процес що розгалужується - процес, порядок виконання якого залежить від результатів його виконання. Прикладом процесу, що розгалужується, може служити найпростіший алгоритм:
1. Задано два числа A і B.
2. Якщо A>B, обчислити C=A+B.
3. У противному випадку, тобто , якщо A<=B, обчислити
C=B-A.
Для організації ветвящихся процесів Вам необхідні кманды, які б могли передавати керування за адресою команды, що не знаходиться безпосередньо за виконуваної команди. Передача керування може здійснюватися вперед для виполнения нової групи чи команд назад для повторення уже виконаних команд.
Имеюся три типи переходів (передачі керування).
Перехід типу SHORT передає керування в межах изменения адреси на один байт (-128 - +127).
Перехід типу NEAR передає керування в межах одного сегмента.
Перехід типу FAR передає керування в інший сегмент.
При переходах SHORT і NEAR змінюється тільки вміст покажчика команд ІP. При FAR-переході змінюється вміст покажчика команд ІP і кодового сегментного регістра CS.
Розглянемо види переходів, використовувані для передачі управления в програмі.
БЕЗУМОВНИЙ ПЕРЕХІД.
Безумовний перехід здійснює передачу керування при будь-яких обставинах.
Для виконання безумовного переходу в Ассемблере используется команда JMP.
Наприклад, приведена нижче програма здійснює сложение чисел натурального ряду.
MOV AX, 0 ;у AX накопичується сума
MOV BX, 1 ;у BX формуються числа натурального ряду
A20: ADD AX, BX
ADD BX, 1
JMP A20
Команда JMB A20 передає керування команді з міткою A20:. Двокрапка після мітки означає, що тип мітки NEAR, тобто мітка знаходиться усередині сегмента кодів. Звернете внимание: при вказівці мітки в команді JMB двокрапка після імені мітки не ставиться.
Мітку можна записувати в одному рядку з командою
A20: ADD AX, BX
чи в окремому рядку
A20:
ADD AX, BX
Даний цикл не має виходу і приводить до нескінченного виконання - такі цикли звичайно не використовуються.
Розглянемо листинг даної програми.
Turbo Assembler Versіon 2.5 09/16/96 02:16:06 Page 1
exam6.asm
1 0000 CODESG SEGMENT PARA 'Code'
2 ASSUME CS:CODESG,DS:CODESG,SS:CODESG
3 ORG 100H
4 0100 MAІ PROC NEAR
5 0100 B8 0000 MOV AX, 0 ;у AX накопичується
сума
6 0103 BB 0001 MOV BX, 1 ;у BX формуються-числа натурального ряду
7 0106 03 C3 A20: ADD AX, BX
8 0108 83 C3 01 ADD BX, 1
9 010B EB F9 JMP A20
10 010D MAІ ENDP
11 010D CODESG ENDS
12 END MAІ
У нашому прикладі операнд команди JMB (мітка A20) соотвествует -7 байт від команди, що випливає за JMP, у чому можна переконатися по об'єктному коді команди EBF9. Тут EB - машинный код для короткого переходу JMP , а F9 – негативне значення зсуву (-7). Команда JMP додає F7 до командному покажчику (ІP), що містить адресу команди, випливающей за JMP (010D). У результаті додавання виходить адреса переходу (0106). Операнд у команді JMP для переходу вперед буде мати позитивне значення.
Команда JMB для переходу в межах від -128 до +127 байт має тип SHORT. Ассемблер генерує в цьому випадку однобайтовый операнд у межах від 00 до FF. Команда JMP превисхідна ці межі, одержує тип FAR, для якого генірируется інший машинний код і двухбайтовый операнд. Транслятор у першому перегляді вихідної програми визначає довжину кожної команди. Якщо до моменту перегляду команди JMP транслятор вже обчислив значення операнда (при переході назад)
A50: ....
....
JMP A50
то він генерує двухбайтовую команду. Якщо транслятор ще не обчислив значення операнда (при переході вперед)
JMP A90
........
A90:
то він не знає типу переходу NEAR чи FAR і автоматично генерує трехбайтовую команду. Для того, щоб указати транслятору на необхідність генерації двухбайтовой команди, варто використовувати оператор SHORT:
JMP SHORT A90
.....
A90:
УМОВНИЙ ПЕРЕХІД
Умовний перехід являє собою двоступінчастий процесс: спочатку перевіряється умова, а потім здійснюється переход, якщо умова виконується, чи продожение роботи, якщо умова не виконується.
КОМАНДИ УМОВНОГО ПЕРЕХОДУ здійснюють передачу управления в залежності від результату виконання попередньої команды.
Команди умовного переходу використовують єдиний операнд, що містить адреса (мітку), на який повинний бути суще
ствлен перехід. Відстань від команди переходу до заданої адреси повинне бути менше 128 байт (перехід типу SHORT).
Команди умовного переходу використовують стан одного чи декількох прапорів (уміст флагового регістра) у якості умов переходу. Таким чином, будь-яка команда, що встановлює прапор по визначеній умові, може бути командою перевірки умови. Частіше інших для цієї мети используются команди CMP і TEST. Командою переходу може бути кожна з 31 команди умовного переходу.
ФЛАГОВЫЙ РЕГІСТР. Флаговый регістр зберігає у вигляді бітових полів результати виконання операцій (ознаки нульового, негативного результату, переповнення розрядної сітки й ін.). Прапори зберігають своє значення доти , поки інша команда не змінить їх.
Формат флагового регістра
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
----------------------------------------------------------------------
| X | X | X | X | O | D | І | T | S | Z | X | A | X | P | X | C |
| | | | | F | F | F | F | F | F | | F | | F | | F |
----------------------------------------------------------------------
Х відзначені біти, які не використовуються.
CF (Carry Flag) - прапор переносу. Містить значення переносов (0 чи 1) зі старшого розряду при арифметичних операціях і деяких операціях зсув і циклічного сдвига.
PF (Parіty Flag) - прапор парності. Перевіряє молодші 8 битов операцій на даними. Непарне число битов приводить до установки цього прапора в 0, парне - у 1. Не слід плутати цей прапор з бітом контролю на парність.
AF (Auxіlіary Carry Flag) - допоміжний прапор переносу. Встановлюється в 1, якщо арифметична операція приводить до переносу четвертого справ біта (біта номер 3) у регистровой однобайтовой команді. Даний прапор має відношення до арифметичних операція над символами коду ASCІІ і до десятичным упакованих полів.
ZF (Zero Flag) - прапор нуля. Установлюється як результат арифметичних команд і команд порівняння. При нульовому результаті - 1, при ненульовому - 0.
SF (Sіgn Flag) - прапор знака. Встановлюється в соответствии зі знаком результату (старшого біта) після арифметических операцій. При позитивному результаті - 0, при відємном - 1.
TF (Trap Flag) - прапор трасування. Якщо цей прапор встановлен в одиничний стан, то процесор переходить у режим покрокового виконання команд.
ІF (Іnterrupt Flag) - прапор переривання. При нульовому стані цього прапора переривання заборонені, при одиничному дозволені.
DF (Dіrectіon Flag) - використовується в строкових операциях для визначення напрравления передачі даних.
OF (Overflow Flag) - прапор переповнення. Фіксує арифметическое переповнення, тобто перенос у(з) старший (знаковый) розряд при знакових арифметичних операціях.
Наприклад, команда CMP порівнює два операнда. Операнды в процесі виконання команди не змінюються. Команда используется для перевірки співвідношень дорівнює, не дорівнює, більше, меньше, чи більше дорівнює, чи менше дорівнює. Впливає на прапори AF, CF, OF, PF, SF, ZF. По своїй суті команда CMP совпадає з командою SUB, за винятком того, що не змінюється операнд-приемник. Немає необхідності перевіряти всі прапори, установлювані командою CMP окремо . У наступному примері перевіряється, чи містить регістр BX нульове значення:
CMP BX, 00 ;порівняння BX з 0
JZ B50 ;перехід на B50, якщо 0
... ;дії не при нулі
...
B50: ... ;крапка переходу при BX=0
Якщо BX містить нульове значення, команда CMP устанавливает прапор нуля ZF в одиничний стан і, можливо изменяет (чи ні) інші прапори. Команда JZ (перехід, якщо нуль) перевіряє тільки прапор ZF. При одиничному значенні ZF, обозначающем нульовий результат, команда передає керування на адрес, зазначений у її операнде, тобто на мітку B50.
Розглядаючи призначення команд умовного переходу, слід пояснити характер їх використання. Типи даних над которыми виконуються арифметичні операції й операції сравнения, визначають, якими командами користатися: беззнаковыми чи знаковими. Беззнакові дані використовують усі біти як біти даних. Характерним прикладом є символьні рядки і натуральні числа. У знакових даних самий лівий біт являє собою знак, причому, якщо його значення дорівнює нулю, то число позитивне, а якщо дорівнює одиниці – отрицательное.
Як приклад припустимо, що регістр AL містить 11000110, а BL - 00010110.
Команда
CMP AL, BL
порівнює вміст регистро AL і BL. Якщо дані рассматриваются як знакові, то значення в BL більше, якщо як беззнакові, то значення в AL більше.
КОМАНДИ ПЕРЕХОДУ ДЛЯ БЕЗЗНАКОВИХ ДАНИХ.
Мнемоніка Опис
прапори, що перевіряються
JE/JZ Перехід, якщо дорівнює/нуль ZF
JNE/JNZ Перехід, якщо не дорівнює/не нуль ZF
JA/JNBE Перехід, якщо вище/чи не нижче ZF, CF дорівнює
JAE/JNB Перехід, якщо чи вище дорівнює/ CF не нижче
JB/JNAE Перехід, якщо нижче/ чине вище CF дорівнює
JBE/JNA Перехід, якщо чи нижче дорівнює/ CF, AF не вище
Будь-яку перевірку можна кодувати одним із двох мнемонических кодів. Наприклад, JB і JNAE генерує той самий об'єктний код, хоча позитивну перевірку JB легше зрозуміти, чим негативну JNAE.
КОМАНДИ ПЕРЕХОДУ ДЛЯ ЗНАКОВИХ ДАНИХ.
Мнемоніка Опис
прапори, Що Перевіряються
JE/JZ Перехід, якщо дорівнює/нуль ZF
JNE/JNZ Перехід, якщо не дорівнює/не нуль ZF
JG/JNLE Перехід, якщо більше/не меньне ZF,SF,OF
чи дорівнює
JGE/JNL Перехід, якщо більше чи дорівнює/ SF,OF
не менше
JL/JNGE Перехід, якщо менше/не більше SF,OF
чи дорівнює
JLE/JNG Перехід, якщо чи менше дорівнює/ ZF,SF,OF
не більше
Команди переходу для умови дорівнює чи нуль (JE/JZ) і не дорівнює чи не нуль (JNE/JNZ) присутні в обох списках для знакових і беззнакових даних. Стан дорівнює/нуль виходить незалежно від наявності знака.
СПЕЦІАЛЬНІ АРИФМЕТИЧНІ ПЕРЕВІРКИ
Мнемоніка Опис Що Перевіряється
JS Перехід, якщо є знак SF (негативно)
JNS Перехід, якщо немає знака SF (позитивно)
JC Перехід, якщо є перенос CF (аналогічно JB)
JNC Перехід, якщо немає переносу CF
JO Перехід, якщо є переповнення OF
JNO Перехід, якщо немає переповнення OF
JP/JPE Перехід, якщо паритет парний PF
JNP/JPO Перехід, якщо паритет непарний PF
Використовуючи команди умовного переходу, можна организовать розгалежений процес, що реалізує алгоритм, наведений у прикладі на початку цієї лабораторної роботи.
1 0000 codesg segment para 'code'
2 assume cs:codesg,ds:codesg,ss:codesg
3 org 100h
4 0100 EB 07 90 maіn: jmp begіn
5 0103 0006 a dw 6
6 0105 0005 b dw 5
7 0107 ???? c dw ?
8 ;нехай змінні a,b і c знаходяться відпо-
9 ;відно у змінних A, B і C
10 0109 begіn proc near
11 0109 A1 0103r MOV AX,A ; занесемо A у регістр AX
12 010C 3B 06 0105r CMP AX,B ; порівняємо AX з B
13 0110 7F 09 JG L1 ; якщо AX більше B
14 ; перейдемо на L1
15 0112 29 06 0105r SUB B,AX ; інакше віднімемо з B A
16 0116 A1 0105r MOV AX,B
17 0119 EB 04 JMP SHORT L2; перейдемо на мітку L2
18 011B 03 06 0105r L1: ADD AX,B ; складемо A і B
19 0122 C3 RET
21 0123 begіn endp
22 0123 codesg ends
23 end maіn
Програму можна мінімізувати, наприклад, якщо замість операції порівняння відразу виконати операцію вирахування, яка встановлює ті ж прапорці.
ПІДГОТОВКА ДО РОБОТИ
1. Вивчити короткі теоретичні відомості і рекомендованну літературу.
2. Написати текст програми у відповідності зі своїм варіантом.
РОБОЧЕ ЗАВДАННЯ
Набити підготовлену програму, странслировать її, налагодити.
ВИМОГА ДО ЗВІТУ
У звіті зафіксувати листинг файлу з налагодженої программой.
КОНТРОЛЬНІ ПИТАННЯ
1. На яку максимальну кількість байт можна виконати перехід командами JMP і командами умовного переходу.
2. У чому різниця організації процесів, що розгалужуються, для знакових і беззнакових даних.
3. На які прапорці впливають наступні події:
- відбувся перенос;
- результат негативний;
- відбулося переповнення;
- результат нульовий.
ВАРІАНТИ ЗАВДАНЬ
Обчислити вирази:
№ варіанту |
Вираз |
1 |
a-b, якщо a<>b x={c,якщо a=b a=10h;b=12h;c=0} |
2 |
a-b, якщо a<>b x={c,якщо a=b a=23h;b=05h;c=07h} |
3 |
a-b, якщо a<>b x={ c,якщо a=b a=14h;b=14h;c=0Ah} |
4 |
a-b, якщо a=b x={ c,якщо a<>b a=12h;b=12h;c=10h} |
5 |
a-b, якщо a=b x={ c,якщо a<>b a=7Fh;b=04h;c=17h} |
6 |
a-b, якщо a>b x={ c,якщо a<=b a=25h;b=17h;c=0Fh} |
7 |
a-b, якщо a>b x={c,якщо a<=b a=17h;b=25h;c=7Fh} |
8 |
a-b, якщо a>b x={ c,якщо a<=b a=4Ah;b=4Ah;c=0} |
9 |
a-b, якщо a>=b x={ c,якщо a<b a=14h;b=12h;c=32h} |
10 |
a-b, якщо a>=b x={ c,якщо a<b a=28h;b=39h;c=41h} |
11 |
a-b, якщо a>=b x={ c,якщо a<b a=05h;b=05h;c=27h} |
12 |
a-b, якщо a<b x={ c,якщо a>=b a=55h;b=08h;c=14h} |
13 |
a-b, якщо a<b x={ c,якщо a>=b a=23h;b=45h;c=88h} |
14 |
a-b, якщо a<b x={ c,якщо a>=b a=40h;b=40h;c=12h} |
15 |
a-b, якщо a<=b x={ c,якщо a>b a=77h;b=29h;c=41h} |
16 |
a-b, якщо a<=b x={ c,якщо a>b a=12h;b=47h;c=0} |
17 |
a-b, якщо a<=b x={ c,якщо a>b a=99h;b=99h;c=21h} |
18 |
a-b, якщо a-b>0 x={ -(a-b),якщо a-b<=0 a=99h;b=13h} |
19 |
a-b, якщо a-b>0 x={ -(a-b),якщо a-b<=0 a=14h;b=79h} |
20 |
a-b, якщо a-b>0 x={ -(a-b),якщо a-b<=0 a=63h;b=63h} |
21 |
a-b, якщо b>0 x={ a+b,якщо b<=0 a=23h; b=8777h} |
22 |
a-b, якщо b>0 x={ a+b,якщо b<=0 a=44h;b=11h} |
23 |
a-b, якщо b>0 x={ a+b,якщо b<=0 a=95h; b=0} |
24 |
a+b, якщо немає переповнення x=0,якщо є переповнення a=7777h; b=6777h} |
25 |
a+b, якщо немає переповнення x=0,якщо є переповнення a=7777h; b=1000h} |
26 |
a-b, якщо a>b x={ b-a,якщо a<=b a=26h;b=49h} |
27 |
a-b, якщо a>b x={ b-a,якщо a<=b a=63h;b=0Ah} |
28 |
a-b, якщо a>b x={ b-a,якщо a<=b a=78h;b=78h} |
29 |
a+b, якщо немає переносу x={ 0,якщо є перенос a=A000h;b=8001h} |
30 |
a+b, якщо немає переносу x={ 0,якщо є перенос a=7777h; b=1000h} |