
- •Развитие микропроцессорных архитектур
- •Введение ……………………………………………….........................................4
- •С благодарностью
- •Введение
- •1. История развития микропроцессоров фирмы Intel
- •2. Микропроцессоры класса cisc
- •Можно отметить следующие основные черты архитектуры amd64:
- •4. Микропроцессоры класса risc
- •5. Повышение производительности микропроцессоров
- •6. Конвейерная работа микропроцессоров
- •7. Метод переименования регистров (регистровые окна)
- •8.Принцип обработки операндов simd
- •8.1. Архитектура mmx
- •8.2 Технология sse
- •8.3 Технология sse2
- •9. Обзор simd-команд
- •9.1. Команды передачи данных
- •9.2 Арифметические команды
- •9.2.2 Команды упакованного/скалярного умножения и деления
- •9.2.3 Команды упакованого/скалярного вычисления квадратных корней
- •9.2.4. Команды упакованного/скалярного нахождения максимума и минимума
- •9.2.5 Команды сравнения
- •9.3. Команды преобразования типов данных
- •9.4. Логические команды
- •9.5. Дополнительные команды simd над целочисленными операндами
- •9.6. Команды перестановки
- •9.7. Команды управления состоянием
- •9.8. Команды технологии sse3
- •1. Преобразование чисел с плавающей запятой в целые числа. В эту подгруппу входит одна-единственная инструкция, которая работает на уровне арифметического сопроцессора x87 fpu.
- •3. Загрузка невыровненных переменных. Данную подгруппу представляет инструкция lddqu.
- •Команда monitor устанавливает диапазон адресов памяти (обычно используется одна строка кэша), по которому будет осуществляться отслеживание записей по стандартному протоколу write-back.
- •10. Технология Hyper-Threading
- •11. Vliw (epic) микропроцессор
- •Литература
- •Замковец Сергей Всеволодович Развитие микропроцессорных архитектур
- •119333, Москва, ул. Вавилова, д. 44, кор. 2
2. Микропроцессоры класса cisc
Традиционно считается, что микропроцессоры фирмы Intel относятся к классу CISC (Complex Instruction Set Computers – компьютеры со сложным набором команд).
Образно выражаясь, можно сказать, что CISC – это философия разработчиков процессоров, которая с одной стороны нацелена на обеспечение легкости программирования, а с другой стороны, делает эффективной использование памяти, поскольку память в то время, когда создавались первые микропроцессоры фирмы Intel, была небольшой, достаточно дорогой и медленной и ее при программировании необходимо было экономить. Каждая команда в CISC микропроцессорах может выполнять целую последовательность операций внутри процессора, что уменьшает количество команд, необходимых для реализации данной программы. Основоположником CISC-архитектуры можно считать компанию IBM с ее базовой архитектурой /360, ядро которой используется с1964 года и дошло до наших дней, например, в таких современных мейнфреймах, как IBM ES/9000.
В соответствии с представленной философией многие компьютерные архитекторы пытались устранить семантический разрыв. Этот разрыв заключался в том, что объекты манипулирования и соответствующие им операции, реализуемые архитектурой вычислительной системы, редко имеют близкое родство с объектами и операциями, описываемыми в языках программирования. Задача разработчиков заключалась в том, чтобы построить такой набор команд, который непосредственно поддерживал бы конструкции языков высокого уровня, например, вызовы процедур, контроль циклов, сложные режимы адресации, обеспечивая доступ к структурам данных и массивам при помощи единичных инструкций.
Для дальнейшего увеличения плотности кодов сами команды также подвергались специальному кодированию. Например, все режимы адресации кодировались при помощи одного байта. Компактная природа таких команд приводила к небольшому размеру программ и небольшому количеству обращений к основной медленной памяти. Это обеспечивало хорошую программную производительность, как на ассемблере, так и на языках высокого уровня таких, как Фортран или Алгол. Это можно считать первой причиной, почему микропроцессоры пошли по такому пути развития.
Вторая причина заключается в том, что первоначально в ранних проектах процессоров разработчики использовали специальную аппаратную логику для декодирования и выполнения каждой команды. Для простых проектов с небольшим количеством команд такой подход оправдывал себя, но более сложную архитектуру реализовать было тяжелее, из-за сложности построения логики управления. Тогда проектировщики изменили подход – они использовали простую логику для управления путями передач между различными элементами процессора и использовали упрощенный микрокод для управления этой логикой. Этот тип реализации известен как микропрограммная реализация.
Микропрограммный способ выполнения команд был предложен Уилксом в 1951 году и при таком способе управление выполнением команд базируется на постоянной памяти, организованной в виде прямоугольной матрицы, где каждая строка соответствует одному машинному такту, а элементы в столбце управляют вентилями.
Таким образом, при использовании микропрограммной системы процессор имеет встроенную постоянную память, которая содержит группы микрокодов команд, соответствующие каждой команде машинного языка. Когда такая команда поступает в процессор, он выполняет соответствующую последовательность микрокодов.
Одним из последствий использования микропрограммного управления является то, что разработчики могли вносить больше функциональности в каждую команду. Это в значительной степени сокращало общее количество команд, требующихся для реализации программы, и поэтому делало более эффективным использование медленной основной памяти. Кроме того, реализация сложных команд процессоров осуществлялась достаточно просто.
Таким образом, разработчики усиливали общий набор команд, предназначенных для ассемблера. Такие усиления касались манипуляций с цепочками, специальные конструкции для организации циклов, специальные режимы адресации для индексации через таблицы в памяти.
Рассмотрим на примере микропроцессоров фирмы Intel основные архитектурные особенности процессоров класса CISC. При этом под архитектурой будем понимать набор атрибутов, которыми может пользоваться программист, разрабатывающий программу на машинном языке, т.е. на ассемблере.
В первую очередь для CISC микропроцессоров характерно небольшое количество регистров общего назначения. В Pentium процессорах имеется 8 8-разрядных регистров, 8 16-разрядных и 8 32-разрядных. При выполнении команд все регистры общего назначения являются равноправными, однако некоторые из них имеют специальное назначение, так как в различных командах по умолчанию используются эти регистры.
Набор регистров устроен таким образом, что позволяет отдельно адресовать 8 8-разрядных регистров, являющихся младшими частями 32-х разрядных регистров: AH, AL, BH, BL, CH, CL, DH и DL (рис1).
Также отдельно можно адресовать 8 16-разрядных регистров, являющихся младшими частями 32-разрядных регистров: AX, BX, CX, DX, SP, BP, SI и DI.
Наконец, можно адресовать 8 32-разрядных регистра, которые имеют тоже наименование, что и 16-разрядные регистры, только перед наименованием регистра имеется буква Е.
Второй отличительной чертой CISC микропроцессоров является очень большое количество различных инструкций. Для кодирования кодов операций в формате команд выделяется два байта (один байт может указывать 256 различных кодов операций). Для примера рассмотрим, какие имеются варианты команды сложения ADD.
Команда Код операции
1) ADD r/m8,r8 00
2) ADD r/m16, r16 01
3) ADD r/m32,r32 01
4) ADD r8,r/m8 02
5) ADD r16,r/m16 03
6) ADD r32,r/m32 03
7) ADD AL,imm8 04
8) ADD AX,imm16 05
9) ADD EAX,imm32 05
10) ADD r/m8,imm8 80
11) ADD r/m16, imm16 81
12) ADD r/m32,imm32 81
13) ADD r/m16,imm8 83
14) ADD r/m32,imm8 83
Некоторые команды имеют один и тот же код операций (например, команды 2 и 3, 5 и 6) но операции выполняются над разными размерами операндов – это осуществляется за счет использования специальных байтов-префиксов, которые указывают какие размеры операнда надо использовать.
31 15 7 0
EAX AH AX AL |
EBX BH BX BL
|
ECX CH CX CL |
EDX DH DX DL |
31 15 0
ESP SP
|
EBP BP |
ESI SI |
EDI DI |
Рис.1 Регистры общего назначения микропроцессоров Intel
Из представленного примера видно, что для команды сложения имеется 14 вариантов выполнения. Очевидно, что некоторые команды дублируют друг друга, например команды 1 и 4, если используются для сложения только регистры, являются идентичными, хотя и имеют различный код операции. Какой из этих кодов будет выбран при трансляции, зависит от разработчика компилятора. В связи с этим можно считать эти команды избыточными друг по отношению к другу.
Другим примером избыточности может служить команда BSWAP, которая используется для изменения формы адресации. В качестве операнда в этой команде может быть использован только 32-разрядный регистр. При выполнении данной команды четвертый байт становится первым, третий – вторым, второй – третьим, а первый байт – четвертым. В микропроцессорах фирмы Intel в памяти информация располагается в соответствии с принципом “младший байт по младшему адресу” (little endian). В некоторых микропроцессорах других фирм (например, фирмы Motorola) информация располагается в соответствии с принципом “младший байт по старшему адресу” (big endian). Для преобразования информации при передачи ее между микропроцессорами с различной архитектурой может быть использована данная команда. Однако в современных системах преобразование информации осуществляется контроллерами, в связи с чем данную команду можно считать избыточной.
Следующей отличительной чертой микропроцессоров класса CISC является наличие большого количества режимов адресации. Это можно объяснить тем, что эти процессоры являются двухоперандными, и один из операндов может находиться в памяти. Для обеспечения указания месторасположения этого операнда и необходимо использование большого количества различных режимов адресации. Ниже представлены режимы адресации микропроцессоров фирмы Intel.
При использовании неявной адресации операнд адресуется неявно, т.е. в команде отсутствуют в явном виде поля для адресации этого операнда. Примером команды с неявной адресацией может служить команда установки в единицу флага переноса – STC.
При использовании регистровой адресации операнд находится в одном из внутренних регистров общего назначения микропроцессора. Примером может служить команда инкремента операнда, находящегося в регистре ESI
inc esi.
В режиме непосредственной адресации операнд находится в самой команде, т.е. хранится вместе с командой. Например, если необходимо занести константу в регистр EAX, то можно воспользоваться командой передачи
mov eax, 0f0f0f0f0h.
Остальные режимы адресации осуществляют обращение к памяти. При использовании прямой адресации непосредственно в самой команде содержится адрес, по которому процессор выполняет обращение к памяти. Если необходимо передать в регистр AL байт из памяти с адресом [2000h], то используется команда mov al,[2000h].
Остальные режимы используют косвенную адресацию, при этом адрес, по которому процессор может обратиться к памяти, находится либо в регистре общего назначения, либо же находится в ячейке памяти. Если адрес находится в регистре, то такая адресация называется косвенной регистровой.
В качестве регистра, содержащего косвенный адрес, может быть использован любой регистр. Такой режим адресации называется базовой или индексной адресацией. Например, если необходимо осуществить обмен содержимого регистра EBX и двойного слова по адресу, хранящемуся в регистре EBX, необходимо воспользоваться командой xchg ebx, [ebx].
Обобщением базовой адресации является базовая адресация со смещением, при этом к значению адреса, находящемуся в базовом регистре, прибавляется целое число, рассматриваемое как число со знаком. Этот режим адресации предназначен для обращения к соседним ячейкам памяти относительно эффективного адреса в базовом регистре. Если необходимо прибавить слово, находящееся в регистре DX, к слову находящемуся в памяти по адресу, указанному в регистре ECX со смещением 10h, то используется команда add [ecx+10h], dx.
Следующий режим косвенной адресации – это базовая индексная адресация, при которой адрес рассчитывается при сложении содержимого двух регистров общего назначения. Разновидностью этой адресации является базовая индексная адресация со смещением – наиболее сложный режим адресации. При этом виде адресации к содержимому суммы двух регистров общего назначения прибавляется целое число, указанное в команде.
Начиная с микропроцессора 80386, появилась возможность реализовать базовую индексную адресацию, при которой содержимое индексного регистра может быть умножено на коэффициент, равный 1, 2, 4 или 8 (для реализации такой возможности используется SIB байт).
Для указания того, какой режим адресации используется, служит специальный байт, который называется байтом MOD R/M, и который в формате команды располагается после кода операции. В зависимости от значений отдельных полей этого байта и будет использован тот или иной режим адресации. Если же должен быть использован режим адресации, при котором содержимое индексного регистра умножается на какой-либо коэффициент, то в этом случае после байта MOD R/M в команде микропроцессора следует байт, который называется SIB байт.
Наконец, последней отличительной чертой CISC микропроцессоров является переменная длина команд, например, в микропроцессорах фирмы Intel длина команд изменяется от 1 байта до максимального размера в 15 байт. В состав команды могут входить до 4 префиксных байт, которые влияют на выполнение данной команды, до 2 байт кода операции, два байта режимов адресации, до 4 байт непосредственного операнда и до 4 байт указания смещения. Очевидно, что такой сложный состав инструкций определяет и сложность функции дешифрации, которая реализуется в микропроцессорах для определения выполняемой команды. Кроме того, при использовании команд переменной длины невозможно осуществить декодирование следующей команды до того, как закончится декодирование предыдущей.
64-разрядные микропроцессоры
Разработанная компанией AMD 64-разрядная архитектура x86-64 (позднее переименованная в AMD64) является расширением архитектуры Intel IA-32. Основной отличительной особенностью AMD64 является поддержка 64-битных регистров общего назначения, 64-битных арифметических и логических операций над целыми числами и 64-битных виртуальных адресов. Для адресации новых регистров для команд введены так называемые «префиксы расширения регистра».