
- •Программирование эвм
- •Int 21h ;кодом возврата 0 прерывания 21h
- •Работа с битами
- •Порядок выполнения работы
- •Устройства ввода-вывода
- •Ввод исходных данных с клавиатуры и вывод результатов на дисплей
- •Inc di ;смещение в видеопамяти на следующий символ
- •Порядок выполнения работы
- •Контрольные задания
- •Система команд процессора
- •Способы адресации
- •Влияние команд на регистр флагов
- •Расширенные регистры и типы данных процессоров x86
- •Система команд процессоров ia-32 и Intel 64
- •Int 21h ;системного прерывания 21h
- •Использование дальней подпрограммы
- •X dw 0aabBh, 0abbAh, 0baaBh, 0bbaAh ;исходные данные
- •Использование подпрограмм для ввода-вывода
- •Порядок выполнения работы
- •Контрольные задания
- •Дескрипторы
- •Порядок работы процессора в защищенном режиме
- •Использование дальней подпрограммы в защищенном режиме
- •Использование idt. Ввод данных с клавиатуры в защищенном режиме
- •Порядок выполнения работы
Влияние команд на регистр флагов
Классификация команд по отношению к регистру флагов
По отношению к регистру флагов выделяются следующие группы команд:
-
Влияющие на флаги.
-
Проверяющие флаги (команды условных переходов, вызовов, возвратов, цикла).
-
Использующие флаги при выполнении действий в качестве операндов (команды сложения с переносом и т. п.).
-
Не имеющие отношения к регистру флагов.
Способы влияния команд на регистр флагов
Влияние команд на флаги бывает следующих типов:
-
В соответствии с результатом операции.
-
Установка (в единицу).
-
Сброс (установка в ноль).
-
Восстановление предыдущих значений, например, IRET.
-
Неопределенное.
Правила определения влияния команды на флаги
Основные правила определения влияния команды на флаги таковы:
-
Не влияют на регистр флагов команды передачи данных и передачи управления.
-
Команды арифметических и логических операций влияют на регистр флагов.
Из этих правил имеются исключения. Они определяются назначением (спецификой) команд и вполне очевидны. Это, например, команды 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.