
- •Архітектура і система команд мікропроцесорів
- •1. Архітектура еом
- •1. 1. Поняття про архітектуру еом
- •1.2. Програмна модель мікропроцесора Intel Pentium III
- •Сегментні регістри
- •Регістри стану і керування
- •1.4. Організація пам’яті
- •Сегментована модель пам’яті
- •Формування фізичного адреса в реальному режимі
- •Типи даних
- •Формат команд
- •Типи переривань
- •Структура програми на асемблері
- •Синтаксис асемблера
- •Директиви сегментації
- •Прості типи даних
- •Системи числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Перевод із десяткової і шістнадцяткової системи у двійкову
- •Перевод із десяткової і двійкової у шістнадцяткову систему
- •Числа із знаком
- •Структура машинної команди
- •Способи задання операндів
- •Адресація пам’яті
- •Функціональна класифікація машинних команд
- •Команди обміну даними
- •Команди пересилання даних
- •Ввід-вивід в порт
- •Робота з адресами і вказівниками
- •Перетворення даних
- •Робота із стеком
- •Арифметичні цілочисельні команди
- •Цілі двійкові числа
- •Додавання двійкових чисел без знаку
- •Додавання двійкових чисел із знаком
- •Віднімання двійкових чисел без знаку
- •Віднімання двійкових чисел із знаком
- •Множення двійкових чисел без знаку
- •Множення двійкових чисел із знаком
- •Ділення двійкових чисел без знаку
- •Ділення двійкових чисел із знаком
- •Команди перетворення типів
- •4.2. Десяткові числа
- •Неупаковані bcd-числа
- •Упаковані bcd-числа
- •Логічні команди
- •Логічні команди
- •Команди зсуву
- •Лінійний зсув
- •Циклічний зсув
- •Додаткові команди зсуву
- •Команди передачі керування
- •Команди безумовного переходу;
- •Команди безумовного переходу
- •Процедури
- •Умовні переходи
- •Команда порівняння cmp
- •Команди умовного переходу і прапори
- •Команди умовного переходу і регістр ecxlcx
- •6.4. Організація циклів
- •Ланцюжкові команди
- •Пересилання ланцюжків
- •Порівняння ланцюжків
- •Сканування ланцюжків
- •Завантаження ланцюжків
- •Формування ланцюжків
- •Ввід-вивід елементів у порт
- •Складні структури даних
- •Доступ до елементів масиву
- •Двомірні масиви
- •8.2. Структури
- •Описання шаблона структури
- •Визначення даних з типом структури
- •Методи роботи із структурою
- •Об’єднання
- •Визначення екземпляру запису
- •Робота з записами
- •Макрозасоби мови асемблера
- •Макрокоманди
- •Макродирективи
- •Директиви while і rept
- •Директиви irp і irpc
- •Директиви умовної компіляції
- •Директиви компіляції по умові
- •Директиви if і ife
- •Директиви ifdef і ifndef
- •Директиви ifb і ifnb
- •Директиви ifidn, ifidni, ifdif і ifdifi
- •9.4. Директиви генерації помилок
- •%Out недопустиме ім’я регістра
Команди умовного переходу і прапори
Мнемонічне позначення деяких команд умовного переходу відображає назву прапора, з яким вони працюють. Перед позначенням прапора може стояти символ “n”. Якщо символа “n” нема, то перевіряється стан прапора і, якщо він дорівнює 1, робиться перехід на мітку. Якщо символ “n” присутній, то перехід на мітку здійснюється при стані прапора 0. Мнемокоди команд і прапори наведено в табл. 6.2.
Табл. 6.2
Команди умовного переходу і прапори
Назва прапора |
Номер біта в eflags/flags |
Команди умовного переходу |
Значення прапора для переходу |
прапор переносу cf |
1 |
jc |
cf=1 |
прапор парності pf |
2 |
jp |
pf=1 |
прапор нуля zf |
6 |
jz |
zf=1 |
прапор знака sf |
7 |
js |
sf=1 |
прапор переповнення of |
11 |
jo |
of=1 |
прапор переносу cf |
1 |
jnc |
cf=1 |
прапор парності pf |
2 |
jnp |
pf=1 |
прапор нуля zf |
6 |
jnz |
zf=1 |
прапор знаку sf |
7 |
jns |
sf=1 |
прапор переповнення of |
11 |
jno |
of=1 |
Команди умовного переходу і регістр ecxlcx
Регістр ecx/cx – виконує роль лічильника в командах керування циклами і при роботі з ланцюжками символів. З цим регістром зв’язана команда умовного переходу:
jcxz мітка_перехода (jump if cx is zero) – перехід якщо cx ноль.
jecxz мітка_перехода (jump Equal cx is zero) – перехід якщо ecx ноль.
Команда jcxz/jecxz може адресувати тільки короткі переходи на –128 або +127 байт від наступної за нею команди.
6.4. Організація циклів
Для полегшення програмування циклів є три команди:
loop мітка_перехода (Loop) – повторити цикл. Команда дозволяє організувати цикли, аналогічні до циклів for у мовах високого рівня. Робота команди полягає у наступному:
o декремент регістра ecx/cx;
o порівняння регістра ecx/cx з нулем;
якщо (ecx/cx) > 0, то керування передається на мітку перехода;
якщо (ecx/cx) = 0, то керування передається на наступну після loop команду.
loope/loopz мітка_перехода (Loop till cx <> 0 або zf=0) – повторити цикл, поки cx<>0 або
zf=0. Робота команди полягає у наступному: o декремент регістра ecx/cx; o порівняння регістра ecx/cx з нулем; o аналіз стану прапора нуля zf;
якщо (ecx/cx) > 0 і zf=1, то керування передається на мітку переходу;
якщо (ecx/cx) = 0 або zf=1, то керування передається на наступну після loop команду.
loopne/loopnz мітка_перехода (Loop till cx <> 0 або zf=1) – повторити цикл, поки cx<>0
або zf=1. Робота команди полягає у наступному:
o декремент регістра ecx/cx; o порівняння регістра ecx/cx з нулем; o аналіз стану прапора нуля zf;
якщо (ecx/cx) > 0 і zf=0, то керування передається на мітку перехода;
якщо (ecx/cx) = 0 або zf=1, то керування передається на наступну після loop команду.
Команди loope/loopz і loopne/loopnz дозволяють достроково вийти із циклу на основі аналізу прапора zf.
Недолік команд організації циклів loop, loope/loopz, loopne/loopnz в тому, що вони реалізовують тільки короткі переходи від –128 до +127. Для роботи із довгими циклами необхідно використовувати команди умовного переходу і команду jmp.