II. БАЗОВАЯ РЕГИСТРОВАЯ АРХИТЕКТУРА ПРОЦЕССОРОВ СЕМЕЙСТВА Х86.
В целом, регистровая модель процессоров семейства Х86 включает в себя следующие группы регистров.
1. Основные пользовательские регистры – 16 регистров.
2. Системные регистры – 17 регистров.
3. Регистры блока обработки чисел с плавающей запятой (регистры FPU) – 12 регистров.
4. Регистры блока обработки пакетов чисел с плавающей запятой регистры SSE) – 9 регистров (.
5. Служебные или модельно-специфические (MSR – Model-SpecificRegisters) регистры, которые определяются конкретной моделью процессора. Они служат для тестирования кэш-памяти, содержат специфическую информацию о процессе выполнения программы (количество декодированных команд, полученных запросов прерывания, число загрузок в кэш-память и т.п.), а также для выполнения некоторых других функций. Таких регистров уже в микропроцессорах серии Pentium насчитывалось более 80 и, судя по всему, в микропроцессорах микроархитектур Intel Core и Nehalem их еще больше.
Мы рассмотрим только первые две группы, наиболее значимые для дальнейшего понимания основных принципов функционирования микропроцессоров семейства Х86.
1. Пользовательские регистры
Состав пользовательских регистров МП семейства Х86 приведен на рис.II.1. На рисунке выделены 16 разрядные регистры, используемые в первых моделях МП этого семейства (8086, 80186 и 80286). Пользовательские регистры подразделяются на:
- регистры общего назначения (РОН);
- сегментные регистры;
- регистр указатель инструкций;
- регистр флагов.
Регистры общего назначения
Восемь 32-битных регистров общего назначения используются для текущего хранения данных и адресов. Буква E в названии регистров означает «расширенный» (Extended). Отметим, что для всех РОН допускается адресация в командах их младших 16-битных половин, как AX, BX, CX, DX, SP, BP, SI, DI. Кроме того, в первых четырех РОН отдельно адресуются как младшие (Low), так и старшие байты (High) этих регистров. Таким образом, в программах также можно указывать, по отдельности, имена регистров AL, BL, CL, DL и AH, BH, CH, DH. Это сделано для возможности использования программ, разработанных для младших моделей процессоров семейства Х86. Таким образом, первые четыре регистра РОН позволяют процессору легко оперировать байтами, словами и двойными словами. Однако, старшие половины регистров EAX, EBX, ECX, EDX, отдельно адресовать нельзя. РОН участвует в командах операций с данными, а также применяется при использовании различных режимах адресации. При этом, в старших моделях семейства, начиная с МП 80386, все первые четыре РОН можно использовать для адресации операндов, как в качестве базовых, так и в качестве индексных регистров.
Вместе с тем, каждый из регистров общего назначения в некоторых командах выполняет специальные функции, что нашло отражение и в названиях регистров. Рассмотрим эти специальные функции РОН более подробно.
EAX/AX/AL – регистр аккумулятор (Accumulator). Этот регистр наиболее часто используется для хранения промежуточных данных, поскольку многие команды оперируют данными в регистре аккумуляторе несколько быстрее, чем в других регистрах. Кроме того, при операциях умножения/деления, множимое/делимое всегда содержится в аккумуляторе до выполнения самой операции, а после операции в нем запоминается произведение/частное. Причем, при умножении байтовых операндов, множимое хранится в регистре AL, а произведение – в регистре AX. При умножении слов, множимое хранится в регистре AX, а произведение – в регистре EAX. При умножении двойных слов, множимое хранится в регистре EAX, а произведение запоминается в двух регистрах: младшие два байта – в регистре EAX, а старшие два байта – в регистре EDX.
1. Регистры общего назначения
2. Указатель инструкции (IP) и регистр флагов (FLAGS)
3. Сегментные регистры
|
|
Рис. II.1. Пользовательские регистры процессоров семейства Х86.
Что касается операции деления то, прежде всего, заметим, что в самом CPU, операция деления, осуществляется только как целочисленное деление со знаком или без знака. (Все операции с вещественными числами осуществляются в арифметическом сопроцессоре). При делении слова, делимое всегда располагается в регистре AX. При этом после операции, частное находится в регистре AL, а остаток – в регистре AH. При делении двойного слова, старшие два байта делимого размещаются в регистре DX, а младшие два байта – в регистре AX. После операции, частное располагается в регистре AX, а остаток – в регистре DX. Наконец, при делении учетверенного слова (квадрослова), старшая часть (четыре байта) этого квадрослова размещается в регистре EDX, а младшая – в регистре EAX. После операции частное располагается в регистре EAX, а остаток – в регистре EDX.
При программно управляемом обмене информацией с периферийными устройствами и ввод, и вывод информации, также, осуществляется только через регистр-аккумулятор.
При реализации команд сканирования цепочек SCAS, сравнение элементов цепочек осуществляется также только с байтами, словами или двойными словами, размещенными, соответственно, в регистре AL, AX или EAX .
Кроме того, вся десятичная арифметика выполняется только с участием регистра AL.
EBX/BX – базовый регистр (Base). Применяется для указания базового (начального) адреса объекта данных в памяти, а также содержит базовый адрес таблицы в команде преобразования XLAT. В МП 8086…80286 является единственным базовым регистром при формировании эффективного адреса в сегменте DS.
ECX/CX/CL – регистр-счетчик (Counter). Участвует в качестве счетчика в некоторых командах, которые осуществляют повторяющиеся операции (число которых предварительно записывается в регистр CX/CL), например, при организации циклов, при сдвиговых операциях или при операциях с цепочками (строками).
EDX/DX - регистр данных (Data). Наиболее часто привлекается для хранения промежуточных данных, а также в командах умножения и деления (совместно с аккумулятором). Кроме того, в командах ввода/вывода, при числе портов, превышающем 256, когда приходиться использовать косвенную адресацию, регистр DX содержит адрес порта, к которому производится обращение.
ESP/SP – указатель стека (Stack Pointer). Этот регистр неявно используется в командах PUSH (включение в стек) и POP (извлечение из стека), а также в других стековых операциях, которые процессор автоматически выполняет при обработке прерываний и особых случаев. Кроме того, он используется при исполнении команд CALL (вызов подпрограммы), RET (возврат из подпрограммы) и IRET (возврат из подпрограммы обслуживания прерывания). Регистр ESP/SP адресует вершину стека в текущем сегменте стека.
EBP/BP – указатель базы(Base Pointer). Используется как базовый регистр при формировании эффективного адреса, в случае необходимости произвольного доступа к объектам данных, находящихся в стековой области памяти, например к параметрам подпрограмм.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.