
- •Содержание введение
- •Лабораторная работа № 1 Определение конфигурации и производительности пэвм программными средствами
- •Задание.
- •Лабораторная работа № 2 Представление информации в эвм
- •Задание.
- •Лабораторная работа № 3 Пользовательские регистры процессора, язык ассемблер, компоновщик и отладчик
- •Регистры общего назначения - регистры данных.
- •Регистры общего назначения - указательные и индексные регистры.
- •Сегментные регистры.
- •Указатель команды.
- •Регистр флагов.
- •Задание.
- •Лабораторная работа № 4 Режимы адресации информации
- •Непосредственная адресация.
- •Регистровая адресация.
- •Неявная адресация.
- •Прямая адресация.
- •Косвенная регистровая адресация.
- •Базовая или индексная адресация.
- •Базово-индексная адресация.
- •Относительная базово-индексная адресация.
- •Задание.
- •Лабораторная работа № 5 Структура команд процессора
- •Задание.
- •ЛаборатОрНая работа № 6 Регистр флагов процессора
- •Команды операций над флагами.
- •Команды передачи флагов.
- •Команды условных переходов.
- •Задание.
- •Приложение а. Машинные коды команд микропроцессоров i8086/88
- •Кодирование команд
- •Команды передачи данных
- •Арифметические команды
- •Логические команды
- •Команды манипуляции цепочками
- •Команды передачи управления
- •Команды управления процессом
- •Литература
- •Полетаев Игорь Алексеевич полетаева Ольга Александровна организация эвм
Команды операций над флагами.
Таблица 8. Команды операций над флагами.
Мнемоника |
Описание команды |
Действие |
CLC |
Сбросить флаг переноса |
0 → CF |
CMC |
Инвертировать флаг переноса |
1-CF → CF |
STC |
Установить флаг переноса |
1 → CF |
CLD |
Сбросить флаг направления |
0 → DF |
STD |
Установить флаг направления |
1 → DF |
CLI |
Запретить прерывания |
0 → IF |
STI |
Разрешить прерывания |
1 → IF |
Команды CLI и STI являются IOPL-чувствительными, то есть выполняющая их программа должна иметь текущий уровень привилегий, меньше или равный содержимому поля IOPL (только для Р-режима IA-32).
Команды передачи флагов.
Эта подгруппа содержит несколько простых команд, которые обеспечивают доступ к флагам процессора.
Команда LAHF загрузки флагов в регистр AH копирует младший байт регистра FLAGS (EFLAGS) во второй байт аккумулятора, где флаги можно изменить, проверить или сохранить. Эта команда была оставлена в системе команд для совместимости с i8080, и в программах для последующих моделей процессоров практически не применяется. Иногда ее можно использовать для условных переходов по таким комбинациям флагов, которые не предусмотрены в стандартных командах условных переходов.
Команда SAHF сохранения регистра AH во флагах, обратная предыдущей.
Команды PUSHF и POPF позволяют целиком включать в стек и извлекать из стека содержимое регистра FLAGS. Аналогично для 32-разрядного регистра EFLAGS используются команды PUSHFD и POPFD.
Команды условных переходов.
При сравнении двух чисел может возникнуть вопрос - является ли число 1111 1111 больше числа 0000 0000? Ответ может быть и положительным и отрицательным. Если числа считать беззнаковыми, то первое число 255 больше 0. Но если числа знаковые, то -1 меньше 0. Поэтому при сравнении знаковых чисел используют термины "меньше" и "больше", а при работе с беззнаковыми числами - "ниже" и "выше".
Следовательно, между двумя числами существуют отношения "равны", "выше", "ниже", "меньше" и "больше", и соответственно, противоположные им.
Все команды условных переходов производят передачу управления только в пределах текущего сегмента кода, если заданное в команде условие удовлетворяется. Переход реализуется путем прибавления находящегося в команде смещения к содержимому регистра IP (EIP).
В процессорах i8086/286 8-битное смещение обеспечивает диапазон перехода от -128 до +127 байт. В IA-32 наряду с таким допускается также полное 16- или 32-битное смещение, то есть переход в любую точку текущего сегмента кода.
Многие команды условного перехода имеют две мнемоники, подчеркивающие содержательный смысл проверяемого условия и введенные для удобства программистов (переход, связанный с переносом, имеет даже три мнемоники).
Все команды условных переходов сведены в табл. 8.
Таблица 8. Команды условных переходов.
Мнемоника |
Перейти, если |
Состояние флагов |
JA/JNBE |
Выше/не ниже или равно |
CF or ZF=0 |
JAE/JNB |
Выше или равно/не ниже |
CF=0 |
JB/JNAE |
Ниже/не выше или равно |
CF=1 |
JBE/JNA |
Ниже или равно/не выше |
CF or ZF=1 |
JC |
Есть перенос |
CF=1 |
JE/JZ |
Равно/нуль |
ZF=1 |
JG/JNLE |
Больше/не меньше или равно |
(SF xor OF) or ZF=0 |
JGE/JNL |
Больше или равно/не меньше |
SF xor OF=0 |
JL/JNGE |
Меньше/не больше или равно |
SF xor OF=1 |
JLE/JNG |
Меньше или равно/не больше |
(SF xor OF) or ZF=1 |
JNC |
Нет переноса |
CF=0 |
JNE/JNZ |
Не равно/не нуль |
ZF=0 |
JNO |
Нет переполнения |
OF=0 |
JNP/JPO |
Нет паритета/паритет нечетный |
PF=0 |
JNS |
Нет знака (положительный) |
SF=0 |
JO |
Есть переполнение |
OF=1 |
JP/JPE |
Есть паритет/паритет четный |
PF=1 |
JS |
Есть знак (отрицательный) |
SF=1 |
Арифметические флаги используются не только в командах условных переходов, но и во многих других. Например, флаг вспомогательного переноса применяется в командах коррекции для арифметических операций при работе с двоично-упакованными десятичными числами, флаг переноса – в командах при использовании многократной точности, во всех командах сдвигов и других.
Для работы с флагом направления существует целый класс команд – цепочечные команды. Простейших цепочечных команд семь, разберем команду пересылки.
Команда цепочечной пересылки имеет вид
MOVS <приемник>,<источник>
но на самом деле аргументы команды фиктивные, и указывают только на размер операндов – байт или слово, так как данные адресуются регистрами SI и DI. Поэтому при составлении программ в основном используют следующие эквивалентные обозначения этой команды:
MOVSB - для байта,
MOVSW - для слова.
Для IA-32 так же используется команда MOVSD – пересылка двойного слова. В зависимости от типа команды содержимое SI и DI увеличивается или уменьшается в зависимости от флага DF на 1, 2 или 4.
Чтобы облегчить передачу цепочек из одного сегмента в другой, операнд - получатель, адресуемый регистром DI (или EDI - для IA-32), всегда находится в сегменте ЕS. Замену сегмента можно использовать для операнда - источника, по умолчанию это DS.
Для еще большего сокращения объема программы и, соответственно, увеличения быстродействия, с цепочечными командами можно использовать префикс повторения REP, записываемый непосредственно перед командой и оказывающий воздействие только на нее.
Префикс REP, используя содержимое СХ как счетчик, каждый раз уменьшает его на 1, и повторяет команду до тех пор, пока содержимое регистра СХ не станет равно нулю. После этого будет выполняться следующая команда.