<<
>>

Команды процессора Pentium 4

В этом и следующих двух подразделах мы рассмотрим наборы команд трех машин: Pentium 4, UltraSPARC III и 8051. Каждая из них поддерживает базовые команды, обычно получаемые в результате работы компиляторов, а также дополнительные команды, которые используются редко или используются исключительно операционной системой.
Начнем с Pentium 4.

Команды Pentium 4 представляют собой причудливую смесь 32-разрядных команд, а также команд, появившихся еще в процессоре 8088. В табл. 5.9 приведены наиболее распространенные целочисленные команды, при этом используются следующие обозначения:

♦ SRC — источник данных;

♦ DST — приемник данных;

♦ # — количество битов, на которое происходит сдвиг;

♦ LV — количество локальных переменных.

Перечень далеко не полный, поскольку в него не вошли команды с плавающей точкой, команды управления, а также некоторые нечасто встречающиеся целочисленные команды (например, использование 8-разрядного байта для выполнения поиска по таблице).

Тем не менее таблица дает представление о том, какие действия может выполнять Pentium 4.

Многие команды Pentium 4 обращаются к одному или к двум операндам, которые находятся в регистрах или памяти. Например, бинарная команда ADD складывает два операнда, а унарная команда INC увеличивает значение одного операнда на 1. Некоторые команды имеют несколько похожих вариантов. Например, команды сдвига могут сдвигать слово либо вправо, либо влево, с учетом знакового бита или без учета. Большинство команд имеют несколько различных кодировок в зависимости от природы операндов.

Таблица 5.9. Наиболее распространенные целочисленные команды процессора Репйит 4
Команда Описание
Команды перемещения MOV DST, SRC PUSH SRC Перемещение из SRC в DST Помещение из SRC в стек
POP DST Выталкивание слова из стека и помещение его в DST
XCHG DS1, DS2

LEA DST, SRC

CMOV DST, SRC

Арифметические команды

ADD DST, SRC

SUB DST, SRC

MUL SRC

Смена мест DS1 и DS2

Загрузка действительного адреса SRC в DST

Условное перемещение

Сложение SRC и DST

Вычитание SRC из DST

Умножение ЕАХ на SRC (без учета знака)

IMULSRC Умножение ЕАХ на SRC (с учетом знака)
DIV SRC Деление EDX:EAX на SRC (без учета знака)
IDV SRC Деление EDX:EAX на SRC (с учетом знака)
ADC DST, SRC SBB DST, SRC INC DST Сложение SRC с DST и прибавление бита переноса Вычитание DST и перенос из SRC Инкремент (прибавление 1) DST
DEC DST Декремент (вычитание 1) DST

NEG DST Отрицание DST (вычитание DST из 0)

Двоично-десятичные команды

DAA Десятичная коррекция

ААА Коррекция ASCII-кода для сложения
AAS Коррекция ASCII-кода для вычитания
ААМ Коррекция ASCII-кода для умножения
AAD Коррекция ASCII-кода для деления
Логические команды AND DST, SRC OR DST, SRC XOR DST, SRC Логическая операция И над SRC и DST

Логическая операция ИЛИ над SRC и DST

Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ над SRC и DST

NOT DST Замещение DST дополнением до 1

Команды обычного и циклического сдвига

SAL/SAR DST, # Сдвиг DST влево/вправо на # бит

SHL/SHR DST, # ROL/ROR DST, # Логический сдвиг DST влево/вправо на # бит Циклический сдвиг DST влево/вправо на # бит

Р01_/В0В 08Т, # Циклический сдвиг 08Т по переносу на # бит

Команды тестирования и сравнения

ТЗТ 31301, 31302___________ Операнды логической операции И, установка флагов

Команда Описание

CMP SRC1, SRC2 Установка флагов на основе разности SRC1 - SRC2

Команды передачи управления

JMP ADDR Переход к адресу

Jxx ADDR Условные переходы на основе флагов
CALL ADDR Вызов процедуры по адресу
RET Выход из процедуры
IRET Выход из прерывания
LOOPxx Продолжение цикла до выполнения определенного условия
INT ADDR Программное прерывание
INTO Прерывание, если установлен бит переполнения
Команды обработки строк LODS Загрузка строки
STOS Сохранение строки
MOVS Перемещение строки
CMPS Сравнение двух строк

БСАБ Сканирование строки

Команды для работы с кодами условий

БТС Установка бита переноса в регистре ЕР1_АОв

CLC Сброс бита переноса в регистре EFLAGS
СМС Дополнение бита переноса в регистре EFLAGS
STD Установка бита направления в регистре EFLAGS
CLD Сброс бита направления в регистре EFLAGS
STI Установка бита прерывания в регистре EFLAGS
CLI Сброс бита прерывания в регистре EFLAGS
PUSHFD Помещение значения из регистра EFLAGS в стек
POPFD Выталкивание значения из стека в регистр EFLAGS
LAHF Загрузка АН из регистра EFLAGS
SAHF Сохранение АН в регистре EFLAGS
Прочие команды SWAP DST Изменение порядка следования байтов в DST
CWQ Расширение ЕАХ до EDX:EAX для деления
SWDE Расширение 16-разрядного числа в АХ до ЕАХ
ENTER SIZE, LV LEAVE Создание стекового фрейма с байтами размера Удаление стекового фрейма, созданного командой ENTER
NOP Пустая операция
HLT Останов
IN AL, PORT Перенос байта из порта в АЛУ
OUT PORT, AL WAIT Перенос байта из АЛУ в порт Ожидание прерывания

При выполнении команд источники данных (SRC) не изменяются, а приемники (DST) обычно изменяются. Существуют определенные правила, определяющие, что может быть источником, а что приемником, но здесь мы не будем о них говорить.

Многие команды имеют три варианта: для 8-, 16- и 32-разрядных операндов соответственно. Они различаются по коду операции и/или по одному биту в команде. В табл. 5.9 приведены в основном 32-разрядные команды.

Для удобства мы разделили команды на несколько групп. Первая группа содержит команды, которые перемещают данные между компонентами машины: регистрами, памятью и стеком. Вторая группа содержит арифметические команды для операций со знаком и без знака. При умножении и делении 64-разрядное произведение или делимое хранится в двух регистрах: ЕАХ (младшие биты) и EDX (старшие биты).

Третья группа включает двоично-десятичную арифметику. Здесь каждый байт рассматривается как два 4-разрядных полубайта. Каждый полубайт содержит 1 десятичный разряд (от 0 до 9). Комбинации битов от 1010 до 1111 не используются. Таким образом, 16-разрядное целое число может содержать десятичное число от 0 до 9999. Хотя такая форма хранения неэффективна, она устраняет необходимость преобразования десятичных входных данных в двоичные, а затем обратно в десятичные для вывода. Эти команды служат для выполнения арифметических действий над двоично-десятичными числами. Они широко используются в программах на языке COBOL.

Логические команды и команды сдвига манипулируют битами в слове или байте. Существует несколько комбинаций.

Следующие две группы связаны с проверкой, сравнением и осуществлением перехода в зависимости от полученного результата. Результаты проверки и сравнения хранятся в различных битах регистра EFLAGS. Символами Jxx обозначена группа команд, выполняющих условный переход в зависимости от результатов предыдущего сравнения (то есть в зависимости от битов в регистре EFLAGS).

В Pentium 4 есть несколько команд для загрузки, сохранения, перемещения, сравнения и сканирования символьных строк или слов. Перед этими командами может стоять специальный префиксный байт REP (repetition — повторение), который заставляет команду повторяться до тех пор, пока не будет выполнено определенное условие (например, пока регистр ЕСХ, значение которого уменьшается на 1 после каждого повторения, не станет равным 0).

Таким образом, различные действия (перемещение, сравнение и т. д.) могут производиться над произвольными блоками данных. Следующая группа команд управляет кодами условий.

В последнюю группу входят команды, которые не вошли ни в одну из предыдущих групп. Это команды перекодирования, управления, ввода-вывода и остановки процессора.

Команды Pentium 4 имеют ряд префиксов. Один из них (REP) мы уже упомянули. Префикс — это специальный байт, который может ставиться практически перед любой командой (подобно WIDE в IJVM). Как уже отмечалось, префикс REP заставляет команду, идущую за ним, повторяться до тех пор, пока регистр ЕСХ не примет значение 0. Префиксы REPZ и REPNZ заставляют команду выполняться снова и снова, пока код выполнения условия Z не примет значение 1 или 0 соответственно. Префикс LOCK резервирует шину для всей команды, чтобы можно было осуществлять межпроцессорную синхронизацию. Другие префиксы используются для того, чтобы команда работала в 16- или 32-разрядном формате. При этом меняется не только длина операндов, но и полностью переопределяются режимы адресации. Наконец, в Pentium 4 реализована сложная схема сегментации, в которой задействованы код, данные, стек и дополнительные сегменты (наследие 8088). Префиксы позволяют регламентировать применение тех или иных сегментов при обращении к памяти. К счастью, эта проблема для нас не слишком актуальна.

<< | >>
Источник: Таненбаум Э.. Архитектура компьютера. 5-е изд. 2007

Еще по теме Команды процессора Pentium 4:

  1. Определение команды.
  2. § 4.5. Деятельность команд в организации
  3. Признаки команды.
  4. Пример настройки и реабилитации в футбольной команде
  5. Работа с другими командами
  6. Четыре шага по созданию эффективной команды
  7. ШЕСТЬ СТУПЕНЕЙ НА ПУТИ СОЗДАНИЯ КОМАНДЫ.
  8. Кто становится лидером команды
  9. Создание деловой команды «Вероятно, я не лучший советчик в этом вопросе».
  10. Эд САЛЛИВАН. ВРЕМЯ — ДЕНЬГИ Создание команды разработчиков, программного обеспечения, 2001
  11. В. И. Юров. Assembler. Учебник для вузов. 2-е изд, 2003
  12. Кудинов Ю. И., Пащенко Ф. Ф., Келина А. Ю.. Практикум по основам современной информатики: Учебное пособие., 2011
  13. Ю. И. КУДИНОВ, Ф.Ф. ПАЩЕНКО, А. Ю. КЕЛИНА. ПРАКТИКУМ ПО ОСНОВАМ СОВРЕМЕННОЙ ИНФОРМАТИКИ, 2011
  14. 9.3.1. Жизнь не стоит на месте
  15. Рекомендации Анти-шизоиду:
  16. Проведение интервью
  17. Степанов А. Н.. Архитектура вычислительных систем и компьютерных сетей, 2007
  18. Алистэр Коуберн. Каждому проекту своя методология, 1999
  19. ESTP и ESFP Экстраверты-сенсорики
  20. Прерывание обвинений: