Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
M1_5spPm.doc
Скачиваний:
2
Добавлен:
18.09.2019
Размер:
176 Кб
Скачать
☆

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

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

  1. Команди умовної передачі управління та їх використання на мові асемблера

Команди передачі управління змінюють вміст регістрів 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--;CX0

цикл

LOOPE/LOOPZ

CX--;CX0 and Zf0

цикл, якщо нуль

LOOPNE/LOOPNZ

CX--;CX0 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 – “більше” і “менше” – для порівняння значень зі знаками.

Використання команд умовних переходів для побудови циклів

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]