Различия между версиями 8 и 9
Версия 8 от 2016-04-26 04:46:05
Размер: 13582
Редактор: ali
Комментарий:
Версия 9 от 2016-04-27 15:05:16
Размер: 24085
Редактор: ali
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 60: Строка 60:
=== Intel *86 === === Intel x86* ===
Строка 64: Строка 64:
 Архитектура х86_64 является примером CISC-архитектуры (Complex Instruction Set Computer – компьютер с полным набором команд). В отличие от команд в RISC-архитектурах, таких как MIPS, каждая CISC-команда способна произвести больше работы. Из-за этого программы для CISC-архитектур обычно состоят из меньшего количества команд. Кодировки команд были подобраны так, чтобы обеспечивать наибольшую компактность кода – это требовалось в те времена, когда стоимость оперативной памяти было гораздо выше, чем сейчас. Команды имеют переменную длину, которая зачастую меньше 32 бит. Недостаток же состоит в том, что сложные команды трудно дешифровать, к тому же они, как правило, работают медленнее.




Табл. Основные отличия между MIPS и x86_64
||Характеристики|| MIPS|| x86_64||
||Количество регистров||32, общего назначения|| 16, некоторые ограничения по использованию||
||Количество операндов||3 (2 источника, 1 назначение)|| 2 (1 источник, 1 источник/назначение)||
||Расположение операндов|| Регистры или непосредственные операнды || Регистры, непосредственные операнды или память||
||Размер операнда || 32 бита|| 8, 16, 32 или 64 бита||
||Коды условий|| Нет|| Да||
||Типы команд|| Простые|| Простые и сложные||
||Размер команд|| Фиксированный, 4 байта|| Переменный, 1–16 байтов||

Регистры: 64-разрядные RAX, RBX, RCX, RDX, RSI,
RDI, RSP, RBP и R8,R9,...,R15; 32-разрядные ЕАХ, ЕВХ, ЕСХ, EDX, ESI,
EDI, ESP, EBP; R8D-R15D являются младшими половинами 64-разрядных
регистров; 16-разрядные АХ, ВХ, CX, DX, SI, DI, SP, BP, R8W -R15W явля­
ются младшими частями 32-разрядных регистров; 8-битные регистры АН,
ВН, СН, DH и AL, BL, CL, DL, SIL, DIL, SPL, BPL, R8L-R15L - старшие и
младшие части 16-битных регистров соответственно;

  Эти шестнадцать регистров можно, за некоторым исключением, считать регистрами общего назначения. Некоторые команды не могут использовать некоторые из них. Другие команды всегда записывают результат в определенные регистры. Регистр RSP, как правило, используется как указатель стека.
 Счетчик команд в архитектуре х86 называется RIP (instruction pointer). Он увеличивается при переходе от одной команды к другой, а также может быть изменен командами ветвлений, безусловных переходов и вызова процедур.
 

 Доступ к 64-битным регистрам и новым регистрам осуществляется через специальный REX-префикс. Таким образом, все опкоды команд, которые работают с 64-битными регистрами, увеличиваются в размере как минимум на 1 байт, и возникает серьёзная проблема оптимизации кода. Поэтому рекомендуется везде, где возможно, использовать 32-битные регистры.
 
Команды х86_64 содержат только два операнда: операнд-источник и операнд-источник/назначение. Следовательно, команда х86 всегда записывает результат на место одного из операндов.

Табл. Расположение операндов

||Источник/Назначение||Источник|| Пример|| Выполняемая функция||
||Регистр|| Регистр|| add EAX, EBX|| EAX <– EAX + EBX||
||Непосредственный операнд||Регистр|| add EAX, 42|| EAX <– EAX + 42||
||Регистр|| Память|| add EAX, [20]|| EAX <– EAX + Mem[20]||
||Память|| Регистр|| add [20], EAX|| Mem[20] <- Mem[20] + EAX||
||Непосредственный операнд||Память|| add [20], 42|| Mem[20] <- Mem[20] + 42||


 Возможны любые комбинации, ''исключая память–память''.

 В то время как MIPS всегда оперирует с 32-битными словами данных, команды х86 могут использовать 8-, 16- 32- или 64-битные данные.В 64-битном режиме размер адреса по умолчанию равен 8 байтам, размер операнда по умолчанию равен 4 байтам

 
 Архитектура х86 имеет 64-битное( на самом деле 48-битное) пространство памяти с побайтовой адресацией. х86 поддерживает много режимов адресации памяти. Расположение ячейки памяти задается при помощи комбинации регистра базового адреса, смещения и регистра масштабируемого индекса.

 Табл. Режимы адресации памяти

 
|| Пример|| Назначение|| Комментарий||
||add EAX, [20]|| EAX <– EAX + Mem[20]||Смещение (displacement)||
||add EAX, [ESP]|| EAX <– EAX + Mem[ESP]|| Базовая адресация||
||add EAX, [EDX+40]|| EAX <– EAX + Mem[EDX+40]||Базовая адресация + смещение||
||add EAX, [60+EDI*4]|| EAX <– EAX + Mem[60+EDI*4]||Смещение + масштабируемый индекс||
||add EAX, [EDX+80+EDI*2]|| EAX <– EAX + смещение + Mem[EDX+80+EDI*2]||Базовая адресация + масштабируемый индекс||

 Смещение может иметь 8-, 16- или 32-битное значение. Регистр
масштабируемого индекса может быть умножен на 1, 2, 4 или 8. Режим
базовой адресации со смещением аналогичен режиму относительной
адресации в MIPS, используемому для команд загрузки и сохранения.
Масштабируемый индекс обеспечивает простой способ доступа к
массивам и структурам с 2-, 4- или 8-байтовыми элементами без
необходимости использовать команды для явного расчета адресов.

В 64-битном режиме введён режим адресации относительно RIP. В случае адре­
сации относительно RIP используются не 64-битные адреса данных и переходов,
а 32-битные. Таким образом, можно достигнуть почти 40%-ного уменьшения раз­
мера кода.


Флаги состояния

 
 Другие особенности х86:
  *Сегменты
  *Порты
  * команды, работающие с цепочками (последовательностями или строками) байтов или слов. Эти команды реализуют операции копирования, сравнения и поиска определенного значения. В современных процессорах такие команды, как правило, работают медленнее, чем последовательность простых команд, делающих то же самое, поэтому их лучше избегать.
  *префиксы - используются для изменения размера операндов, захвата внешней шины , предсказания ветвлений или повторения команды при обработке цепочки байтов или слов.


 Архитектуры x86* – это мешанина из всевозможных решений и функциональности, накопленных за годы разработки. Некоторые из них давно не несут никакой пользы, но приходится сохранять их для обратной совместимости со старыми программами. У этой архитектуры слишком мало регистров, ее команды сложно дешифровать, а набор команд трудно объяснить. Несмотря на эти недостатки, x86 остается доминирующей архитектурой для персональных компьютеров потому, что невозможно переоценить важность совместимости программного
обеспечения, и потому, что огромный рынок оправдывает затраты на разработку все более быстрых x86-совместимых микропроцессоров.

Обзор архитектур современных ЭВМ

ARM

  1. Инструкции ARM(Паттерсон)
    • ARM является наиболее популярной архитектурой набора инструкций для встроенных устройств и используется на более чем трех миллиардах производимых за каждый год устройств. Изначально предназначенная для системы Acorn RISC Machine, название которой позднее изменилось на Advanced RISC Machine, apхитектура ARM появилась в том же году, что и архитектура MIPS, и следовала схожим принципам. Все совпадения перечислены в табл. 2.11. Принципиальное отличие заключалось в том, что у MIPS больше регистров, а у ARM — больше режимов адресации. Табл. 2.11 Сходство наборов инструкций ARM и MIPS

      ARM

      MIPS

      год представления

      1985

      1985

      размер инструкции

      32

      32

      размер адресного пространства

      32, плоское

      32, плоское

      выравнивание данных

      да

      да

      модели адресации данных

      9

      3

      целочисленные регистроы

      16 GPO регистров, по 32 бита

      31 GPO регистров, по 32 бита

      ввод-вывод

      с отображением на память

      с отображением на память

      Как показано в табл. 2.12. для MIPS и для ARM использовались похожие основные наборы арифметическо-логических инструкций и инструкций переноса данных.

      tabl_2_12_1.png tabl_2_12_2.png Таблица 2.12. ARM-инструкции типа регистр-регистр и инструкции переноса данных, эквивалентные основным инструкциям MIPS. прочерки означают, что операция в этой архитектуре недоступна или не синтезирована в виде нескольких инструкций. Если имеется сразу несколько инструкций, эквивалентных основным инструкциям MIPS, они разделены запятыми. Сдвиги в ARM включены в виде части каждой инструкции обработки данных, поэтому сдвиги c верхним индексом 1 являются всего лишь разновидностью инструкции move. например lsг‘. Заметьте. что в ARM нет инструкции деления

  2. Режимы адресации.
    • B табл. 2.13 показаны режимы адресации данных, поддерживаемые в ARM. B отличие от MIPS ARM не выделяет регистр для содержания нулевого начения. В MIPS имеется всего три простых режима адресации данных (см. рис. 2.12), a вот у ARM имеется девять режимов, которые включают довольно сложные вычисления. Haпример, в ARM имеется режим адресации, который для формирования адреса может сдвигать значение одного регистра на любое количество позиций, добавлять его к значениям других регистров, а затем обновлять значение одного из регистров, присваивая ему значение полученного нового адреса. табл. 2.13

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

      ARM v.4

      MIPS

      регистровый

      +

      +

      непосредственный

      +

      +

      регистр + смещение( побазе)

      +

      +

      регистр + регистр(индексированный)

      +

      -

      регистр + маштабированныйрегистр(маштабированный)

      +

      -

      регистр + смещение и обновление регистра

      +

      -

      регистр + регистр и обновление регистра

      +

      -

      автоинкрементный,автодэкрементный

      +

      -

      относительный по PC

      +

      -

      Таблица 2.13. Сводка режимов адресации данных. В ARM имеются отдельные режимы косвенной регистровой адресации и адресации «регистр + смещение», простое помещения нуля в смещение во втором режиме не используется, чтобы получить более широкий диапазон адресации, ARM сдвигает смещение на один или два разряда влево, если размер данных составляет полуслове или слово
  3. Сравнение и условный переход
    • B MIPS для вычисления условий переходов используется содержимое регистров. В ARM используются традиционные четыре разряда кода условия, сохраняемые в слове состояния программы: отрицательный, нулевой, переноса и переполнения - negative, zero. carry и overflow. Они могут устанавливаться при выполнении любой арифметической или логической инструкции; в отличие от более ранних архитектур эта установка для каждой инструкции является выборочной. Явный выбор создает меньше проблем при конвейерной реализации. В ARM используются условные переходы для проверки кодов условий, чтобы определить все знаковые и беззнаковые соответствия. Инструкция сравнения - CMP вычитает один операнд из другою. а пo разнице устанавливает коды условия. Инструкция отрицательного сравнения — compare-negative (CMN) — прибавляет один операнд к другому, а по сумме устанавливает коды условий. Инструкция ТSТ выполняет логическое И двух операндов для установки всех кодов условий, кроме переполнения - overflow, а инструкция TEQ использует исключающее ИЛИ для установки значений первых трех кодов условий. Одно из необычных свойств ARM заключается в том. что каждая инструкция имеет настройку на условное выполнение в зависимости от кодов условий. Каждая инструкция начинается с четырехразрядного поля. определяющего, будет ли она работать как холостая инструкция — no operation instruction (nop) — или как настоящая инструкция, в зависимости от кодов условий. Следовательно, по сути условные переходы рассматриваются как условное выполнение инструкции безусловного перехода. Условное вы волнение позволяет избежать перехода путем обхода его инструкции. На простое условное выполнение одной инструкции требуется меньше времени и пространства для кода. На рис. 2.16 показаны форматы инструкций для ARM и MIPS. Принципиальная разница заключается в четырехразрядном поле условного выполнения в каждой инструкции и меньшем по размеру поле регистра, потому что во ARM используется в два раза меньше регистров.
    • ris_2_16.png Рис. 2.16. Форматы инструкций ARM и MIPS. Разница заключается в том, что в одной архитектуре 16. а в другой 32 регистра

  4. Уникальные характеристики ARM
    • B табл. 2.14 показаны несколько арнфметическо-логических инструкций. отсутствующих в MIPS. За неимением специально выделенного регистра, содержащего нуль. в этой архитектуре есть отдельные коды для выполнения тех операций, которые в MIPS реализуются с помощью регистра $zero. Кроме того, в ARM имеется поддержка для арифметики, оперирующей несколькими словами. Поле непосредственного значения ARM. состоящее из 12 разрядов, имеет новую интерпретацию. Восемь самых младших разрядов расширяются нулями до 32-разрядного значения, затем прокручиваются вправо на количество разрядов, указанное в первых четырех разрядах поля и умноженное на два. Одно из преимуществ заключается в том, что такая схема может представить все степени двойки в 32-разрядном слове. Было бы интересно исследовать вопрос, позволяет ли такое разделение охватить больше непосредственных значений, чем простое 12-разрядное поле. Операнд, подвергающийся сдвигу, не ограничивается непосредственными значениями. У второю регистра всех арифметических и логических операций по обработке данных есть возможность подвергнуться сдвигу еще до того, как он будет использован в операции. вариантами сдвига являются логический сдвиг влево, логический сдвиг вправо, арифметический сдвиг вправо и вращение вправо.

      Таблица: 2.14. Арифметические и логические инструкции ARM. отсутствующее в MIPStabl_2_14.png

    • В ARM также имеются инструкции для сохранения групп регистров. называемые блочными загрузками и сохранениями. Под управлением 16-разрядной маски внутри инструкций любой из 16 регистров может быть загружен из памяти или сохранен в ней с помощью одной инструкции. Эти инструкции могут сохранять и восстанавливать регистры при входе в процедуру и при возвращении из нее. Эти инструкции могут также использоваться для блочного копирования памяти, и сегодня блочное копирование приобретает все больший вес при их использование.
  5. Приложение ARM от Таненбаума ARM_Tan.pdf

Intel x86*

256_64_and_IA-32_Architectures_Developer_s_Manual__Vol__1_-_64-i.png

  • Архитектура х86_64 является примером CISC-архитектуры (Complex Instruction Set Computer – компьютер с полным набором команд). В отличие от команд в RISC-архитектурах, таких как MIPS, каждая CISC-команда способна произвести больше работы. Из-за этого программы для CISC-архитектур обычно состоят из меньшего количества команд. Кодировки команд были подобраны так, чтобы обеспечивать наибольшую компактность кода – это требовалось в те времена, когда стоимость оперативной памяти было гораздо выше, чем сейчас. Команды имеют переменную длину, которая зачастую меньше 32 бит. Недостаток же состоит в том, что сложные команды трудно дешифровать, к тому же они, как правило, работают медленнее.

Табл. Основные отличия между MIPS и x86_64

Характеристики

MIPS

x86_64

Количество регистров

32, общего назначения

16, некоторые ограничения по использованию

Количество операндов

3 (2 источника, 1 назначение)

2 (1 источник, 1 источник/назначение)

Расположение операндов

Регистры или непосредственные операнды

Регистры, непосредственные операнды или память

Размер операнда

32 бита

8, 16, 32 или 64 бита

Коды условий

Нет

Да

Типы команд

Простые

Простые и сложные

Размер команд

Фиксированный, 4 байта

Переменный, 1–16 байтов

Регистры: 64-разрядные RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP и R8,R9,...,R15; 32-разрядные ЕАХ, ЕВХ, ЕСХ, EDX, ESI, EDI, ESP, EBP; R8D-R15D являются младшими половинами 64-разрядных регистров; 16-разрядные АХ, ВХ, CX, DX, SI, DI, SP, BP, R8W -R15W явля­ ются младшими частями 32-разрядных регистров; 8-битные регистры АН, ВН, СН, DH и AL, BL, CL, DL, SIL, DIL, SPL, BPL, R8L-R15L - старшие и младшие части 16-битных регистров соответственно;

  • Эти шестнадцать регистров можно, за некоторым исключением, считать регистрами общего назначения. Некоторые команды не могут использовать некоторые из них. Другие команды всегда записывают результат в определенные регистры. Регистр RSP, как правило, используется как указатель стека.
  • Счетчик команд в архитектуре х86 называется RIP (instruction pointer). Он увеличивается при переходе от одной команды к другой, а также может быть изменен командами ветвлений, безусловных переходов и вызова процедур. Доступ к 64-битным регистрам и новым регистрам осуществляется через специальный REX-префикс. Таким образом, все опкоды команд, которые работают с 64-битными регистрами, увеличиваются в размере как минимум на 1 байт, и возникает серьёзная проблема оптимизации кода. Поэтому рекомендуется везде, где возможно, использовать 32-битные регистры.

Команды х86_64 содержат только два операнда: операнд-источник и операнд-источник/назначение. Следовательно, команда х86 всегда записывает результат на место одного из операндов.

Табл. Расположение операндов

Источник/Назначение

Источник

Пример

Выполняемая функция

Регистр

Регистр

add EAX, EBX

EAX <– EAX + EBX

Непосредственный операнд

Регистр

add EAX, 42

EAX <– EAX + 42

Регистр

Память

add EAX, [20]

EAX <– EAX + Mem[20]

Память

Регистр

add [20], EAX

Mem[20] <- Mem[20] + EAX

Непосредственный операнд

Память

add [20], 42

Mem[20] <- Mem[20] + 42

  • Возможны любые комбинации, исключая память–память. В то время как MIPS всегда оперирует с 32-битными словами данных, команды х86 могут использовать 8-, 16- 32- или 64-битные данные.В 64-битном режиме размер адреса по умолчанию равен 8 байтам, размер операнда по умолчанию равен 4 байтам Архитектура х86 имеет 64-битное( на самом деле 48-битное) пространство памяти с побайтовой адресацией. х86 поддерживает много режимов адресации памяти. Расположение ячейки памяти задается при помощи комбинации регистра базового адреса, смещения и регистра масштабируемого индекса. Табл. Режимы адресации памяти

Пример

Назначение

Комментарий

add EAX, [20]

EAX <– EAX + Mem[20]

Смещение (displacement)

add EAX, [ESP]

EAX <– EAX + Mem[ESP]

Базовая адресация

add EAX, [EDX+40]

EAX <– EAX + Mem[EDX+40]

Базовая адресация + смещение

add EAX, [60+EDI*4]

EAX <– EAX + Mem[60+EDI*4]

Смещение + масштабируемый индекс

add EAX, [EDX+80+EDI*2]

EAX <– EAX + смещение + Mem[EDX+80+EDI*2]

Базовая адресация + масштабируемый индекс

  • Смещение может иметь 8-, 16- или 32-битное значение. Регистр

масштабируемого индекса может быть умножен на 1, 2, 4 или 8. Режим базовой адресации со смещением аналогичен режиму относительной адресации в MIPS, используемому для команд загрузки и сохранения. Масштабируемый индекс обеспечивает простой способ доступа к массивам и структурам с 2-, 4- или 8-байтовыми элементами без необходимости использовать команды для явного расчета адресов.

В 64-битном режиме введён режим адресации относительно RIP. В случае адре­ сации относительно RIP используются не 64-битные адреса данных и переходов, а 32-битные. Таким образом, можно достигнуть почти 40%-ного уменьшения раз­ мера кода.

Флаги состояния

  • Другие особенности х86:
    • Сегменты
    • Порты
    • команды, работающие с цепочками (последовательностями или строками) байтов или слов. Эти команды реализуют операции копирования, сравнения и поиска определенного значения. В современных процессорах такие команды, как правило, работают медленнее, чем последовательность простых команд, делающих то же самое, поэтому их лучше избегать.
    • префиксы - используются для изменения размера операндов, захвата внешней шины , предсказания ветвлений или повторения команды при обработке цепочки байтов или слов.
    Архитектуры x86* – это мешанина из всевозможных решений и функциональности, накопленных за годы разработки. Некоторые из них давно не несут никакой пользы, но приходится сохранять их для обратной совместимости со старыми программами. У этой архитектуры слишком мало регистров, ее команды сложно дешифровать, а набор команд трудно объяснить. Несмотря на эти недостатки, x86 остается доминирующей архитектурой для персональных компьютеров потому, что невозможно переоценить важность совместимости программного

обеспечения, и потому, что огромный рынок оправдывает затраты на разработку все более быстрых x86-совместимых микропроцессоров.

ArchitectureAssembler/24_ArchitectureOverall (последним исправлял пользователь eSyr 2016-06-19 05:42:09)