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

 

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

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 – Команди умовних переходів

№ пп. Дія Мнемоніка та формат Альтернативна мнемоніка Умова, що перевіряється
Перейти, якщо нуль або дорівнює JZ ADDR JE ADDR ZF=1
Перейти, якщо не нуль або не дорівнює JNZ ADDR JNE ADDR ZF=0
Перейти, якщо знак установлено JS ADDR   SF=1
Перейти, якщо знак скинуто JNS ADDR   SF=0
Перейти, якщо є переповнення JO ADDR   OF=1

 


 

Продовження табл. 9.4
№ п.п Дія Мнемоніка та формат Альтернативна мнемоніка Умова, що перевіряється
Перейти, якщо немає переповнення JNO ADDR OF=0
Перейти, якщо паритет установлений JP ADDR JPE ADDR PF=1
Перейти, якщо паритет скинуто JNP ADDR JPO ADDR PF=0
Перейти, якщо вище (без знака) JА ADDR CF=0, ZF=0
Перейти, якщо нижче (без знака) JNА ADDR CF=1, ZF=1
Перейти, якщо вище/ або дорівнює (без знака) JАE ADDR CF=0
Перейти, якщо нижче/ або дорівнює (без знака) JBE ADDR CF=1, ZF=1
Перейти, якщо нижче/не вище або дорівнює (без знака) JB ADDR JNAE ADDR JC ADDR CF=1
Перейти, якщо не нижче/ вище або дорівнює (без знака) JNBE ADDR JNB ADDR JNC ADDR CF=0
Перейти, якщо є перенесення/позика JC ADDR CF=1
Перейти, якщо перенесення/позики немає JNC ADDR CF=0
Перейти, якщо менше/ не більше або дорівнює ( зі знаком) JL ADDR JNGE ADDR ((CF) XOR(OF))=1
Перейти, якщо не менше/ більше або дорівнює ( зі знаком) JNL ADDR JGE ADDR ((CF) XOR(OF))=0

 


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

№ п.п Дія Мнемоніка та формат Альтернативна мнемоніка Умова, що перевіряється
Перейти, якщо менше або дорівнює/не більше (зі знаком) JLE ADDR ((SF) XOR(OF)OR(ZF))=1
Перейти, якщо не менше або дорівнює/більше (зі знаком) 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