
ЭВУ 2 семестр / Презентации ЭВУ в пдф / метода моховикова
.pdfтью поддерживает механизмы сегментации и страничной трансляции адре-
сов.
Расширения х86-64 и ЕМ64Т в первую очередь предназначены для ра-
дикального увеличения объема адресуемой памяти: 64-битные регистры по-
зволяют адресовать до 264 байт. Это число и является пределом объема вир-
туальной памяти 64-битного процессора, но пока используют только млад-
шие 48 бит адреса.
Процессоры предоставляют четырехуровневую систему привилегий для защиты памяти, ввода-вывода и прерываний, а также механизм переключения задач для многозадачных ОС. Система команд процессоров постоянно рас-
ширяется при сохранении всех команд предшествующих процессоров х86. С
расширением системы команд расширяется и набор архитектурных регист-
ров (ММХ, ХММ, новые общие 64-битные регистры).
Процессоры могут работать в различных режимах, определяющих воз-
можности адресации памяти и защиты: в реальном (16-разрядном) режиме процессора 8086, в режиме виртуального процессора 8086 (V86), в защищен-
ном 32-разрядном (и защищенном 16-разрядном) режиме. Режим работы процессора задается операционной системой с учетом режима работы при-
ложений (задач). У процессоров с 64-битным расширением появляются но-
вые режимы, среди которых есть и режимы, обеспечивающие совместимость с 32-разрядными операционными системами и приложениями. Новые режи-
мы используются только в 64-битных ОС, а полностью их преимущества доступны только 64-битным приложениям.
4.2. Регистры процессора
4.2.1. Общие понятия
Регистр – последовательное логическое устройство, используемое для хранения n-разрядных двоичных слов (чисел) и выполнения преобразований над ними. Регистр представляет собой упорядоченную последовательность
31

триггеров, число которых соответствует числу разрядов в слове. С каждым регистром обычно связано комбинационное цифровое устройство, с помо-
щью которого обеспечивается выполнение некоторых операций над словами.
Фактически любое цифровое устройство можно представить в виде совокуп-
ности регистров, соединенных друг с другом при помощи комбинационных цифровых устройств. Основой построения регистров являются D-триггеры,
RS-триггеры (рис. 8).
Рис. 8. Регистр с точки зрения триггеров
Регистр процессора – сверхбыстрая память внутри процессора (рис. 9),
предназначенная, прежде всего, для хранения промежуточных результатов вычисления (регистр общего назначения/регистр данных) или содержащая данные, необходимые для работы процессора – смещения базовых таблиц,
уровни доступа и т. д. (специальные регистры).
32
Рис. 9. Иерархия памяти
Из рис. 9 видно, что доступ к значениям, хранящимся в регистрах, как правило, в несколько раз быстрее, чем доступ к ячейкам оперативной памяти
(даже если кэш-память содержит нужные данные), но объем оперативной памяти намного превосходит суммарный объем регистров.
Операции в регистрах:
прием слова в регистр;
передача слова из регистра;
поразрядные логические операции;
сдвиг слова влево или вправо на заданное число разрядов;
преобразование последовательного кода слова в параллельный и обратно;
установка регистра в начальное состояние (сброс).
Регистры классифицируются по следующим видам: а) накопительные
(регистры памяти, хранения); б) сдвигающие.
В свою очередь сдвигающие регистры делятся:
по способу ввода-вывода информации:
параллельные – запись и считывание информации проис-
ходит одновременно на все входы и со всех выходов;
последовательные – запись и считывание информации происходит в первый триггер, а та информация, которая была в
33
этом триггере, перезаписывается в следующий – то же самое происходит и с остальными триггерами;
комбинированные;
по направлению передачи информации:
однонаправленные;
реверсивные;
по основанию системы счисления:
двоичные;
троичные;
десятичные.
4.2.2.Типы регистров
Регистром называется функциональный узел, осуществляющий прием,
хранение и передачу информации. Регистры состоят из группы триггеров,
обычно D. По типу приема и выдачи информации различают 3 типа регист-
ров:
С последовательным приемом и выдачей информации – сдви-
говые регистры.
С параллельным приемом и выдачей информации – параллель-
ные регистры.
С параллельно-последовательным приемом и выдачей инфор-
мации.
Сдвиговые регистры представляют собой последовательно соединенную цепочку триггеров. Основной режим работы – сдвиг разрядов кода от одного триггера к другому на каждый импульс тактового сигнала.
4.2.3. Параллельно-последовательный: ввод – параллельно, вывод –
последовательно
Параллельные регистры
34
В параллельных (статических) регистрах схемы разрядов не обменива-
ются данными между собой. Общими для разрядов обычно являются цепи тактирования, сброса/установки, разрешения выхода или приема, т. е. цепи управления. Пример схемы статического регистра, построенного на тригге-
рах типа D с прямыми динамическими входами, имеющего входы сброса и выходы с третьим состоянием, управляемые сигналом EZ, дан на рис. 8.
Сдвигающие (последовательные) регистры
Последовательные (сдвигающие) регистры представляют собой цепочку разрядных схем, связанных цепями переноса. В однотактных регистрах со сдвигом на один разряд вправо слово сдвигается при поступлении синхро-
сигнала. Вход и выход последовательные (DSR – Data Serial Right).
Согласно требованиям синхронизации в сдвигающих регистрах, не имеющих логических элементов в межразрядных связях, нельзя применять одноступенчатые триггеры, управляемые уровнем, поскольку некоторые триггеры могут за время действия разрешающего уровня синхросигнала пе-
реключиться неоднократно, что недопустимо. Появление в межразрядных связях логических элементов и, тем более, логических схем неединичной глубины упрощает выполнение условий работоспособности регистров и рас-
ширяет спектр типов триггеров, пригодных для этих схем. Многотактные сдвигающие регистры управляются несколькими синхронными последова-
тельностями. Из их числа наиболее известны двухтактные с основным и до-
полнительным регистрами, построенными на простых одноступенчатых триггерах, управляемых уровнем. По такту С1 содержимое основного реги-
стра переписывается в дополнительный, а по такту С2 возвращается в основ-
ной, но уже в соседние разряды, что соответствует сдвигу слова. По затратам оборудования и быстродействию этот вариант близок к однотактному реги-
стру с двухступенчатыми триггерами.
4.2.4. Назначение регистров
35

По назначению регистры процессора (рис. 10) делятся:
на аккумуляторные – используются для хранения промежуточ-
ных результатов арифметических и логических операций и инструкций ввода-вывода;
флаговые – хранят признаки результатов арифметических и ло-
гических операций;
общего назначения – хранят операнды арифметических и логи-
ческих выражений, индексы и адреса;
индексные – хранят индексы исходных и целевых элементов массива;
указательные – хранят указатели на специальные области па-
мяти (указатель текущей операции, указатель базы, указатель стека);
сегментные – хранят адреса и селекторы сегментов памяти;
управляющие – хранят информацию, управляющую состояни-
ем процессора, а также адреса системных таблиц.
Рис. 10. Основные регистры процессора
На рис. 10 приведены 16-разрядные регистры. 32-разрядные регистры
(те, которые можно было расширить до этой разрядности) имеют впереди бу-
кву «E», (от англ. extended – расширенный), например, EAX, EIP, EFLAGS и
36
т. д.; 64-разрядные регистры (те, которые можно было расширить до этой разрядности) имеют впереди букву «R» (от англ. relative – соответственный),
например, RAX, RIP, RFLAGS и т. д.
4.2.5. Троичные регистры
Троичные регистры строятся на троичных триггерах. Как и троичные триггеры, троичные регистры могут быть в разных троичных системах коди-
рования троичных данных (троичных разрядов): трехуровневая однопровод-
ная, двухуровневая двухразрядная двухпроводная, двухуровневая трехраз-
рядная одноединичная трехпроводная, двухуровневая трехразрядная однону-
левая трехпроводная и др. Троичные трехразрядные одноединичные N-
разрядные регистры данных описаны в [5].
На рис. 10 справа приведена схема девятиразрядного параллельного ста-
тического стробируемого троичного регистра данных на трех 3-разрядных параллельных статических стробируемых троичных регистрах данных в 3-
битной одноединичной системе троичных логических элементов (линии с обозначением «3В» – трехпроводные), имеющего емкость в показательной позиционной троичной системе счисления 39 = 19 683 чисел (кодов).
4.2.6. Сегментные регистры
Регистры, указывающие на сегменты: CS, DS, SS, ES, FS, GS, называют-
ся сегментными регистрами. В реальном режиме работы процессора сег-
ментные регистры содержат адрес начала 64Kb сегмента, смещенный вправо на 4 бита. В защищенном режиме работы процессора сегментные регистры содержат селектор сегмента памяти, выделенного ОС.
CS – указатель на кодовый сегмент. Связка CS:IP (CS:EIP/CS:RIP – в
защищенном/64-битном режиме) указывает на адрес в памяти следующей команды (рис. 11).
37

Рис. 11. Регистр-указатель инструкций
IP (англ. Instruction Pointer) – 16-битный (младшая часть EIP) ре-
гистр, содержащий адрес-смещение следующей команды, подле-
жащей исполнению, относительно кодового сегмента CS в процес-
сорах семейства x86. Регистр IP связан с CS в виде CS:IP, где CS
является текущим кодовым сегментом, а IP – текущим смещением относительно этого сегмента. Регистр IP является 16-разрядным регистром-указателем. Кроме него, в состав регистров этого типа входят SP (англ. Stack Pointer – указатель стека) и BP (англ. Base Pointer – базовый указатель).
EIP – 32-битный аналог (младшая часть RIP), более полно его работу можно описать следующим образом: начиная с процессора
80386, была введена 32-разрядная версия регистра-указателя – EIP. В
данном случае IP является младшей частью этого регистра (первые 16
разрядов). Принцип работы EIP в целом схож с работой регистра IP.
Основная разница состоит в том, что в защищенном режиме, в отличие от реального режима, регистр CS является селектором (селектор указы-
вает не на сам сегмент в памяти, а на его дескриптор сегмента в табли-
це дескрипторов).
RIP – 64-битный аналог, на основе которого в 64-разрядных процессорах введен новый метод адресации RIP-relative.
Принцип работы
Например, в регистре сегмента кода CS содержится шестнадцатеричное значение 2CB50H, в регистре IP хранится смещение 123H.
38
Адрес следующей инструкции, подлежащей исполнению, вычисляется путем суммирования адреса в CS (сегменте кода) со смещением в регистре
IP: 2CB50H + 123H = 2CC73H. Таким образом, адрес следующей инструкции для исполнения равен 2CC73H. При выполнении текущей инструкции про-
цессор автоматически изменяет значение в регистре IP, в результате чего ре-
гистровая пара CS:IP всегда указывает на следующую подлежащую исполне-
нию инструкцию.
Регистры данных служат для хранения промежуточных вычислений (их также называют регистрами общего назначения (РОН)):
RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8–R15 – 64-
битные;
EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D–R15D – 32-
битные (extended AX);
AX, CX, DX, BX, SP, BP, SI, DI, R8W–R15W – 16-битные;
AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B–
R15B – 8-битные (половинки 16-битных регистров), например, AH – high AX – старшая половинка 8 бит, AL – low AX – младшая половинка
8 бит.
Индексные регистры предназначены для хранения индексов при работе с массивами. SI (Source Index) содержит индекс источника, а DI (Destination
Index) – индекс приемника, хотя их можно использовать и как регистры об-
щего назначения. Применяются в строковых операциях.
Регистры-указатели используются для работы со стеком. В частности, BP (Base Pointer) позволяет работать с переменными в стеке. Его также мож-
но использовать в других целях. SP (Stack Pointer) указывает на вершину сте-
ка. Он используется командами, которые работают со стеком.
Сегментные регистры: CS (Code Segment), DS (Data Segment), SS
(Stack Segment) и ES (Enhanced Segment) предназначены для обеспечения сегментной адресации. Код находится в сегменте кода, данные – в сегменте данных, стек – в сегменте стека и есть еще дополнительный сегмент данных.
39
Реальный физический адрес получается путем сдвига содержимого сегмент-
ного регистра на 4 бита влево и прибавления к нему смещения (относитель-
ного адреса внутри сегмента). Применяются для обращения сегменту памяти.
4.2.7. Регистр флагов EFLAGS
Значение некоторых флагов в регистре флагов (рис.12) можно изменять напрямую, с помощью специальных инструкций (например, CLD для сброса флага направления), Но нет инструкций, которые позволяют обратиться
(проверить или изменить) к регистру флагов как к обычному регистру. Одна-
ко можно сохранять регистр флагов в стек или регистр (R)(E)AX и восста-
навливать регистр флагов из них с помощью инструкций LAHF (загрузить в ah (аккумуляторный регистр) значения регистра флагов – от англ. load flags in register ah), SAHF (сохранение в аккумуляторный регистр значения реги-
стра флагов – save flags in register ah), PUSHF, PUSHFD, POPF и POPFD (ис-
пользование стека для выгрузки значений регистра флагов). Возможные со-
стояния битов регистра флагов см. в Прил. 1.
Флаги состояния позволяют одной и той же арифметической инструк-
ции выдавать результат трех различных типов:
беззнаковый – если результат считать беззнаковым числом, то флаг CF
показывает условие переполнения (перенос или заем);
двоично-десятично кодированный – (BCD) целое число для BCD-
результата перенос/заем показывает флаг AF;
знаковый – для знакового результата (в дополнительном коде) перенос или заем показывает флаг OF.
Флаг SF отражает знак знакового результата, флаг ZF отражает и без-
знаковый, и знаковый нулевой результат.
Вдлинной целочисленной арифметике флаг CF используется совместно
синструкциями сложения с переносом (ADC) и вычитания с заемом (SBB)
для распространения переноса или заема из одного вычисляемого разряда
длинного числа в другой.
40