- •Структурная схема пэвм
- •3. Внешние устройства пэвм
- •Архитектура локальных сетей
- •Краткая классификация лвс
- •Способ управления
- •Архитектура сети
- •Методы доступа в локальных вычислительных сетях
- •1.2. Защита локальной сети
- •9.1. Структура и принципы работы ms-dos
- •1.1. Основные компоненты операционной системы
- •Драйверы
- •Внешние команды
- •Подготовка системной дискеты
- •Программа fdisk
- •Резидентные программы
- •1.2. Процесс загрузки операционной системы
- •1.3. Состав и общая схема работы ms-dos
- •Файловая система
- •Работа с файлами
- •Работа с каталогами
- •Командная строка
- •1.4.1.3. Защита от компьютерных вирусов Компьютерные вирусы и их методы классификации
- •Признаки заражения пк вирусом
- •Краткая сводка рабочих клавиш Norton Comander
- •Меню norton commander
- •Использование манипулятора "Мышь"
- •Перемещение окна
- •Изменение размера окна
- •Закрытие окна
- •Переключение между окнами
- •Упорядочение окон при помощи привязки
- •Чтобы расположить окна рядом, выполните следующие действия.
- •Чтобы развернуть окно по вертикали, выполните следующие действия.
- •Чтобы полностью развернуть окно, выполните следующие действия.
- •Управление файлами и папками
- •Чтобы предоставить общий доступ к папке или диску
- •Чтобы включить теневые копии общих папок
- •Чтобы изменить параметры теневых копий общих папок
- •Сведения о функциональных различиях
- •23. Команды пересылки данных на языке ассемблер
- •Команды пересылки данных общего назначения
- •Команды ввода-вывода в порт
- •Команды работы с адресами и указателями памяти
- •Команды преобразования данных
- •Xlat [адрес_таблицы_перекодировки]
- •Команды работы со стеком
- •25. Команды передачи управления
- •Безусловные переходы
- •Команда безусловного перехода jmp
- •Процедуры
- •Условные переходы
- •Команда сравнения cmp
- •Команды условного перехода и флаги
- •Команды условного перехода и регистр ecx/cx
- •Организация циклов
- •26. Организация циклов
- •1.6. Система прерываний
25. Команды передачи управления
На предыдущих уроках мы познакомились с некоторыми командами, из которых формируются линейные участки программы. Каждая из них в общем случае выполняет некоторые действия по преобразованию или пересылке данных, после чего микропроцессор передает управление следующей команде. Но очень мало программ работают таким последовательным образом. Обычно в программе есть точки, в которых нужно принять решение о том, какая команда будет выполняться следующей. Это решение может быть
безусловным — в данной точке необходимо передать управление не той команде, которая идет следующей, а другой, которая находится на некотором удалении от текущей команды;
условным — решение о том, какая команда будет выполняться следующей, принимается на основе анализа некоторых условий или данных.
Как вы помните, программа представляет собой последовательность команд и данных, занимающих определенное пространство оперативной памяти. Эта пространство памяти может быть либо непрерывным, либо состоять из нескольких фрагментов. На уроке 5 нами были рассмотрены средства организации фрагментации кода программы и ее данных на сегменты. То, какая команда программы должна выполняться следующей, микропроцессор узнает по содержимому пары регистров cs:(e)ip:
cs — сегментный регистр кода, в котором находится физический (базовый) адрес текущего сегмента кода;
eip/ip — регистр указателя команды, в котором находится значение, представляющее собой смещение в памяти следующей команды, подлежащей выполнению, относительно начала текущего сегмента кода.
Напомню, почему мы записываем регистры eip/ip через косую черту. Какой конкретно регистр будет использоваться, зависит от установленного режима адресации use16 или use32. Если указано use16, то используется ip, если use32, то используется eip.
Таким образом, команды передачи управления изменяют содержимое регистров cs и eip/ip, в результате чего микропроцессор выбирает для выполнения не следующую по порядку команду программы, а команду в некотором другом участке программы. Конвейер внутри микропроцессора при этом сбрасывается.
По принципу действия, команды микропроцессора, обеспечивающие организацию переходов в программе, можно разделить на четыре группы:
Команды безусловной передачи управления:
команда безусловного перехода;
вызова процедуры и возврата из процедуры;
вызова программных прерываний и возврата из программных прерываний.
Команды условной передачи управления:
команды перехода по результату команды сравнения cmp;
команды перехода по состоянию определенного флага;
команды перехода по содержимому регистра ecx/cx.
Команды управления циклом:
команда организации цикла со счетчиком ecx/cx;
команда организации цикла со счетчиком ecx/cx с возможностью досрочного выхода из цикла по дополнительному условию.
Безусловные переходы
Предыдущее обсуждение выявило некоторые детали механизма перехода. Команды перехода модифицируют регистр указателя команды eip/ip и, возможно, сегментный регистр кода cs. Что именно должно подвергнуться модификации, зависит:
от типа операнда в команде безусловного перехода (ближний или дальний);
от указания перед адресом перехода (в команде перехода) модификатора; при этом сам адрес перехода может находиться либо непосредственно в команде (прямой переход), либо в регистре или ячейке памяти (косвенный переход).
Модификатор может принимать следующие значения:
near ptr — прямой переход на метку внутри текущего сегмента кода. Модифицируется только регистр eip/ip (в зависимости от заданного типа сегмента кода use16 или use32) на основе указанного в команде адреса (метки) или выражения, использующего символ извлечения значения СчА — $;
far ptr — прямой переход на метку в другом сегменте кода. Адрес перехода задается в виде непосредственного операнда или адреса (метки) и состоит из 16-битного селектора и 16/32-битного смещения, которые загружаются, соответственно, в регистры cs и ip/eip;
word ptr — косвенный переход на метку внутри текущего сегмента кода. Модифицируется (значением смещения из памяти по указанному в команде адресу, или из регистра) только eip/ip. Размер смещения 16 или 32 бит;
dword ptr — косвенный переход на метку в другом сегменте кода. Модифицируются (значением из памяти — и только из памяти, из регистра нельзя) оба регистра, cs и eip/ip. Первое слово/двойное слово этого адреса представляет смещение и загружается в ip/eip; второе/третье слово загружается в cs.