- •Введение.
- •Лекция 1. Архитектура эвм Понятие архитектуры эвм.
- •Архитектура фон Неймана.
- •Лекция 2. Микропроцессор. Характеристики микропроцессора. Структура универсального микропроцессора.
- •Характеристики процессора
- •Лекция 3. Организация памяти. Модели памяти.
- •Режимы работы микропроцессора
- •Лекция 4. Модели памяти.
- •Сегментированная модель памяти.
- •Формирование линейного адреса в реальном режиме.
- •Формирование линейного адреса в защищенном режиме
- •Страничная модель памяти
- •Лекция 5. Типы данных. Форматы команд. Форматы и типы данных
- •Формат машинной команды
- •Лекция 6. Архитектура мп 8086. Программная модель микропроцессора.
- •Лекция 7. Архитектура 32-разрядного универсального микропроцессора ia32
- •Лекция 8. Методы адресации
- •Лекция 9. Структура машинной команды.
- •Лекция 10. Структура программы на ассемблере.
- •Лекция 11. Система команд микропроцессора 8086. Команды пересылки данных
- •Команды пересылки данных
- •Команды преобразования типов
- •Команды преобразования данных.
- •Xlat [адрес_таблицы_перекодировки]
- •Лекция 12. Целочисленные арифметические команды двоичной арифметики
- •Команда сравнения как команда с арифметическим принципом действия
- •Лекция 13. Команды манипулирования битами
- •Логические команды
- •Команды сдвига
- •Коп операнд, счетчик_сдвигов
- •Команды линейного сдвига
- •Команды циклического сдвига
- •Дополнительные команды сдвига
- •Лекция 14. Команды передачи управления
- •Команда безусловного перехода
- •Команды условного перехода
- •Организация циклов
- •Лекция 15. Стек
- •Работа стека
- •Управление стеком
- •Доступ к элементам стека
- •Лекция 16. Модульное программирование. Процедуры Концепция модульного программирования
- •Понятие "процедура"
- •Описание процедуры
- •Команда вызова процедуры. Команда возврата управления
- •Организация интерфейса с процедурой
- •Возврат результата из процедуры
- •Лекция 18. Цепочки
- •Синтаксис цепочечных команд
- •Префиксы повторения
- •Цепочечные индексные регистры
- •Направление обработки цепочки
- •Пересылка цепочек
- •Сравнение цепочек
- •Поиск в цепочках
- •Загрузка цепочек
- •Запись данных в цепочку. Заполнение памяти
- •Лекция 19. Массивы
- •Описание и инициализация массива в программе
- •Доступ к элементам массива
- •Двухмерные массивы
- •Лекция 20. Структуры
- •Описание шаблона структуры
- •Определение данных с типом структуры
- •Ссылки на поля структур
- •Использование структурированных переменных
- •Лекция 21. Расширенные возможности современных микропроцессоров Архитектурные особенности
- •Дополнительные режимы адресации
- •Использование средств 32-разрядных процессоров в программировании
- •Лабораторный практикум Лабораторная работа №1. Этапы создания программы на ассемблере. Отладчик Turbo Debugger
- •Лабораторная работа №2. Команды пересылки данных. Арифметические команды
- •Задачи для самостоятельного решения
- •Лабораторная работа №3 . Команды для работы с битами.
- •Демонстрационные примеры
- •Задачи для самостоятельного решения
- •Лабораторная работа №4. Команды передачи управления
- •Лабораторная работа №5. Прерывания.
- •Демонстрационные примеры
- •Задачи для самостоятельного решения
- •Лабораторная работа №6. Модульное программирование. Подпрограммы
- •Задачи для самостоятельного решения
- •Лабораторная работа №7. Стек.
- •Лабораторная работа №8 . Массивы
- •Задачи для самостоятельного решения
- •Лабораторная работа №9. Цепочки
- •Демонстрационные примеры.
- •Задачи для самостоятельного решения
- •Лабораторная работа №10. Структуры
- •Демонстрационные примеры.
- •Лабораторная работа №11. Файлы
- •Демонстрационные примеры
- •Задачи для самостоятельного решения
- •Литература
Команды сдвига
Команды этой группы также обеспечивают манипуляции над отдельными битами операндов, но иным способом, чем логические команды, рассмотренные выше. Все команды сдвига перемещают биты в поле операнда влево или вправо в зависимости от кода операции.
Все команды сдвига имеют одинаковую структуру:
Коп операнд, счетчик_сдвигов
Как видите на месте второго операнда располагается значение счетчика сдвигов. Количество сдвигаемых разрядов - счетчик_сдвигов может задаваться двумя способами:
статически, что предполагает задание фиксированного значения с помощью непосредственного операнда;
динамически, что означает занесение значения счетчика сдвигов в регистр CL перед выполнением команды сдвига.
Значение счетчика сдвигов должно быть целым числом без знака, да к тому же и лежать в разумных пределах (в последних публикациях указывается ограничение, равное 31. Правда, говорится, что оно может быть и большим, до 255, но команды сдвига воспринимают из этого значения- источника только младшие 5 двоичных разрядов).
Все команды сдвига устанавливают флаг переноса cf.
По мере сдвига битов за пределы операнда они сначала попадают на флаг переноса, устанавливая его равным значению очередного бита, оказавшегося за пределами операнда. Куда этот бит попадет дальше, зависит от типа команды сдвига и алгоритма программы.
По принципу действия команды сдвига можно разделить на два типа:
команды линейного сдвига;
команды циклического сдвига.
Команды линейного сдвига
К командам этого типа относятся команды, осуществляющие сдвиг по следующему алгоритму:
очередной “выдвигаемый” бит устанавливает флаг cf;
бит, вводимый в операнд с другого конца, имеет значение 0;
при сдвиге очередного бита он переходит во флаг cf, при этом значение предыдущего сдвинутого бита теряется!
Команды линейного сдвига делятся на два подтипа:
команды логического линейного сдвига;
команды арифметического линейного сдвига.
SHL операнд, счетчик_сдвигов -логический сдвиг влево
– каждый бит операнда сдвигается влево на количество битов, определяемое значением счетчик_сдвигов. Освобождаемые позиции в младших разрядах заполняются нулями. Если представить эту операцию как серию сдвигов на 1 позицию, то старший разряд перед последним сдвигом попадает во флаг CF.
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
CF
SHR операнд, счетчик_сдвигов - логический сдвиг вправо
– каждый бит операнда сдвигается вправо на количество битов, определяемое значением счетчик_сдвигов. Освобождаемые позиции в старших разрядах заполняются нулями. Если представить эту операцию как серию сдвигов на 1 позицию, то младший разряд перед последним сдвигом попадает во флаг CF.
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
CF
SАL операнд, счетчик_сдвигов арифметический сдвиг влево
– каждый бит операнда сдвигается влево на количество битов, определяемое значением счетчик_сдвигов. Освобождаемые позиции в младших разрядах заполняются нулями. Знак операция не сохраняет, но устанавливает в 1 флаг CF, если изменяется знаковый разряд очередным сдвигаемым битом, поэтому на приведенной ниже иллюстрации команды связь с флагом обозначена прерывистой линией.
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
|
CF
SАR операнд, счетчик_сдвигов арифметический сдвиг вправо
– каждый бит приемника сдвигается влево на количество битов, определяемое значением счетчик_сдвигов. Команда сохраняет знак операнда-приемника, восстанавливая его после сдвига каждого очередного бита.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CF
Все описанные команды позволяют умножать (при сдвиге влево) или делить (при сдвиге вправо) значение источника на степени числа 2. При этом скорость выполнения команд сдвига намного больше, чем скорость операций умножения или деления.
