Смекни!
smekni.com

Отчет по преддипломной практике 6 (стр. 8 из 10)

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

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

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

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

DST - приемник данных:

#-количество битов, из которое происходит сдвиг;

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

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

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

Таблица 1.

Команда Описание
Команды перемещения
MOV DST. SRC Перемещение из SRC в DST
PUSH SRC Помещение из SRC в стек
POP DST Выталкивание слова из стека и помещение его в DST
XCHG DS1.DS2 Смена мест DS1 и DS2
LEA DST. SRC Загрузка действительного адреса SRC в DST
CMOV DST. SRC Условное перемещение
Арифметические команды
ADD DST, SRC Сложение SRC и DST
SUB DST. SRC Вычитание SRC из DST
MUL SRC Умножение ЕАХ на SRC (без учета знака)
IMUL SRC Умножение ЕАХ на SRC (с учетом знака)
DJV SRC Деление EDX:EAX на SRC (без учета знака)
IDV SRC Деление EDX:EAX на SRC (с учетом знака)
ADC DST. SRC Сложение SRC с DST и прибавление бита переноса
S88 DST. SRC Вычитание DST и перенос из SRC
INC DST Инкремент (прибавление 1) DST
DEC DST Декремент (вычитание 1) DST
NEG DST Отрицание DST (вычитание DST из 0)
Двоично-десятичные команды
DAA Десятичная коррекция
AAA Коррекция ASCII-кода для сложения
AAS Коррекция ASCII-кода для вычитания
AAM Коррекция ASCII-кода для умножения
AAD Коррекция ASCII-кода для деления
Логические команды
AND DST, SRC Логическая операция И над SRC и DST
OR DST. SRC Логическая операция ИЛИ над SRC и DST
XOR DST. SRC Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ над SRC и DST
NOT DST Замещение DST дополнением до 1
Команды обычного и цикличесхого сдвига
SAL/SAR DST. # Сдвиг DST влево/вправо на * бит
SHL/SHR DST. # Логический сдвиг OST влево/вправо на я бит
ROL/ROR OST, * Циклический сдвиг DST влево/вправо на # бит
ROL/ROR OST. ш Циклический сдвиг OST по переносу на * бит
Команды тестирования и сравнения
TSTSRC1.SRC2 Операнды логической операции И. установка флагов
CMP SRC1.SRC2 Установка флагов на основе разности SRC1 - SRC2
Команды передачи управления
JMP ADDR Переход к адресу
Jxx ADDR Условные перекоды на основе флагов
CALL ADDR Вызов процедуры по адресу
RET Выход из процедуры
IRET Выход из прерывания
LOOPkx продолжение цикла до выполнения определенного условия
INT ADDR Программное прерывание
INTO Прерывание, если установлен бит переполнения
Команды обработки стокрок
LOOS Загрузка строки
STOS Сохранение строки
MOVS Перемещение строки
CMPS Сравнение двух строк
SCAS Сканирование строки
Команды для работы с /содами условий
STC Установка бита переноса в регистре EFLAGS
CLC Сброс бита переноса в регистре EFLAGS
CMC Дополнение бита переноса в регистре EFLAGS
STD Установка бита направления в регистре EFLAGS
CLO Сброс бита направления в регистре EFLAGS
STN Установка бита прерывания в регистре 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-разрядных операндов соответственно. Они различаются по коду операции и/или по одному биту в команде. В таблице1. приведены в основном 32-разрядные команды.

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

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

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

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

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

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

Команды Pentium 4 имеют ряд префиксов. Один из них (REP) мы уже упомя­нули. Префикс - это специальный байт, который может ставиться практически перед любой командой (подобно WIDE в IJVM). Как уже отмечалось, префикс REP заставляет команду, идущую за ним, повторяться до тех пор, пока регистр ЕСХ не примет значение 0. Префиксы REP2 и REPHZ заставляют команду выполняться

снова и снова, пока код выполнения условия Z не примет значение 1 или 0 соот­ветственно. Префикс LOCK резервирует шину для всей команды, чтобы можно бы­ло осуществлять межпроцессорную синхронизацию. Другие префиксы используются для того, чтобы команда работала и 16 или 32 разрядном формате При этом меняется не только длима операндов, но и полностью переопределяются ре­жимы адресации. Наконец, в Pentium 4 реализована сложная схема сегментации, в которой задействованы код, данные, стек и дополнительные сегменты (насле­дие 8088). Префиксы позволяют регламентировать применение тех или иных сегментов при обращении к памяти.