Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонов О.С., Хiхловська I.В. Обчислювальна тех...doc
Скачиваний:
15
Добавлен:
01.09.2019
Размер:
4.12 Mб
Скачать

9.3.4 Команди умовних та безумовних переходів

До групи таких команд відносяться команди, котрі можуть зробити перехід не до наступної за даною командою, а до команди, яка знаходиться у іншій комірці програмної пам’яті, адреса якої визначається адресою переходу. Сегментна організація програмної пам’яті визначає два основні різновиди команд передачі керування. Перехід у межах поточного сегмента коду (програми) називається внутрисегментним, близьким (тип near). При такому переході модифікується лише вміст програмного лічильника РС. Передавання керування за межі поточного сегмента називається далекою (тип far). Для його реалізації необхідно змінити вміст двох регістрів: програмного лічильника РС і сегментного регістру коду CS. Команди передачі керування підрозділяються на команди безумовних переходів, умовних переходів, викликів і повернення з підпрограм, команди переривань.

Команди безумовних переходів

При виконанні таких команд виконується зміна вмісту регістра РС або одночасно РС і CS. Команди такого типу мають довжину 2 – 5 байтів в залежності від типу переходу і довжини зміщення у команді, яким задається адреса переходу.

JMP (JuMP) – команда безумовного переходу

Команда має вигляд

JMP мітка

Мітка може відповідати 8-, 16- або 32-розрядному зміщенню відносно наступної за JMP команди. При цьому змінюється лише вміст EIP/IP. Якщо мітка у команді – символічний ідентифікатор комірки пам’яті (16- 32- або 48-розрядна адреса, то асемблер визначає його як адресу, по котрій необхідно зробити перехід. Така адреса може відповідати як близкому, так і далекому переходу.

Команди умовних переходів

При виконанні цих команд асемблер робить аналіз певних ознак результатів і по результатам аналізу здійснює або не здійснює передачу керування.

Jcc (Jump if condition) – команда умовного переходу.

Перелік команд умовного переходу і умов, які перевіряються, подано у таблиці 9.4.

Таблиця 9.4 – Команди умовних переходів

п/п

Дія

Мнемоніка та формат

Альтернативна мнемоніка

Умова,що перевіряється

1

2

3

4

5

1

Перейти, якщо нуль або дорівнює

JZ opr

ZF=1

2

Перейти, якщо не нуль або не дорівнює

JNZ opr

ZF=0

3

Перейти, якщо знак встановлено

JS opr

SF=1

4

Перейти, якщо знак скинуто

JNS opr

SF=0

5

Перейти, якщо є переповнення

JO opr

OF=1

6

Перейти, якщо немає переповнення

JNO opr

OF=0

7

Перейти, якщо паритет встановлений

JP opr

JPE

PF=1

8

Перейти, якщо паритет скинуто

JNP opr

JPO

PF=0

9

Перейти, якщо нижче/не вище або дорівнює (без знаку)

JB opr

JNAE

CF=1

10

Перейти, якщо не нижче/ вище або дорівнює (без знаку)

JNBE opr

JA

CF=0

11

Перейти, якщо менше/ не більше або дорівнює ( зі знаком)

JL opr

JNGE

((CF) XOR(OF))=1

12

Перейти, якщо не менше/ більше або дорівнює ( зі знаком)

JNL opr

JGE

((CF) XOR(OF))=0

13

Перейти, якщо менше або дорівнює/не більше (зі знаком)

JLE opr

((SF) XOR(OF)OR(ZF))=1

14

Перейти, якщо не менше або дорівнює/більше (зі знаком)

JNLE opr

JG

((SF) XOR(OF)OR(ZF))=0

Використання і пояснення роботи деяких команд наведено у наступній програмі:

M1: NOP ; команда NOP (No Operation) – немає

; операції, рядок помічено міткою М1

M2: NOP ; операції немає, рядок помічено міткою М2

M3: JMP M4 ; команда безумовного переходу на мітку М4

MOV AX,1234H ; завантаження до регістра АХ числа 1234Н

MOV BX,5678H ; завантаження до регістра ВХ числа 5678Н

CMP AX,BX ; порівняння вмісту регістра АХ з вмістом – ВХ

JZ M1 ; умовний перехід на мітку М1, якщо результат

; порівняння дорівнює 0 (операнди рівні). У

; нашому випадку не відбувається, тому що

; операнди не рівні і прапорець ZF скинуто у 0

JNS M2 ; умовний перехід на мітку М1, якщо результат

; порівняння додатний 0 (прапорець SF = 0). У

; нашому випадку не відбувається, тому що

; 1234Н

; 5678Н

; ВВВСН (прапорець SF = 1)

JLЕ M3 ; умовний перехід на мітку М3, якщо вміст

; операнда dst (приймач) менший за опреранд

; src (джерело). В нашій програмі відбувається.