Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Опорний конспект лекцій_ Асемблер.Docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
506.89 Кб
Скачать
      1. Команди зсуву

Всі команди зсуву переміщають біти в полі операнду вліво або вправо, в залежності від коду операції. Всі команди мають однакову структуру:

код операнд, лічильник_зсувів

Кількість зсовуваних розрядів, що задається в лічильник_зсувів, може задаватися двома способами:

o статично; задається фіксоване значення з допомогою операнда;

o динамічно; заноситься значення лічильник_зсувів у регістр cl перед виконанням команди зсуву (значення в діапазоні 0-31).

Всі команди зсуву встановлюють прапор переносу cf. По мірі зсуву бітів за межі операндів, вони спочатку попадають у прапор переносу.

По принципу дії команди зсуву діляться на два типи:

o команди лінійного зсуву;

o команди циклічного зсуву.

      1. Лінійний зсув

Команди лінійного зсуву працюють по наступному алгоритму:

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. Схема роботи команд лінійного арифметичного зсуву

      1. Циклічний зсув

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

  • команди простого циклічного зсуву;

  • команди циклічного зсуву через прапор переносу.

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