Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга_Вычисл техн и микропроц_2 автора_130709.doc
Скачиваний:
9
Добавлен:
07.05.2019
Размер:
5.26 Mб
Скачать

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

Вхідний контроль:

  1. Які ознаки результату, що формуються у МПС фірми Intel, Ви знаєте?

  2. В якому випадку формується ознака ZF?

  3. Яким чином формується ознака знаку результату SF?

  4. Чим відрізняється формування ознак перенесення CF і переповнення OF?

  5. Наведіть приклад реалізації умовного переходу будь-якою мовою високого рівня.

  6. Наведіть приклад реалізації безумовного переходу будь-якою мовою високого рівня.

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

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

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

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

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

JMP мітка.

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

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

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

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

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

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

пп.

Дія

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

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

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

1

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

JZ ADDR

JE ADDR

ZF=1

2

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

JNZ ADDR

JNE ADDR

ZF=0

3

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

JS ADDR

SF=1

4

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

JNS ADDR

SF=0

5

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

JO ADDR

OF=1

Продовження табл. 9.4

п.п

Дія

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

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

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

6

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

JNO ADDR

OF=0

7

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

JP ADDR

JPE ADDR

PF=1

8

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

JNP ADDR

JPO ADDR

PF=0

9

Перейти, якщо вище (без знака)

JА ADDR

CF=0, ZF=0

10

Перейти, якщо нижче (без знака)

JNА ADDR

CF=1, ZF=1

11

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

JАE ADDR

CF=0

12

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

JBE ADDR

CF=1, ZF=1

13

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

JB ADDR

JNAE ADDR JC ADDR

CF=1

14

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

JNBE ADDR

JNB ADDR

JNC ADDR

CF=0

15

Перейти, якщо є перенесення/позика

JC ADDR

CF=1

16

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

JNC ADDR

CF=0

17

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

JL ADDR

JNGE ADDR

((CF) XOR(OF))=1

18

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

JNL ADDR

JGE ADDR

((CF) XOR(OF))=0

Закінчення табл. 9.4

п.п

Дія

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

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

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

19

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

JLE ADDR

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

20

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

JNLE ADDR

JG ADDR

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

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

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

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

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

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

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

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

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

; регістра ВХ

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

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

; У нашому випадку умовний перехід не

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

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

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

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

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

; 1234Н

; 5678Н

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

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

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

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

М5: NOP

Команди виклику і повернення з підпрограми

CALL (CALL) – команда виклику підпрограми (процедури). Може відповідати близькому або далекому переходу до підпрограми, в залежності від початкової адреси розміщення підпрограми. При зверненні до підпрограми в стеку зберігається адреса повернення до основної програми (адреса комірки пам’яті в якій розміщується команда CALL).

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

CALL ADDR.

Адреса переходу до підпрограми може задаватися міткою, вмістом регістра або комірки пам’яті.

Мітка (вміст регістра або комірки пам’яті) може відповідати зміщенню в поточному сегменті команд, куди передається управління. При цьому змінюється лише вміст EIP/IP. Якщо здійснюється далекий перехід, то змінюється вміст EIP/IP і вміст регістра CS.

RET (RETurn)команда повернення з підпрограми до основної програми.

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

RET.

Команда відновлює вміст регістра EIP/IP, шляхом завантаження із стека, значення збереженого при виконанні команди CALL.

Команди виклику і повернення з підпрограми не змінюють значення регістра ознак.