Прочие регистры – состав и назначение
Индексные регистры используются для выполнения косвенной адресации, а также автоматически используются в строковых командах. Каждый 32-разрядный индексный регистр представляет собой логическое объединение, позволяющее отдельно обратиться к своей младшей 16-разрядной части (рисунок).
Регистр ESI (регистр индекса источника) может содержать адреса элементов в оперативной памяти. По умолчанию эти адреса будут представлять собой смещение в сегменте данных. При выполнении операций со строками в этом регистре содержится смещение строки источника в сегменте данных.
Регистр EDI (регистр индекса приемника) может содержать адреса элементов в оперативной памяти. По умолчанию эти адреса будут представлять собой смещение в сегменте данных. При выполнении операций со строками в этом регистре содержится смещение строки приемника в сегменте данных.
Регистры для работы со стеком используются для хранения вершины стека (ESP) и текущего элемента (базы) - EBP. Каждый 32-разрядный регистр для работы со стеком представляет собой логическое объединение, позволяющее отдельно обратиться к своей младшей 16-разрядной части (рисунок).
Регистр EBP (указатель базы) может содержать адреса элементов в оперативной памяти. Эти адреса будут представлять собой смещение в сегменте стека.
Регистр ESP (указатель стека) используется для записи данных в стек и чтения их из стека. Фактически он содержит смещение в сегменте стека, которое определяет нужное слово памяти. Значения этого регистра автоматически меняются командами для работы со стеком типов push, pop, pushf, popf, call, ret.
|
|
Сегментные регистры представляют собой набор 16-разрядных регистров (для 32-битной архитектуры центрального процессора).
Сегмент - это логический элемент программы, который представляет собой независимый, поддерживаемый на аппаратном уровне блок памяти.
Регистр CS (регистр сегмента кода) определяет стартовый адрес сегмента, в который помещается код выполняемой программы. Это единственный сегментный регистр, который нельзя загрузить непосредственно. Косвенно загрузить в регистр CS новое значение могут команды вида jxx, call, int, ret, iret.
Регистр DS (регистр сегмента данных) определяет стартовый адрес сегмента, в который помещаются данные для программы. По умолчанию смещения в сегменте данных задаются в регистрах EBX, ESI и EDI.
Регистр SS (регистр сегмента стека) определяет стартовый адрес сегмента, в который помещается стек для программы. По умолчанию смещения для сегмента стека задаются в регистрах ESP и EBP.
Регистры ES, FS, GS (регистры сегментов дополнительных данных) определяют стартовый адрес сегмента, в который помещаются дополнительные данные для программы. Например, в случае строковых команд, DS определяет сегмент для строки-источника, а ES – сегмент для строки-приемника. За исключением строковых команд, доступ к данным в сегменте ES обычно менее эффективен, чем в сегменте DS.
|
|
Регистр счетчика команд
Регистр EIP (указатель команд) содержит смещение в сегменте кода следующей выполняемой команды. Как только некоторая команда начинает выполняться, значение регистра EIP увеличивается на ее длину так, что будет адресовать следующую команду. Физический адрес команды в памяти выполняемой программы определяет пара регистров CS:EIP, то есть к физическому адресу начала сегмента кода добавляется смещение следующей команды в сегменте кода, хранящееся в регистре EIP.
Обычно команды выполняются в той последовательности, в которой они расположены в программе. Нарушают эту последовательность только команды переходов (они начинаются с буквы j: jxx), команды вызова подпрограммы (call), обработчиков прерываний (int) и возврата (ret, iret). Непосредственно содержимое EIP нельзя изменить или прочитать. Косвенно загрузить в регистр EIP новое значение могут только команды jxx, call, int, ret, iret. Регистр EIP является 32-битным. Младшая 16-битная часть регистра счетчика команд имеет имя IP.
|
|
Регистр признаков
Регистр признаков EFLAGS включает биты, каждый из которых устанавливается в единичное или в нулевое состояние при определенных условиях. Регистр EFLAGS 32-битный. Младшая 16-битная часть регистра признаков имеет имя FLAGS (рисунок).
Все биты регистра признаков подразделяются на:
- s - биты состояния (STATUS);
- c - биты управления (CONTROL);
- x - системные биты (SYSTEM).
CF – бит переноса: устанавливается в 1, когда арифметическая операция генерирует перенос или выход за разрядную сетку результата. сбрасывается в 0 в противном случае. Этот флаг показывает состояние переполнения для бесзнаковых целочисленных арифметических действий. Он также используется в арифметических действиях с повышенной точностью. Может быть установлен командой STC или сброшен командой CLC.
PF – бит четности: устанавливается в 1, если результат последней операции имеет четное число единиц.
AF – бит вспомогательного переноса: устанавливается в 1, если арифметическая операция генерирует перенос из младшей тетрады битов (из 3 бита в 4), сбрасывается в 0 в противном случае. Этот флаг используется в двоично-десятичной арифметике.
|
|
ZF – бит нулевого значения: устанавливается в 1, если результат нулевой, сбрасывается в 0 в противном случае.
SF – знаковый бит: устанавливается равным старшему биту результата, который определяет знак в знаковых целочисленных операциях (0 – положительное число, 1 – отрицательное число).
TF – бит пошаговой отладки: устанавливается в 1 для включения режима пошаговой отладки программы, сбрасывается в 0 в противном случае.
IF – бит прерываний: при значении 1 микропроцессор реагирует на внешние аппаратные прерывания по входу INTR. При значении 0 микропроцессор игнорирует внешние прерывания.
DF – бит направления: управляет строковыми командами (MOVS, CMPS, SCAS, LODS, STOS). Если DF = 1 (команда STD), то содержимое индексных регистров ESI, EDI увеличивается, если DF = 0 (команда CLD), то содержимое индексных регистров ESI, EDI уменьшается.
OF – бит переполнения: устанавливается в 1, если целочисленный результат выходит за пределы разрядной сетки. Тем самым данный бит указывает на потерю старшего бита результата.
IOPL – уровень приоритета: 2-битовое поле, которое отображает уровень приоритета ввода-вывода для выполняемой в данное время программы или задачи. Действительный приоритет задачи может быть меньше или равен IOPL.
NT – флаг вложенной задачи: управляет последовательностью вызванных и прерванных задач. Установлен в 1, если текущая задача связана с предыдущей, сброшен в 0, если текущая задача не связана с другими задачами.
RF — флаг возобновления: используется при обработке прерываний от регистров отладки. VM — флаг виртуального 8086: признак работы процессора в режиме виртуального 8086: 1 - процессор работает в режиме виртуального 8086, 0 – процессор работает в реальном или защищенном режиме.
AC — флаг контроля выравнивания: предназначен для разрешения контроля выравнивания при обращениях к памяти. Если требуется контролировать выравнивание данных и команд по адресам, кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут вызывать исключительную ситуацию.
VIF — флаг виртуального прерывания: при определенных условиях (одно из которых – работа микропроцессора в V-режиме) является аналогом флага IF. Флаг VIF используется совместно с флагом VIP.
VIP — флаг отложенного виртуального прерывания: устанавливается в 1 для индикации отложенного прерывания. Используется совместно с VIF в виртуальном режиме.
ID — флаг поддержки идентификации процессора: используется для отображения поддержки микропроцессором инструкции CPUID.
Дата добавления: 2018-06-27; просмотров: 540; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!