- •Затверджую Начальник спеціальної кафедри № 5
- •Методична розробка
- •Тема 1. Мови асемблера та їх використання для побудови базових елементів системних програм.
- •Тема 1/5
- •Контрольні запитання про архітектуру базового процесора
- •Короткі теоретичні відомості
- •Команди умовної передачі управління та їх використання на мові асемблера
- •Перевірки умов та відношень порядку ключів на мові асемблера
- •3. Типи циклів та перевірка умов закінчення циклів лінійного пошуку на мові асемблера
- •Завдання на підготовку до роботи з комп’ютерного практикуму
Короткі теоретичні відомості
В результаті компіляції програм з мов високого рівня утворюються так звані об’єктні модулі, які організуються за спеціальними стандартами, які називають угодами про зв’язки. Додержання цих угод різними компіляторами відкриває шлях до простого автоматичного зв’язування викликів основних програм, процедур та функцій, написаних на різних мовах програмування, а також для програмування вставок на мові Асемблера в рамках компіляторів з цих мов.
Команди умовної передачі управління та їх використання на мові асемблера
Команди передачі управління змінюють вміст регістрів CS та IP, в результаті чого процесор переходить на нову послідовність команд. Ці команди поділяються на 5 груп: команд умовної і безумовної передачі управління, умовних установок, викликів процедур і переривань.
Команди умовної передачі управління перевіряють поточний стан регістра прапорців f, як показано в табл. 5.1 попередньої лекції. Якщо умова, вказана в мнемоніці команди виконується, то управління передається на команду за указаною адресою, інакше зберігається поточна послідовність команд.
Таблиця 5.1
Мнемоніки операцій + двійковий код умови |
Умова передачі управління |
||||
переходу |
установки |
сссс |
Аналітичне представлення |
Текстовий опис |
|
JC/jb/jnae |
SETС/setb/setnae |
0010 |
Cf=1 |
перенос |
|
JE/JZ |
SETE/SETZ |
0100 |
Zf=1 |
дорівнює чи нуль |
|
JNC/jae/jnb |
SETNC/setae/setnb |
0011 |
Cf=0 |
нема переносу |
|
JNE/JNZ |
SETNE/SETNZ |
0101 |
Zf=0 |
не дорівнює чи не нуль |
|
JNO |
SETNO |
0001 |
Of=0 |
нема переповнення |
|
JNP/JPO |
SETNP/SETPO |
1011 |
Pf=0 |
нема паритету |
|
JNS |
SETNS |
1001 |
Sf=0 |
знак “+” |
|
JO |
SETO |
0000 |
Of=1 |
переповнення |
|
JP/JPE |
SETP/SETPE |
1010 |
Pf=1 |
паритет |
|
JS |
SETS |
1000 |
Sf=1 |
знак “–” |
|
JAE/JNB/jnc |
SETAE/SETNB/setnc |
0011 |
Cf=0 |
Не нижче |
|
JB/JNAE/jc |
SETB/SETNAE/setc |
0010 |
Cf=1 |
нижче |
|
JA/JNBE |
SETA/SETNBE |
0111 |
(Cf or Zf)=0 |
вище |
|
JBE/JNA |
SETBE/SETNA |
0110 |
(Cf or Zf)=1 |
не вище |
|
JG/JNLE |
SETG/SETNLE |
1111 |
(Sf xor Of)or Zf=0 |
більше |
|
JGE/JNL |
SETGE/SETNL |
1101 |
(Sf xor Of)=0 |
Не менше |
|
JL/JNGE |
SETL/SETNGE |
1100 |
(Sf xor Of)=1 |
менше |
|
JLE/JNG |
SETLE/SETNG |
1110 |
(Sf xor Of)or Zf=1 |
Не більше |
|
JCXZ |
СХ = 0
|
нуль в лічильнику |
|||
LOOP |
CX--;CX0
|
цикл |
|||
LOOPE/LOOPZ |
CX--;CX0 and Zf0
|
цикл, якщо нуль |
|||
LOOPNE/LOOPNZ |
CX--;CX0 and Zf =0
|
цикл, якщо не нуль |
|||
Адреса початку нової послідовності команд формується як сума поточного значення IP з однобайтним знаковим зміщенням, що визначається другим байтом команди. Це обмежує діапазон умовного переходу в межах –128 .. +127 байтів відносно початку наступної команди. В першому байті внутрішнього представлення використовується код операції, в якому старший напівбайт зі значенням "7" визначає операцію умовного переходу, а молодший напівбайт – двійковий код умови сссс. В удосконалених процесорах [*3] існує розширена команда з двобайтним кодом операції 0F8c, де с – напівбайт двійкового коду умови, і розширеним залежно від режиму до двох або чотирьох байтів відносною адресою переходу [4]. Повний перелік команд умовної передачі управління наведено в табл. 5.1 разом з переліком команд умовних установок групи SETxx, схожих за назвами.
Команди переходів, установок та пересилок за умовами звичайно використовуються після арифметичних, логічних операцій або операцій порівняння. Приклади використання команд переходів у вигляді вставок на мові Асемблера наведені в наступному розділі.
Команди передачі управління змінюють вміст регістрів CS та IP, в результаті чого процесор переходить на нову послідовність команд. Ці команди поділяються на 5 груп: команд умовної і безумовної передачі управління, умовних установок, викликів процедур і переривань.
Аналогічна група команд в процесорах, починаючи з i386, використовується для умовної установки даних командами групи SETxx (табл. 4.2) з кодами операції 0F9c, де с – напівбайт коду умови. Ці команди встановлюють однобайтний регістр або байт пам’яті в "1" при виконанні умови команди, заданої в мнемоніці, або в – "0" при невиконанні цієї умови. Команди циклів застосовуються для організації програмних циклів, що використовують вміст регістра СХ як лічильник, який повинен ініціюватися числом повторень циклу. Обмежений діапазон адрес переходу викликає необхідність використання одночасно команди безумовного переходу, що передає управління як в межах поточного сегмента коду (передача управління в межах сегмента), так і за його межі (передача управління між сегментами). Більш того, на основі аналогічного підходу в процесорах типа Pentium появились машинні команди умовного пересилання в однобайтний регістр з назвами операцій CMOVxx, що заміщують при виконанні умови вміст однобайтного регістра першого операнда. Ці команди мають машинний код операції 0F4c, де с – напівбайт коду умови.
Команди процесорів SETxx (табл. 4.2), використовується для умовної установки даних результатів командами групи з шістнадцятковими кодами операції 0F9c, де с – напівбайт коду умови. Ці команди встановлюють однобайтний регістр або байт пам’яті в "1" при виконанні умови команди, заданої в мнемоніці, або в – "0" при невиконанні цієї умови. Більш того, на основі аналогічного підходу в процесорах типа Pentium появились машинні команди умовного пересилання в однобайтний регістр з назвами операцій CMOVxx, що заміщують при виконанні умови вміст однобайтного регістра першого операнда. Ці команди мають машинний код операції 0F4c, де с – напівбайт коду умови.
Використання команд умовних переходів для побудови розгалужень
Для реалізації на мові Асемблера умовних операторів мов програмування високого рівня в мнемоніках команд переходів буквами А і В позначають “вище” і “нижче”. Вони призначені для використання при порівнянні величин без знаків, а буквами G і H – “більше” і “менше” – для порівняння значень зі знаками.
Використання команд умовних переходів для побудови циклів
Команди циклів застосовуються для організації програмних циклів, що використовують вміст регістра СХ як лічильник, який повинен ініціюватися числом повторень циклу. Обмежений діапазон адрес переходу викликає необхідність використання одночасно команди безумовного переходу, що передає управління як в межах поточного сегмента коду (передача управління в межах сегмента), так і за його межі (передача управління між сегментами).
