- •Архітектура і система команд мікропроцесорів
- •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 недопустиме ім’я регістра
Команди зсуву
Всі команди зсуву переміщають біти в полі операнду вліво або вправо, в залежності від коду операції. Всі команди мають однакову структуру:
код операнд, лічильник_зсувів
Кількість зсовуваних розрядів, що задається в лічильник_зсувів, може задаватися двома способами:
o статично; задається фіксоване значення з допомогою операнда;
o динамічно; заноситься значення лічильник_зсувів у регістр cl перед виконанням команди зсуву (значення в діапазоні 0-31).
Всі команди зсуву встановлюють прапор переносу cf. По мірі зсуву бітів за межі операндів, вони спочатку попадають у прапор переносу.
По принципу дії команди зсуву діляться на два типи:
o команди лінійного зсуву;
o команди циклічного зсуву.
Лінійний зсув
Команди лінійного зсуву працюють по наступному алгоритму:
o черговий біт, що висовується, встановлює прапор cf;
o біт, який вводиться з другого кінця, має значення 0;
o при зсуві чергового біта він переходить у прапор cf, при цьому значення попереднього зсунутого біта втрачається.
Команди лінійного зсуву діляться на два підтипи:
o логічного лінійного зсуву; o арифметичного лінійного зсуву. Команди логічного лінійного зсуву:
shl операнд, лічильник_зсувів – (Shift Logical Left) – логічний зсув вліво. Вміст операнда зсовується вліво на кількість бітів, що визначаються значенням лічильник_зсувів. Справа вписуються нулі.
shr операнд, лічильник_зсувів – (Shift Logical Right) – логічний зсув вправо. Вміст операнда зсовується вправо на кількість бітів, що визначаються значенням лічильник_зсувів. Зліва вписуються нулі.
Рис.5.2. Схеми роботи команд лінійного зсуву
Команди арифметичного лінійного зсуву відрізняються від команд логічного зсуву роботою із знаковим розрядом операнда.
sal операнд, лічильник_зсувів (Shift Arithmetic Left) – арифметичний зсув вліво. Вміст операнда зсовується вліво на кількість бітів лічильник_зсувів. Справа, а позицію молодшого біта, вписуються нулі. Команда sal не зберігає знак, але встановлює прапор cf у випадку зміни знака черговим бітом, що висовується.
sar операнд, лічильник_зсувів (Shift Arithmetic Right) - арифметичний зсув вправо. Вміст операнда зсовується вправо на кількість бітів, що визначається значенням лічильник_зсувів. Зліва в операнд вписуються нулі. Команда зберігає знак, відновлюючи його після зсуву кожного чергового біта.
Рис. 5.3. Схема роботи команд лінійного арифметичного зсуву
Циклічний зсув
Команди циклічного зсуву зберігають значення зсовуваних бітів. Є два типи команд:
команди простого циклічного зсуву;
команди циклічного зсуву через прапор переносу.
rol операнд, лічильник зсувів (Rotate Left) – циклічний зсув вліво. Вміст операнда зсовується вліво на кількість біт, що визначається операндом лічильник зсуву. Зсовувані біти записуються в той же операнд справа і в прапор cf.
ror операнд, лічильник зсувів (Rotate Right) – циклічний зсув вправо. Вміст операнда зсовується вправо на кількість біт, що визначається операндом лічильник зсуву. Зсовувані біти записуються в той же операнд зліва і в прапор cf.
Рис. 5.4. Команди простого циклічного зсуву
Команди циклічного зсуву через прапор cf відрізняються від команд простого циклічного зсуву тим, що зсовуваний біт не зразу попадає в операнд, а записується спочатку у прапор переносу cf.
rcl операнд, лічильник_зсувів (Rotate through Carry Left) – циклічний зсув вліво через перенос. Вміст операнда зсовується вліво на кількість бітів, що визначається операндом лічильник_зсувів. Зсовувані біти почергово стають значенням прапора переносу cf;
rcr операнд, лічильник_зсувів (Rotate through Carry Right) – циклічний зсув вправо через перенос. Вміст операнда зсовується вправо на кількість бітів, що визначається операндом лічильник_зсувів. Зсовувані біти почергово стають значенням прапора переносу cf.
Рис. 5.5. Команди циклічного зсуву через прапор переноса cf
