
- •Замковец с.В. Левин н.А. Попкова е.Я. Архитетура микропроцессоров
- •Удк 681.3.06
- •Классификация микропроцессоров по архитектуре
- •Архитектура микропроцессоров 80х86
- •2.1. Используемые типы данных
- •2.2. Регистры микропроцессоров
- •2.3. Режимы адресации
- •2.4. Управление стеками
- •2.5. Сегментная организация памяти
- •Система команд микропроцессоров
- •3.2.Команды передачи данных
- •Команды двоичной арифметики
- •Команды десятичной арифметики
- •Логические команды
- •Команды сдвигов
- •Команды обработки бит и байт
- •Команды обработки цепочек
- •Команды передачи управления
- •3.9.1. Команды условных переходов
- •3.9.2 Команды безусловных переходов
- •3.9.3 Команды вызова подпрограмм
- •3.9.4 Команды возврата из подпрограмм
- •4. Прерывания
- •4.1. Прерывания в реальном режиме
- •Защита по привилегиям
- •5.1. Определение уровней привилегий
- •Вычисления с плавающей запятой
- •6.1. Форматы чисел с плавающей запятой
- •6.3. Регистры сопроцессора
- •Mmx архитектура
- •7.1. Форматы представления данных
- •7.2. Арифметика с насыщением
- •7.3. Mmx регистры
- •7.4. Система команд mmx
- •1. Классификация микропроцессоров по архитектуре ... 8
- •2. Архитектура микропроцессоров 80х86 ………………...10
Команды передачи управления
Линейными программами обойтись невозможно и в разветвляющихся и циклических программах, а также при организации подпрограмм необходимо выполнять не следующую по порядку команду, а команду, которая находится в другой ячейке памяти. Специальные команды, которые изменяют указатели программной памяти – регистры CS:EIP, называются командами передачи управления.
Сегментная организация программной памяти определяет наличие двух разновидностей команд передачи управления. Передача управления внутри текущего сегмента кода называется внутрисегментной – при этом происходит изменение только регистра EIP, а адрес перехода задает смещение (байт, слово или двойное слово) внутри этого сегмента. Такая передача управления называется близкой или имеющей тип NEAR.
Передача управления за пределы текущего сегмента кода называется межсегментной – при этом необходимо изменить содержимое регистров CS и EIP, а адрес перехода задается полным 32- или 48-разрядным указателем селектор:смещение. Такая передача называется далекой или имеющей тип FAR, так как она позволяет перейти к любой ячейке адресного пространства памяти.
В ассемблерных программах адрес перехода задается просто меткой той команды, которой передается управление. Ассемблер в соответствии с типом NEAR или FAR формирует требуемую команду, а все детали передачи управления процессор реализует автоматически.
3.9.1. Команды условных переходов
Микропроцессоры семейства INTEL имеют много команд условных переходов Jcc, которые позволяют проверить любое отношение между знаковыми (больше – меньше) и беззнаковыми (выше – ниже) числами, а также состояние всех арифметических флагов, кроме флага AF. Данные команды позволяют проверить оба состояния всех флагов, а также несколько комбинаций состояния этих флагов. Если условие истинно, то управление передается по адресу перехода путем прибавления к содержимому EIP значения смещения imm8/16/32, которое рассматривается как знаковое число для возможности изменения значения EIP как в сторону увеличения, так и в сторону уменьшения его значения, а если условие ложно, то выполняется следующая по порядку команда. Данные команды имеют следующую форму:
Jcc imm8/16/32
Необходимо отметить, что большинство команд условных переходов имеют несколько мнемоник, которые позволяют более точно подчеркнуть содержательный смысл проверяемого условия.
В подгруппу команд условных переходов беззнаковых входят следующие команды. Команда JA/JNBE, используя флаги CF и ZF, реализует функцию “перейти, если выше/не ниже или равно”. Команда JAE/JNB осуществляет функцию “перейти, если выше или равно/не ниже”. Команда JB/JNAE, используя флаг CF, реализует функцию “перейти, если ниже/не выше или равно”, а команда JBE/JNA, используя флаги СF и ZF, осуществляет функцию “перейти, если ниже или равно/не выше”.
В подгруппу команд условных переходов знаковых входят следующие команды. Команда JG/JNLE, используя флаги SF, OF и ZF, реализует функцию “перейти, если больше/не меньше или равно”, а команда JGE/JNL, используя флаги SF и OF, реализует функцию “перейти, если больше или равно/не меньше”.
Команда JL/JNGE, используя флаги SF и OF, осуществляет функцию “перейти, если меньше/не больше или равно”, а команда JLE/JNG, используя флаги SF, OF и ZF, реализует функцию “перейти, если меньше или равно/не больше”.
Команда JO, используя флаг OF (OF=1), осуществляет функцию “перейти, если есть переполнение”, а команда JNO, используя тот же флаг (OF=0), реализует функцию “перейти, если нет переполнения”.
Команда JS, используя флаг SF (SF=1), реализует функцию “перейти, если есть знак (число отрицательное)”, а команда JNS, используя тот же флаг (SF=0), реализует функцию “перейти, если нет знака (число положительное)”.
В последнюю подгруппу команд условной передачи входят следующие команды. Команда JC, используя флаг CF (СF=1), реализует функцию “перейти, если есть перенос”, а команда JNC, используя тот же флаг (CF=0), реализует функцию “перейти, если нет переноса”.
Команда JE/JZ, используя флаг ZF (ZF=1), реализует функцию “перейти, если равно”, а команда JNE/JNZ, используя тот же флаг (ZF=0), реализует функцию “перейти, если не равно”. Команда JP, используя флаг паритета (PF=1), реализует функцию “перейти, если паритет четный”, а команда JNP, используя тот же флаг (PF=0), реализует функцию “перейти, если паритет нечетный”.
Две команды осуществляют условный переход, проверяя содержимое счетчика CX/ECX. Команда JCXZ реализует функцию ”перейти, если содержимое регистра CX=0”, а команда JECXZ реализует функцию “перейти, если содержимое регистра ECX=0”.
Описанные в данном разделе условия выполнения передачи управления, также используются в командах условной передачи данных CMOVcc и в командах условной установки SETcc, описанных в разделе 4.2.