Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
27
Добавлен:
20.06.2014
Размер:
1.08 Mб
Скачать

Влияние команд на регистр флагов

Классификация команд по отношению к регистру флагов

По отношению к регистру флагов выделяются следующие группы команд:

  1. Влияющие на флаги.

  2. Проверяющие флаги (команды условных переходов, вызовов, возвратов, цикла).

  3. Использующие флаги при выполнении действий в качестве операндов (команды сложения с переносом и т. п.).

  4. Не имеющие отношения к регистру флагов.

Способы влияния команд на регистр флагов

Влияние команд на флаги бывает следующих типов:

  1. В соответствии с результатом операции.

  2. Установка (в единицу).

  3. Сброс (установка в ноль).

  4. Восстановление предыдущих значений, например, IRET.

  5. Неопределенное.

Правила определения влияния команды на флаги

Основные правила определения влияния команды на флаги таковы:

  1. Не влияют на регистр флагов команды передачи данных и передачи управления.

  2. Команды арифметических и логических операций влияют на регистр флагов.

Из этих правил имеются исключения. Они определяются назначением (спецификой) команд и вполне очевидны. Это, например, команды SAHF и POPF.

Среди команд управления процессором имеются такие, которые не влияют на регистр флагов, например, HLT, и такие, которые влияют на него в соответствии со своим назначением, например, STI.

Расширенные регистры и типы данных процессоров x86

Регистры процессоров IA-32

С введением защищенного режима в процессоре i80286 появилась принципиально новая группа регистров — системные регистры, предназначенные для переключения между режимами и реализации возможностей защищенного режима. Системные регистры будут рассмотрены в лабораторной работе №4.

Обычные, несистемные регистры процессоров IA-32 таковы:

  • 8 32-битных регистров общего назначения: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI;

  • 6 16-битных сегментных регистров: ES, CS, SS, DS, FS, GS;

  • 32-битный указатель команд EIP;

  • 32-битный регистр флагов EFlags;

  • регистры FPU:

  • 8 80-разрядных регистров данных;

  • 16-битный управляющий регистр;

  • 16-битный регистр состояния;

  • 16-битный регистр тегов;

  • 11-битный регистр кода операции;

  • 48-битный указатель команд;

  • 48-битный указатель данных (операндов);

  • 8 64-битных регистров MMX.

  • 8 128-битных регистров XMM;

  • 32-битный регистр MXCSR (MMX Control and Status Register) — регистр управления и состояния устройства MMX.

Видно, что за исключением регистров FPU и MMX, это те же регистры i8086, только 32-битные (кроме сегментных регистров). Этот факт отражает первая буква E (extended) в названии регистров. Сегментные регистры имеют тот же размер, 16 бит, но их число увеличилось до шести.

Регистр флагов EFlags помимо признаков результата и управляющих флагов содержит новые флаги — системные, связанные с защищенным режимом и многозадачностью. Они, как и системные регистры, также будут рассмотрены в соответствующей главе.

Регистры MMX физически представляют собой 64-битную часть регистров данных FPU.

Регистры XMM появились в Pentium 4. Это уже физически отдельные регистры.

Регистры процессоров Intel64

Регистры процессоров Intel64:

  • 16 64-битных регистров общего назначения: RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8-R15;

  • 6 16-битных сегментных регистров: ES, CS, SS, DS, FS, GS;

  • 64-битный указатель команд RIP;

  • 64-битный регистр флагов RFLAGS, старшие 32 бита зарезервированы, младшие равны EFLAGS;

  • регистры FPU:

  • 8 80-разрядных регистров данных;

  • 16-битный управляющий регистр;

  • 16-битный регистр состояния;

  • 16-битный регистр тегов;

  • 11-битный регистр кода операции;

  • 64-битный указатель команд;

  • 64-битный указатель данных (операндов);

  • 8 64-битных регистров MMX;

  • 16 128-битных регистров XMM;

  • 32-битный регистр MXCSR (MMX Control and Status Register) — регистр управления и состояния устройства MMX.

Системные регистры Intel64 также будут рассмотрены в лабораторной работе №4.

Типы данных процессоров IA-32 и Intel64

Фундаментальные типы данных процессоров IA-32 и Intel64 таковы:

  • byte (байт, 8 бит);

  • word (слово, 16 бит);

  • double word (двойное слово, 32 бита);

  • quad word (учетверенное слово, 64 бита);

  • double quad word (двойное учетверенное слово, 128 бит).

Большинство команд оперируют этими данными без какой-либо дополнительной их типизации. Учетверенное слово было введено в i486, двойное учетверенное — в Pentium III с расширением SSE. В памяти операнды хранятся побайтно. Младшему байту операнда соответствует младший адрес (little endian order). Он является адресом и всего операнда. Выравнивание операндов в памяти (расположение слов по четным адресам, двойных слов — по адресам, кратным четырем и т. д.) повышает эффективность программы, так как уменьшается необходимое число обращений процессора к памяти. При этом слова, расположенные по нечетным адресам, но не пересекающие 4-байтную границу, также считаются выровненными и доступны за одно обращение. Некоторые команды, оперирующие с двойными учетверенными словами, генерируют исключение общей защиты (#GP), если операнды не выровнены.

Кроме размера некоторые команды требуют дополнительных признаков классификации операндов. Арифметические команды оперируют числами, которые, в свою очередь, могут быть следующих типов:

  • Byte Unsigned Integer;

  • Word Unsigned Integer;

  • Doubleword Unsigned Integer;

  • Quadword Unsigned Integer;

  • Byte Signed Integer;

  • Word Signed Integer;

  • Doubleword Signed Integer;

  • Quadword Signed Integer;

  • Single Precision Floating Point (32 бита);

  • Double Precision Floating Point (64 бита);

  • Double Extended Precision Floating Point (80 бит).

Также имеются различные типы данных MMX и XMM.

Соседние файлы в папке Задания к лабораторным