Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод вказів лаборат роб Опер сист.doc
Скачиваний:
11
Добавлен:
08.02.2016
Размер:
1.41 Mб
Скачать

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)

    1. Лабораторна робота 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}