
- •Міністерство освіти і науки, Молоді та спорту україни Львівський коледж Державного університету інформаційно-комунікаційних технологій
- •Інструкція до лабораторної роботи №6
- •Лабораторна робота № 6
- •Короткі теоретичні відомості
- •Команди передачі управління
- •Постановка завдання
- •Варіанти індивідуальних завдань
- •Методичні вказівки
- •Контрольні запитання
- •Джерела інформації
Міністерство освіти і науки, Молоді та спорту україни Львівський коледж Державного університету інформаційно-комунікаційних технологій
Навчальна дисципліна: Системне програмування
Лабораторія: Системного програмування
Спеціальність 5.05010201 Обслуговування комп’ютерних систем і мереж
|
Розглянуто |
|
|
Затверджую Заступник директора з НВР ____________ Плешівський Я.М. “_____” ____________ 20___ р. |
на засіданні циклової комісії _______________________________ Протокол № ____ від _______ 20__ р. Голова циклової комісії __________ |
Інструкція до лабораторної роботи №6
"Дослідження команд передачі управління"
Склав
викладач ____________
Бохонко Б.А.
Львів 20__
Лабораторна робота № 6
Тема: Команди і директиви мови Асемблер.
Мета роботи: Набути навичок застосування асемблерних команд передачі управління. Засвоїти алгоритми їх виконання.
Короткі теоретичні відомості
Команди передачі управління
До цієї групи відносяться команди, які дозволяють контролювати процес виконання програми. Це команди переходів. Розрізняють команди безумовного переходу і команди переходу за умовою.
Безумовний перехід. Базовою командою, що передає керування в іншу точку програми, є команда JMP. Команда має наступний синтаксис:
JMP label,
де label - це мітка, яка позначається іменем і знаком “:” після нього.
Ім’я мітки – це набір знаків, проте, ім’я не може починатися з цифри. Нижче приведені приклади правильних імен міток
label1: label2: a:
Мітка може записуватися в окремій стрічці тексту програми або перед командою, наприклад
x1: MOV AX, 1 x2: MOV AX, 2
Команда JMP забезпечує передачу керування як вперед так і назад. Проте, перехід (стрибок) може здійснюватися тільки в межах сегменту (65,535 байт).
Короткий перехід за умовою. На відміну від команди JMP, що забезпечує безумовний перехід, є команди, що забезпечують перехід тільки при виконанні певної умови. Такі команди поділяються на три групи. До першої груп відносяться команди, що аналізують один прапорець регістру стану. До другої групи відносяться команди, що порівнюють числа як знакові, і до третьої групи відносяться команди, що порівнюють числа як беззнакові.
В табл..1 наведені команди першої групи.
Треба відмітити, що є деякі команди, які мають різні назви, проте дизасемблюються в один і той самий машинний код, наприклад, команда JE дизасемблюється як JZ, команда JC дизасемблюється як JB. Різні назви використовують для кращого розуміння тексту програми.
Таблиця 1 – Команди переходу за умовою, що тестують один прапорець
-
Команда
Опис
Стан прапорця
Протилежна команда
JZ , JE
Перехід, якщо нуль (Zero) (рівно (Equal))
ZF = 1
JNZ, JNE
JC , JB, JNAE
Перехід, якщо перенос (Carry) (менше (Below), не більше рівно (Not Above Equal))
CF = 1
JNC, JNB, JAE
JS
Перехід, якщо знак (Sign)
SF = 1
JNS
JO
Перехід, якщо переповнення (Overflow)
OF = 1
JNO
JPE, JP
Перехід, якщо паритет парний (Parity Even)
PF = 1
JPO
JNZ , JNE
Перехід, якщо не нуль (Not Zero) (не рівно (Not Equal))
ZF = 0
JZ, JE
JNC, JNB, JAE
Перехід, якщо не перенос (NotCarry) (не менше (Not Below), більше рівно (Above Equal))
CF = 0
JC, JB, JNAE
JNS
Перехід, якщо не знак (Not Sign)
SF = 0
JS
JNO
Перехід, якщо не переповнення (Not Overflow)
OF = 0
JO
JPO, JNP
Перехід, якщо паритет непарний (Parity Odd) (немає паритету (No Parity))
PF = 0
JPE, JP
В табл.2 представлені команди переходів для знакових чисел.
Таблиця 2 – Команди переходів для знакових чисел
-
Команда
Опис
Стан прапорця
Протилежна команда
JE , JZ
Перехід, якщо рівно (Equal) (=) Перехід, якщо нуль (Zero)
ZF = 1
JNE, JNZ
JNE , JNZ
Перехід, якщо не рівно (Not Equal) (<>) Перехід, якщо не нуль (Not Zero)
ZF = 0
JE, JZ
JG , JNLE
Перехід, якщо більше (Greater) (>) Перехід, якщо не менше рівно (Not Less or Equal) (not <=).
ZF = 0 and SF = OF
JNG, JLE
JL , JNGE
Перехід, якщо менше (Less) (<). Перехід, якщо не більше рівно (Not Greater or Equal) (not >=).
SF <> OF
JNL, JGE
JGE , JNL
Перехід, якщо більше рівно (Greater or Equal) (>=). Перехід, якщо не менше (Not Less) (not <).
SF = OF
JNGE, JL
JLE , JNG
Перехід, якщо менше рівно (Less or Equal) (<=). Перехід, якщо не більше (Not Greater) (not >).
ZF = 1 or SF <> OF
JNLE, JG
Примітка: <> - цей знак означає «не рівно».
В табл. 3 представлені команди переходів для беззнакових чисел.
Таблиця 3 – Команди переходів для беззнакових чисел
-
Команда
Опис
Стан прапорця
Протилежна команда
JE , JZ
Перехід, якщо рівно (Equal) (=) Jump if Zero.
ZF = 1
JNE, JNZ
JNE , JNZ
Перехід, якщо не рівно (Not Equal) (<>) Перехід, якщо не нуль (Not Zero)
ZF = 0
JE, JZ
JA , JNBE
Перехід, якщо більше (Above) (>) Перехід, якщо не менше рівно (Not Below or Equal) (not <=).
CF = 0 and ZF = 0
JNA, JBE
JB , JNAE, JC
Перехід, якщо менше (Below) (<). Перехід, якщо не більше рівно (Not Above or Equal) (not >=) Перехід, якщо перенос (Carry)
CF = 1
JNB, JAE, JNC
JAE , JNB, JNC
Перехід, якщо більше рівно (Above or Equal) (>=). Перехід, якщо не менше (Not Below) (not <). Перехід, якщо не перенос (Not Carry)
CF = 0
JNAE, JB
JBE , JNA
Перехід, якщо менше рівно (Below or Equal) (<=) Перехід, якщо не більше (Not Above) (not >)
CF = 1 or ZF = 1
JNBE, JA