2.1.1 Основные регистры
На рисунке 2.1 изображена структура основных регистров и их названия. Существует 8 регистров общего назначения (РОН), 6 сегментных регистров, регистр флагов, регистр указателя команд, а также системные регистры, регистры отладки и тестирования.
Регистры общего назначения (РОНы). Эти регистры используются в основном для выполнения арифметических операций и пересылки данных. К каждому РОНу можно обратиться как к 32-разрядному или как к 16-разрядному регистру. К некоторым регистрам можно обращаться как к 8-разрядным. Например, регистр ЕАХ является 32-разрядным, однако его младшие 16-разрядов называются регистром АХ. Старшие 8-разрядов регистра АХ называются АН, а младшие 8-разрядов – AL. 16-разрядные части индексных регистров и регистров-указателей обычно используются только при написании программ для реального режима адресации, т.е. для MS-DOS или её эмуляции в Windows.
Значение аббревиатур имён регистров:
Префикс E в начале имён регистров – expanded (расширенный).
Постфикс X в конце имён регистров означает, собственно, регистр.
AX – Accumulator (накопитель).
BX – Base register (регистр базы).
CX – Counter (счётчик).
DX – Data (данные).
AL – Accumulator low (младшая половина регистра AX).
AH – Accumulator high (старшая половина регистра AX).
BL – Base low (младшая половина регистра BX).
BH – Base high (старшая половина регистра BX).
CL – Counter low (младшая половина регистра CX).
CH – Counter high (старшая половина регистра CX).
DL – Data low (младшая половина регистра DX).
DH – Data high (старшая половина регистра DX).
SI – Source index (индекс источника). Содержит текущий адрес источника.
DI – Destination index (индекс получателя). Содержит текущий адрес приемника.
BP – Base pointer (указатель базы). Для произвольного доступа к данным внутри стека
SP – Stack pointer (указатель стека). Содержит указатель вершины стека.
CS – Code segment (сегмент кода).
DS – Data segment (сегмент данных).
ES – Extra Data segment (дополнительный сегмент данных).
FS – Extended Data segment (дополнительный сегмент данных).
GS – Extended Data segment (дополнительный сегмент данных).
SS – Stack segment (сегмент стека).
IP – Instruction pointer (указатель команд или счётчик команд).
F – Flags (регистр флагов).
GDTR – Global descriptor table register (регистр глобальной таблицы дескрипторов).
IDTR – Interruption descriptor table register (регистр таблицы дескрипторов прерываний).
TR – Task register (регистр задач).
LDTR – Local descriptor table register (регистр локальной таблицы дескрипторов).
DR – Debug register (регистр отладки).
TR – Test register (регистр тестирования).
CR – Control register (управляющий регистр).
Особенности использования регистров. При выполнении команд процессором часть регистров общего назначения имеют специальное предназначение.
Содержимое регистра ЕАХ автоматически используется при выполнении команд умножения и деления. Поскольку этот регистр обычно связан с выполнением арифметических команд, его часто называют расширенным регистром аккумулятора (expanded accumulator).
Регистр ЕСХ автоматически используется процессором в качестве счетчика цикла.
С помощью регистра ESP происходит обращение к данным, хранящимся в стеке. Стек – это системная область памяти, обращение к которой осуществляется по принципу FILO (First input – last output) "первым записали, последним прочитали". Этот регистр обычно никогда не используется для выполнения обычных арифметических операций и команд пересылки данных. Его часто называют расширенным регистром указателя стека (expanded stack pointer). Регистр ESP указывает на адрес вершины стека (адрес, куда будет заноситься следующая переменная командой PUSH).
Регистры ESI и EDI обычно используют для команд высокоскоростной пересылки данных из одного участка памяти в другой. Поэтому их иногда называют расширенными индексными регистрами источника и получателя данных (expanded source index и expanded destination index). Регистр ESI – адрес источника, и содержит адрес начала блока информации для операции "переместить блок" (полный адрес DS:ESI), а регистр EDI – адрес назначения (полный адрес ES:EDI).
Регистр EBP обычно используется компиляторами языков программирования высокого уровня для обращения к параметрам функции и для ссылок на локальные переменные, размещенные в стеке. Он не должен использоваться для выполнения обычных арифметических операций или для перемещения данных, за исключением случаев применения особых методик программирования опытными программистами. Его часто называют расширенным регистром указателя стекового фрейма (expanded frame pointer). Регистр ЕВР содержит адрес, начиная с которого в стек вносится или забирается информация (или "глубина" стека). Параметры функций имеют положительный сдвиг относительно ЕВР, локальные переменные – отрицательный сдвиг, а полный адрес этого участка памяти хранится в регистровой паре SS:EBP.
Регистр EIP хранит смещение (offset) адреса команды. Полный адрес на следующую исполняемую команду хранится в регистровой паре CS:ЕIP.
Регистры ESP, EBP, ESI, EDI хранят смещение адреса данных.
Сегментные регистры. Эти регистры используются в качестве базовых при обращении к заранее распределенным областям оперативной памяти, которые называются сегментами. Существует три типа сегментов и, соответственно, сегментных регистров:
кода (CS), в них хранятся только команды процессора, т.е. машинный код программы;
данных (DS, ES, FS и GS), в них хранятся области памяти, выделяемые под переменные программы и под данные;
стека (SS), в них хранится системная область памяти, называемая стеком, в которой распределяются локальные (временные) переменные программы и параметры, передаваемые функциям при их вызове.
Сегментные регистры загружаются селекторами сегментов, которые являются смещениями либо глобальной таблицы дескрипторов (GDT – Global Descriptor Table), либо локальной таблицы дескрипторов (LDT – Local Descriptor Table).
Биты сегментных регистров содержат следующую информацию:
0 – 1. RPL – Requested Privilege Level. Уровень запрашиваемых привилегий.
2. TI – Table Indicator. Бит таблицы индикаторов. Указывает процессору где искать указанный селектор. Если бит установлен, то процессор читает селектор из таблицы локальных дескрипторов. Если бит сброшен, то процессор читает селектор из таблицы глобальных дескрипторов.
3 – 15. В этих битах хранится индекс глобальной или локальной таблицы дескрипторов.
Регистр CS слишком мал для хранения сегмента кода, поэтому он должен быть установлен на исполнимый сегмент. Регистр SS слишком мал для хранения сегмента стека, поэтому он должен быть установлен на разрешённый по записи сегмент данных.
Уровень привилегий, установленный в сегментный регистр CS является уровнем привилегий запущенной программы, и называется текущим уровнем привилегий (CPL – Current privilege level). Сегментные регистры DS, ES, FS, GS предназначены для данных и должны быть установлены на сегмент данных с разрешением записи. Уровни привилегий, требуемые каждым из этих селекторов, должен быть больше, чем текущий уровень привилегий CPL.
С каждым из шести сегментных регистров связаны теневые регистры дескрипторов. В теневые регистры в защищённом режиме переписываются 32-разрядный базовый адрес сегмента, 20-разрядный предел и атрибуты (права доступа) из дескрипторных таблиц.
Регистр указателя команд. В регистре EIP хранится смещение относительно начала программы (offset) следующей выполняемой команды. В процессоре есть несколько команд, которые влияют на содержимое этого регистра. Изменение адреса, хранящегося в регистре ЕIP, вызывает передачу управления на новый участок программы.
Регистр флагов EF (EFLAGZ). Биты этого регистра называются флагами и отвечают либо за особенности выполнения некоторых команд CPU, либо отражают результат выполнения команд блоком ALU. Флаги регистра перечислены в таблице 2.1. Биты с 22 по 31 включительно – зарезервированы.
Таблица 2.1 Регистр флагов
21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13-12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
ID | VIP | VIF | AC | VM | RF | 0 | NT | IOPL | OF | DF | IF | TF | SF | ZF | 0 | AF | 0 | PF | 1 | CF |
Для анализа битов этого регистра предусмотрены специальные команды процессора. Говорят, что флаг установлен, когда бит флага равен 1, и что флаг сброшен, когда значение его бита равно 0. Кроме этого расширенный регистр EF по сравнению с регистром F содержит пять новых флагов.
Управляющие флаги. Состояние битов регистра EFLAGS, соответствующих управляющим флагам, программист может изменить с помощью специальных команд процессора. Эти флаги (DF, IF,TF) управляют процессом выполнения некоторых команд CPU:
8. TF – Trap flag. Флаг трассировки (пошагового режима). При его установке (TF=1) после выполнения каждой команды вызывается внутреннее прерывание INT 1, которое останавливает вычислительный процесс, давая возможность проверить содержимое регистров.
9. IF – Interrupt-enable flag. Флаг разрешения прерывания. При IF=1 разрешается выполнение маскированных аппаратных прерываний. При IF=0 – запрещается.
10. DF – Direction flag. Флаг управления направлением обработки массивов в строковых командах. При DF=1 индексные регистры SI, DI, которые принимают участие в строковых командах, автоматически декрементируются на количество байт операнда, осуществляя тем самым обработку строк с конца в начало. При DF=0 – инкрементируются, осуществляя обработку с начала в конец строки.
Флаги состояния. Эти флаги отражают различные признаки результата выполнения арифметических и логических команды CPU:
0. CF – Carry flag. Флаг переноса устанавливается в случае, если при выполнении беззнаковой арифметической операции получается число, разрядность которого превышает разрядность выделенного для него поля результата. В командах сдвига флаг CF фиксирует значение старшего бита.
2. PF – Parity flag. Флаг четности/паритета устанавливается при чётном количестве единиц в результате.
4. AF – Auxiliary Carry. Флаг дополнительного переноса/заёма из младшей тетрады в старшую (из третьего в четвёртый разряд). Используется в командах обработки 8-битных данных, чаще всего – двоично-десятичных чисел.
6. ZF – Zero flag. Флаг нуля устанавливается, если при выполнении арифметической или логической операции получается число, равное нулю (т.е. все биты результата равны 0).
7. SF – Sign flag. Флаг знака дублирует значение старшего бита результата. SF=0 для положительного результата, SF=1 для отрицательного.
11. OF – Overflow flag. Флаг переполнения, или) устанавливается в случае, если при выполнении арифметической операции со знаком получается число, разрядность которого превышает разрядность выделенного для него поля результата.
Флаги, добавленные в регистр EF:
12-13. IOPL – I/O Privilege Level. Флаг уровня привилегий ввода-вывода. Используется в защищенном режиме работы микропроцессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи.
14. NT – Nested task flag. Флаг вложенности задачи. Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую.
16. RF – Resume flag. Флаг возобновления. В режиме отладки единичное значение RF позволяет осуществить рестарт команды после прерываний. Используется совместно с регистрами точек отладочного останова.
17. VM – Virtual Mode flag. Флаг виртуального режима. Признак работы микропроцессора в режиме виртуального 8086. 1 – процессор работает в режиме виртуального 8086; 0 – процессор работает в реальном или защищенном режиме.
18. AC – Alignment Check. Флаг режима работы процессора, при котором происходит контроль выравнивания. Используется только на уровне привилегий 3. Если AC=1 и AM=1 (AM – бит в регистре управления CR0), то в случае обращения к операнду, не выровненному по соответствующему пределу (2 или 4 или 8) байт, будет вызвано исключение 17. Выравнивание операнда по пределам 2,4,8 означает, что адрес операнда кратен соответственно 2,4,8.
19. VIF – Virtual Interrupt Flag. Флаг разрешения прерывания в виртуальном режиме работы процессора.
20. VIP – Virtual Interrupt Pending. Флаг задержки прерывания в виртуальном режиме работы процессора.
21. ID – CPU Identification. Флаг идентификации процессора. Флаг может быть изменён, если процессор поддерживает команду CPUID.
В управляющих регистрах CR0-CR3 хранятся признаки состояния процессора, общие для всех задач. Регистр CR0 имеет следующие биты:
0. PE – Protection Enable. Флаг защищённого режима. Если PE=1, то режим работы процессора – защищённый.
1. MP – Mathematic present. Флаг наличия математического сопроцессора. Если MP=1, то математический сопроцессор присутствует.
2. EM – Emulate Numeric Extension. Флаг эмуляции команд над числами с плавающей запятой. Когда флаг установлен, то команды для работы с вещественными числами могут быть эмулированы программно.
3. TS – Task Switched. Флаг переключения задач. Флаг устанавливается после того, как задача переключена.
4. ET – Extension Type. Флаг типа расширения. Устанавливается, если присутствует арифметический сопроцессор 387 и выше.
5. NE – Numeric Error Enable. Флаг разрешения ошибки сопроцессора. Если флаг установлен, то в случае ошибки в сопроцессоре генерируется исключительная ситуация 16.
16. WP – Write Protect. Флаг защиты от записи. Если флаг установлен, то ядру операционной системы назначаются страницы памяти в режиме read-only (только чтение).
18. AM – Alignment Mask. Флаг маскирования выравнивания. Когда флаг установлен, то в случае обращения к невыровненным операндам будет генерироваться исключительная ситуация 17. Если флаг сброшен, то такая исключительная ситуация маскируется.
29. NW – Not Write-Through. Флаг запрета сквозной записи.
30. CD – Cache Disable. Флаг запрета кэширования.
31. PG – Paging Enable. Флаг режима страничной организации памяти. Когда флаг установлен, операционная система работает в режиме страничной организации памяти.
Остальные биты регистра CR0 зарезервированы.
Регистр CR1 зарезервирован. В регистре CR2 хранится 32-разрядный линейный адрес, по которому получен отказ страницы памяти. В 20 старших разрядах регистра CR3 хранится физический базовый адрес таблицы каталога страниц и биты управления кэш-памятью. Регистр CR4 содержит биты разрешения архитектурных расширений МП. В целом, эти регистры используются в системном программировании и устанавливают режим работы процессора (нормальный, защищенный и т.д.), постраничное распределение памяти и т.д.
Системные адресные регистры. В системных регистрах-указателях глобальной дескрипторной таблицы GDTR и таблицы прерываний IDTR хранятся 32-разрядные базовые адреса и 16-разрядные пределы таблиц соответственно. Системные сегментные регистры задач TR и локальной дескрипторной таблицы LDTR являются 16-разрядными селекторами. Им соответствуют теневые регистры дескрипторов, которые содержат 32-разрядный базовый адрес сегмента, 20-разрядный предел и байт права доступа.
В регистрах отладки DR0-DR3 содержатся 32-разрядные адреса точек останова в режиме отладки; DR4–DR5 зарезервированы и не используются; DR6 отображает состояние контрольной точки; DR7 – руководит размещением в программе контрольных точек.
Регистры тестирования TR входят в группу модельно-специфических регистров, их состав и количество зависят от типа процессора: в МП 386 используются два регистра TR6 и TR7 для контроля постраничной системы распределения памяти операционной системой. В Pentium II и выше используется двенадцать регистров TR1–TR12. Эта группа регистров содержит также результаты тестирования МП и кэш-памяти.
- Предисловие
- Глава 1. Общие сведения о микропроцессорах
- 1.1 Классификация микропроцессоров
- 1.2 Характеристики микропроцессоров
- 1.2.1 Тактовая частота
- 1.2.2 Архитектура процессора
- 1.2.3 Технологический процесс производства
- 1.2.4 Частота системной шины
- 1.2.5 Размер кэша
- 1.3 Типы архитектур микропроцессоров
- 1.4 Структурная схема микропроцессоров
- 1.4.1 Микропроцессор Фон-Неймана
- 1.4.2 Конвейер
- 1.4.3 Зависимость между частотой и количеством ступеней конвейера
- 1.5 Представление информации в эвм
- 1.5.1 Двоичное представление целых чисел
- 1.5.2 Представление символьной информации
- Глава 2. Архитектура микропроцессоров ia-32
- 2.1 Состав и функции регистров
- 2.1.1 Основные регистры
- 2.1.2 Регистры дополнительных функциональных модулей
- 2.2 Типы адресации
- 2.3 Система команд
- 2.3.1 Классификация команд
- 2.3.2 Формат команды
- 2.3.3 Однобайтовые команды
- 2.3.4 Непосредственно заданные операнды
- 2.3.5 Команды с регистровыми операндами
- 2.3.7 Команды с операндами, расположенными в памяти
- Глава 3. Организация многоуровневой памяти
- 3.1 Принцип построения многоуровневой памяти
- 3.2 Организация кэш-памяти
- 3.3 Протоколы когерентности памяти микропроцессоров
- 3.4 Страничная организация памяти
- Глава 4. Режимы работы процессоров ia-32
- 4.1 Обзор режимов работы
- 4.2 Реальный режим адресации
- 4.3 Защищённый режим
- 4.3.1 Дескрипторные таблицы
- 4.3.2 Дескрипторные регистры
- 4.3.3 Дескриптор
- 4.3.4 Односегментная модель памяти
- 4.3.5 Многосегментная модель памяти
- Глава 5. Страничная организация памяти в процессорах ia‑32
- 5.1 Каталог страниц
- 5.2 Таблица страниц
- 5.3 Страничная переадресация
- 5.4 Диспетчер виртуальных машин системы Microsoft Windows
- Глава 6. Архитектура процессоров с параллелизмом уровня команд
- 6.1 Подходы к использованию ресурса транзисторов в микропроцессорах
- 6.2 Суперскалярные процессоры и процессоры с длинным командным словом
- 6.3 Зависимости между командами, препятствующие их параллельному исполнению
- 6.4 Предварительная выборка команд и предсказание переходов
- 6.5 Условное выполнение команд в vliw-процессорах
- 6.6 Декодирование команд, переименование ресурсов и диспетчеризация
- 6.7 Исполнение команд
- 6.8 Завершение выполнения команды
- 6.9 Направления развития архитектуры процессоров с параллелизмом уровня команд
- Глава 7. Мультитредовые микропроцессоры
- 7.1 Основы мультитредовой архитектуры
- 7.2 Выявление тредов
- 7.3 Мультитредовые процессоры с тредами, выявляемыми путем анализа потоков управления программы
- 7.3.1 Мультитредовая модель выполнения программы
- 7.3.2 Мультитредовые программы
- 7.3.3 Аппаратные средства мультитредовой архитектуры
- 7.3.4 Преимущества мультитредовой архитектуры
- 7.4 Мультитредовые процессоры с тредами, выявляемыми путем анализа потоков данных программы
- 7.5 Специфика мультитредовых моделей распараллеливания
- Глава 8. Модуль обработки вещественных чисел
- 8.1 Представление чисел с плавающей запятой
- 8.2 Состав модуля fpu
- Глава 9. Основы 64-разрядной архитектуры
- 9.1 Состав и назначение регистров микропроцессора ia-64
- 9.2 Особенности архитектуры epic
- 9.3 Архитектура x86-64
- 9.4 Структура одноядерного процессора
- 9.5 Многоядерные процессоры
- 9.6 Зачем нужны “лишние” разряды?
- Глава 10. Современные 64-разрядные микропроцессоры корпораций Intel и amd
- 10.1 Архитектура Intel Core 2
- 10.1.1 Intel Wide Dynamic Execution
- 10.1.2 Intel Intelligent Power Capability
- 10.1.3 Intel Advanced Smart Cache
- 10.1.4 Intel Smart Memory Access
- 10.1.5 Intel Advanced Digital Media Boost
- 10.1.6 Логическая схема процессора
- 10.2 Архитектура Intel Core i7
- 10.2.1 Технология Hyper-Threading в архитектуре Nehalem
- 10.2.2 Иерархия кэш-памяти в архитектуре Nehalem
- 10.3 Хронология развития семейств микропроцессоров с архитектурой Nehalem
- 10.4 Архитектура amd Athlon 64
- 10.4.1 Ядро процессора
- 10.4.3 Контроллер памяти
- 10.4.4 Контроллер HyperTransport
- 10.5 Архитектура amd k10
- 10.4.1 Технология amd Memory Optimizer Technology
- 10.5.2 Ядро процессора
- 10.5.3 Предвыборка данных и инструкций
- 10.5.4 Выборка из кэша
- 10.5.5 Предсказание переходов и ветвлений
- 10.5.6 Процесс декодирования
- 10.5.7 Диспетчеризация и переупорядочение микроопераций
- 10.5.8 Выполнение микроопераций
- 10.5.9 Технологии энергосбережения
- 10.5.10 Шина HyperTransport 3.0
- 10.5.11 Семейство процессоров Barcelona
- 10.5.12 Семейство процессоров Phenom
- Глава 11. Технологии, поддерживаемые современными микропроцессорами
- 11.1 Технологии тепловой защиты
- 11.1.1 Технология Thermal Monitor
- 11.1.2 Технология Thermal Monitor 2
- 11.1.3 Режим аварийного отключения
- 11.2 Технологии энергосбережения
- 11.2.1 Технология Enhanced Intel SpeedStep
- 11.2.2 Технология Cool'n'Quiet
- 11.3 Технология расширенной памяти
- 11.4 Технология антивирусной защиты
- 11.5 Технология виртуализации
- 11.6 Реализация технологий в современных микроархитектурах
- 11.6.2 Em64t – NetBurst
- 11.6.3 Intel Core
- 11.6.4 Intel Atom
- 11.6.5 Nehalem
- 11.6.6 Xeon
- Глава 12. Графические микропроцессоры
- 12.1 Основные термины и определения
- 12.2 Технологии построения трёхмерного изображения
- 12.2.1 Технологии повышения реалистичности трехмерного изображения
- 12.3 Шейдерный процессор
- 12.4 Особенности современных графических процессоров
- Глава 13. Однокристальные микроконтроллеры
- 13.1 Общая характеристика микроконтроллеров
- 13.2 Микроконтроллеры семейства avr
- Почему именно avr?
- 13.3 Общие сведения об омк avr
- 13.4 Характеристики avr-микроконтроллеров
- Глава 14. Технология производства микропроцессоров
- 14.1 Особенности производства процессоров
- 14.2 Новые технологические решения
- 14.3 Технология производства сверхбольших интегральных схем
- I. Выращивание кристалла кремния
- II. Создание проводящих областей
- III. Тестирование
- IV. Изготовление корпуса
- V. Доставка
- 14.4 Перспективы производства сбис
- Англо-русский словарь терминов и аббревиатур
- Библиографический список
- Интернет-ссылки
- 350072. Краснодар, ул. Московская, 2, кор. А.