на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Мова програмування Assembler
p align="left">Номер біта: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Прапор: * * * * O D I T S Z * A * P * C

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

CF (Carry Flag) - прапор переносу. Містить значення "переносів" (0 чи 1) зі старшого розряду при арифметичес ких операціях і деяких операціях зрушення і циклічного зрушення (див. гл.12).

PF (Parity Flag) - прапор парності. Перевіряє молодші вісім біт результат- тов операцій над даними. Непарне число біт приводить до установки цього прапора в 0, а парне - у 1. Не варто плутати прапор парності з бітом контро- лю на парність.

AF (Auxiliary Carry Flag) - додатковий прапор переносу. Встановлюється в 1, якщо арифметична операція приводить до переносу четвертого праворуч біта (біт номер 3) у регистро виття однобайтовой команді. Даний прапор має відношення до арифметичних операцій над символами коду ASCII і до десяткових упакованим полям.

ZF (Zero Flag) - прапор нуля. Встановлюється в якості результату aрифметичних команд і команд порівняння. Як це не дивно, ненульовий результат приводить до установки нульового значення цього прапора, а нульовий - до установки одиничного значення. Існуюча невідповідність є, однак, логічно правильною, тому що 0 позначає "ні" (т.е. результат не дорівнює нулю), а одиниця позначає "так" (т.е. результат дорівнює нулю). Команди умовного переходу JE і JZ перевіряють цей прапор. SF (SIgn Flag) - знаковий прапор. Встановлюється у відповідності зі знаком результату (старшого біта) після арифметичних опеpацій: позитивний результат установлює 0, а негативний - 1. Команди умовного переходу JG і JL перевіряють цей прапор.

TF (Trap Flag) - прапор покрокового виконання. Цей прапор вам уже прихо- дилося встановлювати, коли використовувалася до манда Т в отладчике DEBUG. Якщо цей прапор встановлений в единичное cостояние, те процесор переходить у режим покрокового виконання команд, тобто в кожен момент виконується одна команда під користувальницьким керуванням.

IF (Interrupt Flag) - прапор переривання. При нульовому складаючись нии цього прапора переривання заборонені, при одиничному - дозволені.

DF (DIrection Flag) - прапор напрямку. Використовується в строкових опера- ціях для визначення напрямку передачі даних. При нульовому стані команда збільшує вміст регістрів SI і DI, викликаючи передачу даних ліворуч праворуч, при нульовому - зменшує вміст цих регістрів, викликаючи передачу даних праворуч ліворуч (див. гл.11).

OF (Overflow Flag) - прапор переповнення. Фіксує арифметическое переповнення, тобто перенос в/из старшого (знакового) біта при знакових арифметичних операціях. Як приклад: команда CMP порівнює два операнда

і воздействуте на прапори AF, CF, OF, PF, SF, ZF. Однак, немає необхідності перевіряти всі ці прапори по окремості. У сле- прикладі, що дує, перевіряється чи містить регістр BX нульове значення:

CMP BX,00 ;Порівняння BX з нулем

JZ B50; Перехід на B50 якщо нуль. (дії при ненулі)

B50: ... ;Крапка переходу при BX=0

Якщо BX містить нульове значення, команда CMP установлює прапор нуля ZF в одиничний стан, і можливо змінює (чи немає) інші прапори. Команда JZ (перехлд якщо нуль) перевіряє тільки прапор ZF. При одиничному значенні ZF, що позначає нульова ознака, команда передає керування на адресу, зазначений у її операнде, тобто на мітку B50.

Команда порівняння

Команда порівняння CMP порівнює два числа, віднімаючи одне з іншого. Вона не записує результат, але прапори стану установлює відповідно до результату. Ця команда змінює тільки прапори. У програмі команда порівняння використовується так само, як і команда вирахування; однак команди порівняння з заемом не існує. Порівняння з підвищеною точністю вимагає ледве більше зусиль, чим порівняння чи байтів слів. Фактично в цих випадках багато простіше використовувати команду вирахування замість команди порівняння. На рис.П4.11 показане порівняння пари 32=бітових чисел у пам'яті з використанням регістра AX у якості області тимчасового збереження. Це порівняння визначає, яке з чисел більше. Програма в результаті свого виконання встановлює коди умови. Прапор переносу визначає, яке з чисел більше: якщо прапор дорівнює 1, число VALUE більше.

Програма перевіряє два 32=бітових числа на рівність. Програма зберігає молодший результат, а потім комбінує його зі старшим, і в такий спосіб з'ясовує еквівалентність результату нулю. Команда OR описана в наступному розділі, а тут істотно те, що вона комбінує два значення так, що остаточне значення дорівнює 0 тоді і тільки тоді, коли обоє вихідних значення рівні 0. Результат цієї підпрограми порівняння - значення прапора нуля; якщо він дорівнює 1, числа рівні.

2. Створення розгалуження

Розглядаючи призначення команд умовного переходу випливає пояснити характер їхнього використання. Типи даних, над якими виконуються арифметичні операції й операції порівняння визначають якими командами користатися: беззнаковими чи знаковими. Беззнакові дані використовують усі біти як біти даних; характерним прикладом є символьні рядки: імена, адреси і натуральні числа. У знакових даних самий лівий біт являє собою знак, причому якщо його значення дорівнює нулю, то число позитивне, і якщо одиниці, те негативне. Багато числових значень можуть бути як позитивними так і негативними. Як приклад припустимо, що регістр AX містить 11000110, а BX - 00010110. Команда CMP AX,BX порівнює вміст регістрів AX і BX. Якщо дані беззнакові, то значення в AX більше, а якщо знакові - те менше. Переходи для беззнакових даних.

Будь-яку перевірку можна кодувати одним із двох мнемонічних кодів. Наприклад, JB і JNAE генерує той самий об'єктний код, хоча позитивну перевірку JB легше зрозуміти, чим негативну JNAE.

Переходи для знакових даних

Команди переходу для умови дорівнює чи нуль (JE/JZ) і не дорівнює чи не нуль (JNE/JNZ) присутні в обох списках для беззнакових і знакових даних. Стан дорівнює/нуль відбувається поза залежністю від наявності знака.

Специальные арифметические проверки

Ще одна команда умовного переходу перевіряє чи дорівнює вміст регістра CX нулю. Ця команда необов'язково повинна pасполагаться безпосередньо за командою арифметики чи порівняння. Одним з місць для команди JCXZ може бути початок циклу, де вона перевіряє чи містить регістр CX ненульове значення. Не поспішаєте поки заучувати ці команди напам'ять. Запам'ятаєте тільки, що для беззнакових даних є переходи по складаючись ниям дорівнює, чи вище нижче, а для беззнакових - дорівнює, чи більше менше. Переходи по перевірках прапорів переносу, переповнення і паритету мають особливе призначення. Асемблер транслює мнемонічні коди в об'єктний код незалежно від того, яку з двох команд ви застосували. Однак, команди JAE і JGE будучи явно однаковими, перевіряють різні прапори.

3. Циклічні конструкції. Використання регістру CX для організації лічильного циклу

Але більш ймовірно підпрограма повинна виконувати визначене число циклів. Команда LOOP, що служить для цієї мети, використовує початкове значення в регістрі CX. У кожнім циклі команда LOOP автоматично зменшує вміст регістра CX на 1. Поки значення в CX не дорівнює нулю, керування передається за адресою, зазначеному в операнде, і якщо в CX буде 0, керування переходить на слудующую після LOOP команду. Програма на рис. 7.2, що ілюструє використання команди LOOP, виконує дії, аналогічні прикладу на рис. 7.1 за винятком того, що після десяти циклів програма завершується. Команда MOV инициализирует регістр CX значенням 10. Оскільки команда LOOP використовує регістр CX, то в програмі для подвоєння початкового значення 1 замість регістра CX використовується DX. Команда JMP A20 замінена командою LOOP і для ефективності команда ADD AX,01 замінена командою INC AX (збільшення AX на 1). Аналогічно команді JMP, операнд команди LOOP визначає відстань від кінця команди LOOP до адреси мітки A20, которої додається до вмісту командного покажчика. Для команди LOOP ця відстань повинна бути в межах від -128 до +127 байт. Якщо операнд перевищує ці границі, то ассемблер видасть повідомлення "Relative jump out of range" (перевищені границі переходу). Для перевірки команди LOOP рекомендується змінити відповідним чином програму, приведену на рис.7.1, виконати її асемблювання, компоновку і перетворення в COM-файл. Для трасування всіх десяти циклів використовуйте налагоджувач DEBUG. Коли в значення регістрі CX зменшиться до нуля, вміст регістpів AX, BX і DX буде відповідно тичина. 000B, 0042 і 0400. Для виходу з відлагоджувача введіть команду Q. Додатково існує два різновиди команди LOOP - це LOOPE (чи LOOPZ) і LOOPNE (чи LOOPNZ). Обидві команди також зменшують значення регістра CX на 1. Команда LOOPE передає керування за адресою операнда, якщо регістр CX має ненульове значення і прапор нуля встановлений (ZF=1). Команда LOOPNE передає керування за адресою операнда, якщо регістр CX має ненульове значення і прапор нуля скинутий (ZF=0).

4. Реентерні та рекурсивні підпрограми. Математичні команди

КОМАНДИ ЛОГІЧНИХ ОПЕРАЦІЙ: AND, OR, XOR, TEST, NOT

Логічні операції є важливим елементом у проектуванні мікросхем і мають багато загального в логіку програмування. Команди AND, OR, XOR і TEST - є командами логічних операцій. Ці команди використовуються для скидання й установки біт і для арифметичних операцій у коді ASCII (див.гл.13). Усі ці команди обробляють один байт або одне слово в регістрі або в пам'яті, і встановлюють прапори CF, OF, PF, SF, ZF.

AND: Якщо обоє з порівнюваних бітів рівні 1, то результат дорівнює 1; у всіх інших випадках результат - 0.

OR: Якщо хоча б один з порівнюваних бітів дорівнює 1, то результат дорівнює 1; якщо порівнювані біти рівні 0, то результат - 0.

XOR: Якщо один з порівнюваних бітів дорівнює 0, а іншої дорівнює 1, то результат дорівнює 1; якщо порівнювані біти однакові (обоє - 0 чи обоє - 1) то результат - 0.

TEST: діє як AND-встановлює прапори, але не змінює біти.

Перший операнд у логічних командах вказує на один байт або слово в регістрі або в пам'яті і є єдиним значенням, що може змінюватися після виконання команд.У наступних командах AND,OR і XOR використовуються однакові бітові значення:

AND OR XOR

0101 0101 0101

0011 0011 0011

Результат: 0001 0111 0110

Для наступних незв'язаних прикладів, припустимо, що AL містить 1100 0101, а BH містить 0101 1100:

1. AND AL,BH ;Встановлює в AL 0100 0100

2. OR BH,AL ;Встановлює в BH 1101 1101

3. XOR AL,AL ;Встановлює в AL 0000 0000

4. AND AL,00 ;Встановлює в AL 0000 0000

5. AND AL,0FH ;Встановлює в AL 0000 0101

6. OR CL,CL ;Установлює прапори SF і ZF

Приклади 3 і 4 демонструють спосіб очищення регістра. У прикладі 5 обнуляются ліві чотири біти регістра AL. Хоча команди порівняння CMP можуть бути зрозуміліше, можна застосувати команду OR для наступних цілей:

1. OR CX,CX ;Перевірка CX на нуль

JZ ;Перехід, якщо нуль

2. OR CX,CX ;Перевірка знака в CX

JS ... ;Перехід, якщо негативно

Команда TEST діє аналогічно команді AND, але встановлює тільки прапори, а операнд не змінюється. Нижче наведемо кілька прикладів:

1. TEST BL,11110000B ;Любою з лівих біт у BL

JNZ ... ; дорівнює одиниці?

2. TEST AL,00000001B ;Регістр AL містить

JNZ ... ; непарне значення?

3. TEST DX,OFFH ;Регістр DX містить

JZ ... ; нульове значення?

Ще одна логічна команда NOT встановлює обернене значення біт у чи байті в слові, у чи регістрі в пам'яті: нулі стають одиницями, а одиниці - нулями. Якщо, наприклад, pегістр AL містить 1100 0101, то команда NOT AL змінює це значення на 0011 1010. Прапори не міняються. Команда NOT не еквівалентна команді NEG, що змінює значення з позитивного на нега- тивне і навпаки, за допомогою заміни біт на протилежне значення і додатки одиниці (см."Негативні числа" у гл.1.).

КОМАНДИ ЗРУШЕННЯ І ЦИКЛІЧНОГО ЗРУШЕННЯ

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

- обробляють чи байт слово;

- мають доступ до чи регістра до пам'яті;

- зрушують чи уліво вправо;

- зрушують на величину до 8 біт (для байта) і 16 біт (для слова);

- зрушують логічно (без знака) чи арифметично (з знаком).

Значення зрушення на 1 може бути закодоване як непосред cтвенный операнд, значення більше 1 повинне знаходитися в регістрі CL.

Команди зрушення

При виконанні команд зрушення прапор CF завжди містить значення останнього висунутого біта. Існують наступні команди cдвига:

SHR ;Логічний (беззнаковий) зрушення вправо

SHL ;Логічний (беззнаковий) зрушення вліво

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.