Сделай Сам Свою Работу на 5

Команды и последовательности команд





Система команд процессоров IA-32 Pentium

Регистры и адресация

Структура регистров процессоров IA-32

Команды и последовательности команд

Нотация для описания операций с регистрами

Нотация языка ассемблера

Базовые типы команд

Выполнение команд и линейный код

Ветвление

Флаги кодов условий регистра состояния

Режимы адресации

Команды IA-32

Программа для сложения чисел

Формат машинных команд

Однобайтовые команды

Кодировка непосредственной адресации

Режимы адресации и поля смещения

 

Все процессоры корпорации Intel имеют общее название Intel Architecture (IA). Мы с вами рассмотрим лишь процессоры IA, которые работают с 32-разрядными адресами памяти и 32-разрядными данными. Общее название процессоров этого семейства IA-32, а самые последние их представители носят имя Pentium. Пер­вый процессор архитектуры IA-32 — процессор 80386 — увидел свет в 1985 году. После этого были созданы процессоры 80486 (1989), Pentium (1993), Pentium Pro (1995), Pentium II (1997), Pentium III (1999) и Pentium 4 (2000). Каждый новый процессор обладал более высокой производительностью, что достигалось за счет множества архитектурных усовершенствований и новых решений в микроэлек­тронной технологии. Последние его члены поддерживают специализированные команды для управле­ния мультимедийной графической информацией и обработки векторных данных. Набор команд процессоров IA-32 очень большой, по­этому придется ограничиться рассмотрением самых основных команд и режимов адресации, а полную информацию об архитектуре системы команд процессоров IA-32 и их языке ассемблера вы найдете на web-узле Intel, который находится по адресу http://www.intel.com.



5.1. Регистры и адресация

В архитектуре процессоров IA-32 память адресуется побайтово при помощи 32-разрядных адресов, а команды работают с операндами размером 8 и 32 разря­да. Эти два размера операндов, согласно терминологии Intel, называются байтом и двойным словом. В первых моделях процессоров Intel 16-разрядный операнд назывался словом. Для хранения информации используется прямой порядок байтов, описанный в разделе 4.2. Многобайтные операнды могут начинаться по любым адресам. Выравниваться как-либо в памяти они не должны.



Структура регистров процессоров IA-32

Регистры процессора IA-32 показаны на рис. 5.1., Обычно восемь 32-разрядных регистров с именами от R0 до R7 являются регистрами общего назначения и ис­пользуются для хранения операндов-данных или адресной информации. Кроме то­го, имеется восемь регистров с плавающей запятой для хранения операндов-дан­ных, имеющих размер двойного или четверного (64 разряда) слова. Регистры с плавающей запятой содержат поле расширения (на рис. 5.1. не показано), с уче­том которого их длина составляет 80 бит. Дополнительные биты используются для увеличения точности при обработке процессором чисел с плавающей запя­той. Архитектура IA-32 основана на модели памяти, в которой различные области памяти, называемые сегментами, имеют разное назначение. Сегмент кода содер­жит команды программы, сегмент стека — стек процессора, а четыре сегмента дан­ных предназначены для хранения операндов-данных. В шести сегментных регист­рах хранятся значения селекторов, используемые для идентификации указанных сегментов в адресном пространстве памяти. О назначении этих регистров мы по­говорим в разделе 9.6, где будет обсуждаться семейство IA-32. Пока же такого рода информация нам не нужна. 32-разрядные адреса в архитектуре IA-32 часто при­меняются для доступа к тем областям памяти, в которых располагается сама про­грамма, стек процессора и области данных.

 

 

 

NT IOPL OF DF IF TF SF ZF AF O PF CF
                               

Регистр флагов FLAGS



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

В нижней части рис. 5.1. показаны еще два регистра — указатель команды, яв­ляющийся счетчиком команд и содержащий адрес следующей выполняемой ко­манды программы, и регистр состояния, в котором хранятся флаги кодов условий (CF, ZF, SF, OF). Флаги информируют о результатах арифметических операций. Биты режима выполнения программы (IOPL, IF, TF) связаны с операциями ввода-вывода и прерываниями, о которых рассказывается в разделе 6.

Регистры общего назначения процессоров семейства IA-32 совместимы с ре­гистрами ранних 8- и 16-разрядных процессоров Intel. В этих процессорах на ис­пользование разных регистров в программах накладывались некоторые ограни­чения. О соответствии регистров процессоров IA-32 регистрам более ранних процессоров можно судить по рис. 5.2. Восемь регистров общего назначения раз­делены на три группы: регистры данных для хранения операндов, регистры-ука­затели и индексные регистры для хранения адресов и индексов, посредством ко­торых определяется исполнительный адрес операнда в памяти.

 

Имя регистра общего назначения 31 16 15 8 7 0    
R0 EAX   AH AL Регистры данных
      AX  
R1 ECX   CH CL
      CX
R2 EDX   DH DL
      DX
R3 EBX   BH BL
      BX    
R4 ESP   SP Регистры-указатели
         
R5 EBP   BP
             
R6 ESI   SI Индексные регистры
         
R7 EDI   DI
             
  EIP   IP   Указатель команды
             
  EFLAGS   FLAGS   Регистр состояния

Рис. 5.2. Соответствие регистров IA-32 регистрам более ранних процессоров Intel

В первых, 8-разрядных, процессорах Intel регистры данных назывались А, В, С и D. В более поздних 16-разрядных процессорах их стали называть АХ, ВХ, СХ и DX. Старший и младший байты каждого регистра идентифицируются суффик­сами Н и L. Например, два байта в регистре АХ называются АН и AL. В процессо­рах IA-32 для идентификации соответствующих «расширенных» 32-разрядных регистров используется префикс E: ЕАХ, ЕВХ, ЕСХ и EDX. Этот же префикс употребляется и с другими 32-разрядными регистрами, показанными на рис. 5.2 (они являются расширенными версиями соответствующих 16-разрядных регист­ров, использовавшихся в более ранних процессорах).

Все перечисленные наименования регистров до сих пор применяются в техни­ческой документации Intel и других описаниях процессоров этой корпорации. Старые наименования регистров сохранены потому, что Intel поддерживает об­ратную совместимость для всех своих процессоров. Это означает, что при кор­ректной установке состояния процессора программы на машинном языке, соз­данные для ранних 16-разрядных процессоров, будут нормально работать на со­временных процессорах IA-32 без каких-либо изменений. В программах на языке ассемблера для 16-разрядных процессоров мы будем использовать в именах реги­стров префикс E, поскольку это мнемоническое обозначение применяется в теку­щих версиях ассемблера процессоров IA-32. Для однобайтовых операндов, храня­щихся в младших разрядах 32-разрядных регистров процессора, используются обозначения AL, BL и т. д. Для команд процессора IA-32 можно динамически ус­тановить 32- или 16-разрядный режим, для чего используется байт префикса ко­манды.

Команды и последовательности команд

Задачи, выполняемые компьютерной программой, состоят из последовательно­сти небольших шагов, таких как сложение двух чисел, проверка определенного условия, чтение символа с клавиатуры или вывод такового на экран. Следова­тельно, компьютер должен поддерживать команды для выполнения следующих четырех типов операций:

  • пересылка данных между памятью и регистрами процессора;
  • арифметические и логические операции с данными;
  • управление последовательностью выполнения программ и их команд;
  • операции ввода-вывода.

Мы начнем со знакомства с командами первых двух типов. Но прежде чем приступать к их анализу, вам следует ознакомиться со специальной нотацией, ис­пользуемой для описания операций с регистрами.

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.