Сервис для
сео - оптимизаторов

Найди ошибки на сайте
Ошибки мешают продвижению сайта
Исправь ошибки на сайте
Сайт без ошибок продвигать легче
Получи новых клиентов
Новые клиенты принесут больше прибыль

Архитектуры Pentium и Pentium Pro - INF3151 - выпуск 2017 - Университет в Осло

  1. 1 процессор Pentium / Prentium Pro
  2. 1.2 Регистрация набора
  3. Регистры общего назначения
  4. Сегментные регистры
  5. EFLAGS Регистрация
  6. EIP Register (указатель инструкций)
  7. 1.3 Адресация
  8. Типы данных
  9. Адресация памяти
  10. 1.4 Сброс процессора
  11. 2 Программирование сборки
  12. 2.1 Операнды памяти
  13. 2.2 Синтаксис инструкции
  14. 2.3 Директивы ассемблера
  15. 2.4 Встроенная сборка
Кай Ли, Принстонский университет

Целью данной документации является предоставление краткой и краткой документации об архитектурах ПК Pentium. Он содержит краткое описание процессоров Intel Pentium и Pentium Pro и краткое введение в программирование на ассемблере с помощью ассемблера Gnu.

Два полезных справочника: Руководство для разработчиков семейства Pentium Pro, том 2: Справочник программиста, Intel Corporation, 1996, и Руководство для разработчиков семейства Pentium Pro, том 3: Руководство по написанию операционной системы, Intel Corporation, 1996. Он-лайн версии доступны по адресу http://www.x86.org/intel.doc/686manuals.htm ,

1 процессор Pentium / Prentium Pro

1.1 Режимы

Процессор Pentium и Pentium Pro имеет три режима работы:

  • Реальный адрес мод . Этот режим позволяет процессору адресовать «реальный» адрес памяти. Он может адресовать до 1 МБ памяти (20-битный адрес). Его также можно назвать «незащищенным» режимом, поскольку код операционной системы (например, DOS) работает в том же режиме, что и пользовательские приложения. В процессорах Pentium и Prentium Pro этот режим совместим с более ранними процессорами Intel, такими как 8086. Процессор устанавливается в этот режим после включения питания или сброса и может переключаться в защищенный режим с помощью одной инструкции.
  • Защищенный режим. Это предпочтительный режим для современной операционной системы. Это позволяет приложениям использовать адресацию виртуальной памяти и поддерживает несколько сред программирования и защиты.
  • Режим управления системой. Этот режим предназначен для быстрого создания снимка состояния и его возобновления. Это полезно для управления питанием.

Существует также режим virtual-8086, который позволяет процессору выполнять программное обеспечение кода 8086 в защищенной многозадачной среде.

1.2 Регистрация набора

Существует три типа регистров: регистры данных общего назначения, регистры сегментов и регистры состояния и управления. На следующем рисунке показаны эти регистры:

Регистры общего назначения

Восемь 32-разрядных регистров данных общего назначения используются для хранения операндов для логических и арифметических операций, операндов для вычисления адресов и указателей памяти. Ниже показано, для чего они используются:

  • EAX - Аккумулятор для операндов и данных результатов.
  • EBX Указатель на данные в сегменте DS.
  • ECX Counter для строковых и циклических операций.
  • ESI - указатель на данные в сегменте, указанном регистром DS; указатель источника для строковых операций.
  • EDI - указатель на данные (или пункт назначения) в сегменте, указанном регистром ES; целевой указатель для строковых операций.
  • ESP Указатель стека (в сегменте SS).
  • EBP - указатель на данные в стеке (в сегменте SS).

На следующем рисунке показано, что младшие 16 битов регистров общего назначения могут использоваться с именами AX, BX, CX, DX, BP, SP, SI и DI (имена соответствующих 32-битных имеют префикс " E "для" расширенного "). На каждый из младших двух байтов регистров EAX, EBX, ECX и EDX могут ссылаться имена AH, BH, CH и DH (старшие байты) и AL, BL, CL и DL (младшие байты).

Сегментные регистры

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

  • CS: регистр сегмента кода
  • SS: регистр стекового сегмента
  • DS, ES, FS, GS: регистры сегментов данных

Четыре регистра сегментов данных предоставляют программам гибкие и эффективные способы доступа к данным.

Современная операционная система и приложения используют (несегментированную) модель памяти: все регистры сегментов загружаются с одним и тем же селектором сегмента, так что все ссылки памяти, которые делает программа, относятся к одному пространству линейных адресов.

При написании кода приложения вы обычно создаете селекторы сегментов с директивами ассемблера и символами. Затем ассемблер и / или компоновщик создает фактические селекторы сегментов, связанные с этими директивами и символами. Если вы пишете системный код, вам может потребоваться создать селекторы сегментов напрямую. (Подробное описание структуры данных селектора сегментов приведено в главе 3 «Управление памятью в защищенном режиме» Руководства разработчика по семейству Pentium Pro, том 3.)

Проект 1 использует режим реального адреса и должен правильно настроить регистры сегментов.

EFLAGS Регистрация

32-битный регистр EFLAGS содержит группу флагов состояния, флаг управления и группу системных флагов. Ниже показана функция битов регистра EFLAGS:
Функция EFLAG Регистр битов или битов ID Флаг (ID) 21 (система) Виртуальное ожидание прерывания (VIP) 20 (система) Виртуальный флаг прерывания (VIF) 19 (система) Проверка выравнивания (AC) 18 (система) Виртуальный режим 8086 (ВМ) 17 (система) Флаг возобновления (RF) 16 (система) Вложенная задача (NT) 14 (система) Уровень привилегий ввода / вывода (IOPL) 13–12 (система) Флаг переполнения (OF) 11 (система) Флаг направления (DF) 10 (система) Флаг разрешения прерывания (IF) 9 (система) Флаг прерывания (TF) 8 (система) Флаг знака (SF) 7 (состояние) Флаг нуля (ZF) 6 (состояние) Вспомогательный флаг переноса (AF) 4 (состояние) ) Флаг четности (PF) 2 (статус) Флаг переноса (CF) 0 (статус)
Биты 1, 3, 5, 15 и 22–31 этого регистра зарезервированы. Чтобы понять, что означают эти поля и как их использовать, см. Разделы 3.6.3 и 3.6.4 в Руководство для разработчиков семейства Pentium Pro, том 2: Справочное руководство для программистов.

EIP Register (указатель инструкций)

Регистр EIP (или указатель инструкций) также можно назвать «счетчиком программ». Он содержит смещение в текущем сегменте кода для следующей команды, которая будет выполнена. Он продвигается от одной границы инструкции к следующей в прямолинейном коде или перемещается вперед или назад с помощью ряда инструкций при выполнении инструкций JMP, Jcc, CALL, RET и IRET. EIP не может быть доступен напрямую с помощью программного обеспечения; он управляется неявно с помощью команд передачи управления (таких как JMP, J cc , CALL и RET), прерываний и исключений. Регистр EIP можно загрузить косвенно, изменив значение указателя инструкции возврата в стеке процедур и выполнив инструкцию возврата (RET или IRET).

Обратите внимание, что значение EIP может не совпадать с текущей инструкцией из-за предварительной выборки инструкции. Единственный способ прочитать EIP - выполнить инструкцию CALL и затем прочитать значение указателя инструкции возврата из стека процедур.

Процессоры x86 также имеют управляющие регистры, которые не используются в проекте 1 и, таким образом, опущены в этом документе.

1.3 Адресация

Бит и порядок байтов

В процессорах Pentium и Pentium-Pro в качестве порядка следования байтов используется порядок байтов. Это означает, что байты слова нумеруются, начиная с младшего значащего байта, и что младшие значащие биты слова начинаются с младшего значащего байта.

Типы данных

Pentium / Pentium Pro предоставляет четыре типа данных: байт (8 бит), слово (16 бит), двойное слово (32 бита) и четырехсловное слово (64 бита). Обратите внимание, что двойное слово эквивалентно «длинному» в ассемблере Gnu.

Адресация памяти

Можно использовать либо плоскую модель памяти, либо режим сегментированной памяти. При использовании модели плоской памяти память представляется программе как единое непрерывное адресное пространство, называемое линейным адресным пространством. Код (инструкция программы),
данные и стек процедур содержатся в этом адресном пространстве. Линейное адресное пространство является адресуемым в байтах, причем адреса работают непрерывно от 0 до 2 32 - 1.

В режиме сегментированной памяти память представляется программе как группа независимых адресных пространств, называемых сегментами. При использовании этой модели код, данные и стеки обычно содержатся в отдельных сегментах. Для адресации байта в сегменте программа должна выдать логический адрес, который состоит из селектора сегмента и смещения. (Логический адрес часто называют дальним указателем.) Селектор сегмента идентифицирует сегмент, к которому осуществляется доступ, а смещение идентифицирует байт в адресном пространстве сегмента. Программы, работающие на Pentium Pro
Процессор может адресовать до 16383 сегментов разных размеров и типов. Внутри все сегменты, определенные для системы, отображаются в линейное адресное пространство процессора. Таким образом, процессор преобразует каждый логический адрес в линейный адрес для доступа к ячейке памяти. Этот перевод прозрачен для прикладной программы.

1.4 Сброс процессора

Холодная или горячая загрузка может перезагрузить процессор. Холодная загрузка включает систему, а горячая загрузка означает, что когда все три клавиши CTRL-ALT-DEL все нажаты вместе, BIOS клавиатуры установит специальный флаг и перезагрузит процессор.

После сброса процессор переходит в реальный режим с отключенными прерываниями, а регистры ключей устанавливаются в известное состояние. Например, состояние регистра EFLAGS - 00000002H, и память не изменяется. Таким образом, память будет содержать мусор при холодной загрузке. Процессор перейдет в BIOS (Basic Input Output Services), чтобы загрузить программу загрузчика начальной загрузки с дисковода гибких дисков или жесткого диска, и начнет выполнение загрузчика. BIOS загружает загрузчик на фиксированный адрес 0: 7C00 и переходит на начальный адрес.

2 Программирование сборки

Часто требуется время, чтобы освоить методы программирования на языке ассемблера для конкретной машины. С другой стороны, если вы знакомы с другим процессором, сборка программирования для процессоров Pentium или Pentium Pro не займет много времени.

В этом разделе предполагается, что вы уже знакомы с синтаксисом сборки Gnu (изученным из курса Введение в системы программирования или его эквивалента). Самый простой способ научиться программированию на ассемблере - это скомпилировать простую C-программу в ее исходный код на ассемблере в виде шаблона. Например, gcc -S -c foo.c скомпилирует foo.c из его исходного кода сборки foo.s. Исходный код расскажет вам общие коды операций, директивы и синтаксис адресации.

Цель этого раздела - ответить на некоторые часто встречающиеся вопросы и дать указатели на соответствующие документы.

2.1 Операнды памяти

Процессоры Pentium и Pentium Pro используют архитектуру сегментированной памяти. Это означает, что на ячейки памяти ссылаются с помощью селектора сегмента и смещения:

  • Селектор сегмента указывает сегмент, содержащий операнд, и
  • Смещение (количество байтов от начала сегмента до первого байта операнда) указывает линейный или эффективный адрес операнда.

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

  • Регистр сегмента кода CS для выборок команд
  • Регистр сегмента стека SS для толчков и всплесков стека, а также ссылок, использующих ESP или EBP в качестве базового регистра
  • Регистр сегмента данных DS для всех ссылок на данные, кроме тех случаев, когда они относятся к месту назначения в стеке или строке
  • Регистр сегмента данных ES для пунктов назначения строковых инструкций

Смещенная часть адреса памяти может быть указана либо в виде статического значения (называемого смещением ), либо путем вычисления адреса, состоящего из одного или нескольких следующих компонентов:

  • Смещение - 8-, 16- или 32-битное значение.
  • База Значение в регистре общего назначения.
  • Индекс Значение в регистре общего назначения, кроме EBP.
  • Коэффициент масштабирования - значение 2, 4 или 8, умноженное на значение индекса.

Эффективный адрес вычисляется следующим образом: Смещение = База + (Индекс ´ Масштаб) + смещение Смещение, которое возникает в результате добавления этих компонентов, называется эффективным адресом выбранного сегмента . Каждый из этих компонентов может иметь либо положительное, либо отрицательное значение (дополнение 2), за исключением коэффициента масштабирования.

2.2 Синтаксис инструкции

Существует два соглашения об их синтаксисе и представлениях: Intel и AT & T. Большинство документов, в том числе на http://www.x86.org, используют соглашение Intel, тогда как ассемблер Gnu использует соглашение AT & T. Основными отличиями являются:
Intel AT & T (синтаксис Gnu) Неограниченные операнды
например: нажать 4
mov ebx, d00ah Предшественник "$"
например: толкнуть $ 4
movl $ 0xd00a,% eax Регистрация операндов Неограничено
например: eax предшествует "%"
Например:% eax Порядок аргументов (например, добавляет адрес переменной C "foo" для регистрации EAX) Dest, source [, source2]
Например: добавить eax, _foo Source, [source,] dest
Например: addl $ _foo,% eax Операнды одного размера Неявные с именем регистра, байтом ptr , словом ptr или dword ptr
например: mov al, foo opcode {b, w, l}
например: movb foo,% al Адрес переменной C "foo" [_foo] _foo Адресная память, указанная регистром (например, EAX) [eax] (% eax) Адрес адреса смещения переменной на значение в регистре [eax + _foo] _foo (% eax) Адрес значения в массиве «foo» из 32-разрядных целых чисел [eax * 4 + foo] _foo (,% eax, 4) Эквивалентно коду C * (p + 1) Если EAX содержит значение p, затем [eax + 1] 1 (% eax)
Кроме того, с синтаксисом AT & T имя для длинного JUMP - ljmp, а long CALL - lcall.

Раздел 6-6 Руководство для разработчиков семейства Pentium Pro, том 2: Справочное руководство для программистов имеет полный список инструкций Pentium Pro. Раздел 11 содержит подробное описание каждой инструкции.
Названия команд, очевидно, используют соглашение Intel, и вам необходимо преобразовать их в синтаксис AT & T.

2.3 Директивы ассемблера

Директивы ассемблера Gnu не зависят от машины, поэтому применимы ваши знания о программировании ассемблера.
Все имена директив начинаются с точки "." а остальные буквы в нижнем регистре. Вот несколько примеров часто используемых директив:

    .ascii "строка" определяет ASCII-строку "строка"

    .byte 10, 13, 0 определяет три байта

    .word 0x0456, 0x1234 определяет два слова

    .long 0x001234, 0x12345 определяет два длинных слова

    .equ STACK_SEGMENT, 0x9000 устанавливает символ STACK_SEGMENT на значение 0x9000

    Символ .globl делает «символ» глобальным (полезно для определения глобальных меток и имен процедур)

    .code16 говорит ассемблеру вставить соответствующие префиксы переопределения, чтобы код работал в реальном режиме.

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

2.4 Встроенная сборка

Самый базовый формат встроенного ассемблерного кода в ваш ассемблерный код, сгенерированный компилятором gcc, заключается в использовании

    asm («инструкция по сборке»);

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

Общий формат написания встроенного ассемблера в C:

    asm («операторы»: output_regs: input_regs: used_regs);

где заявления являются инструкциями по сборке. Если существует более одной инструкции, вы можете использовать "\ n \ t", чтобы разделить их, чтобы они выглядели красиво. «input_regs» сообщает компилятору gcc, какие переменные C перемещаются в какие регистры. Например, если вы хотите загрузить переменную «foo» в регистр EAX и «bar» в регистр ECX, вы можете сказать, что gcc использует отдельные буквы для представления всех регистров:
Отдельные буквы Reigsters a eax b ebx c ecx d edx S esi D edi I постоянное значение (от 0 до 31) q выделить регистр из EAX, EBX, ECX, EDX r выделить регистр из EAX, EBX, ECX, EDX, ESI, EDI Обратите внимание, что вы не можете указать регистр AH или AL таким образом. Вам нужно сначала добраться до EAX, а затем идти оттуда.

«output_regs» предоставляет выходные регистры. Удобный способ сделать это - позволить компилятору gcc выбрать регистры для вас. Вам нужно сказать «= q» или «= r», чтобы компилятор gcc выбрал регистры для вас. Вы можете ссылаться на первый выделенный регистр с «% 0», второй с «% 1» и т. Д. В инструкциях по сборке. Если вы ссылаетесь на регистры в списке входных регистров, вы просто говорите «0» или «1» без префикса «%».

«used_regs» перечисляет регистры, которые используются (или забиты) в коде сборки.

Чтобы понять, как именно это сделать, попробуйте использовать gcc для компиляции фрагмента кода C, содержащего следующую встроенную сборку:

    asm ("leal (% 1,% 1,4),% 0"
    : "= r" (x_times_5)
    : "r" (x));

а также

    asm ("leal (% 0,% 0,4),% 0"
    : "= г" (х)
    : "0" (х));

Кроме того, чтобы оптимизатор компилятора gcc не удалял код сборки, вы можете добавить ключевое слово volitale, чтобы обеспечить встроенный код. Вот несколько примеров макросов: для отключения и включения прерываний.

Похожие

Варианты ассемблера
High Level Assembler предоставляет вам множество опций ассемблера для управления работой и выходом ассемблера. Вы можете установить значения по умолчанию во время установки ассемблера для большинства из этих опций ассемблера. Вы также можете исправить параметр по умолчанию, чтобы он не мог быть переопределен во время сборки. Увидеть Поставляемые IBM опции по умолчанию для ассемблера
Руководство пользователя Cisco MediaSense, выпуск 11.5 (1)
... products-installation-and-configuration-guides-list.html"> Унифицированная документация пограничного элемента , На следующем рисунке показано развертывание MediaSense с элементом Cisco Unified Border Element. Даже в развертывании Cisco Unified Border Element MediaSense зависит от Unified Communications Manager для предоставления услуг аутентификации. Рисунок 1. Развертывание MediaSense с элементом Cisco Unified Border
3 приложения для удаленного просмотра веб-камеры на iPad / iPhone
У меня есть 2-летний ребенок, и у меня также есть компьютер почти в каждой комнате моего дома. Когда мне нужно что-то сделать в другой части дома, мне очень больно останавливать то, что я делаю, и проверять, чтобы моя дочь не собиралась нырять с кровати. Как только я понял, что у меня в каждой комнате дома есть веб-камера из-за ноутбуков, я решил, что должно быть приложение для iPad / iPhone, которое позволило бы мне транслировать по беспроводной сети прямую трансляцию с веб-камеры.
Получите доступ к Mathematica Desktop, Mathematica Online и Wolfram | Alpha Pro. Mathematica в н...
Получите доступ к Mathematica Desktop, Mathematica Online и Wolfram | Alpha Pro. Mathematica в настоящее время установлена ​​в следующих местах: Компьютерные лаборатории - Все общие или общедоступные лаборатории.
Что такое работа шахтера? Пути добычи соли в прошлом
03-02-2018 / Для посетителей Как мы хорошо знаем, соль добывалась давно. В Величке первая добыча состоялась уже в ... неолите! Конечно, за столетия способы добычи соли изменились - эти очень примитивные были заменены на более современные. В настоящее время все выглядит совершенно иначе, чем раньше, но вы задумывались о том, что представляет
Как мы сломали PHP, взломали Pornhub и заработали 20 000 долларов
Все началось с аудита Pornhub, затем PHP и закончилось нарушением обоих… ТЛ; др: Мы получили удаленное выполнение кода на pornhub.com и заработали $ 20 000 за баги Hackerone , Мы обнаружили две уязвимости использования после освобождения в алгоритме сборки мусора PHP. Эти уязвимости можно было использовать удаленно через функцию несериализации PHP.
Новый iPad Pro 2018 12,9-дюймовый
... Pro - это компьютер, а не планшет. Позволю себе не согласиться. Но это гораздо больше, чем планшет. Как бы вы это ни называли, 12,9-дюймовый iPad Pro (от 999 долларов; 1327 долларов с клавиатурой и Apple Pencil) является одним из самых мощных мобильных устройств, когда-либо созданных. Процессор A12X Bionic на этом планшете вращается вокруг даже ноутбуков с процессором Core i7 при выполнении определенных задач, и все же устройство весит всего 1,4 фунта. Apple также
Выпущен ClamAV 0.99 с основными новыми функциями и изменениями
ClamAV антивирусный движок с открытым исходным кодом, который используется для сканирования всей системы Linux, веб-серверов и почтового сервера. Операционная система Linux не содержит вирусов (для вирусов трудно работать на ней), хотя она и для вирусов, из-за совершенствования технологий изо дня в день увеличивается количество вирусов и вредоносных программ. Поэтому существует множество причин, по которым вам может понадобиться антивирусный
Обзор рендеринга конвейера
Конвейер рендеринга - это последовательность шагов, которые OpenGL выполняет при рендеринге объектов. Этот обзор предоставит общее описание шагов в конвейере. Трубопровод Схема рендеринга конвейера. Синие прямоугольники
.INFO регистрация доменов | Получите ваше доменное имя .INFO
Доменное имя .INFO - Общий .INFO - это расширение домена для «информационных» сайтов. Он управляется Afilias и может быть зарегистрирован кем-либо в течение как минимум одного года. Особенности и требования Ниже приведен список требований и возможностей для регистрации доменного имени .INFO. Конфиденциальность домена разрешена IDN
Инструкции по настройке электронной почты на вашем новом компьютере Dell
Хотите настроить свою электронную почту? Эта статья содержит информацию о том, как настроить электронную почту с помощью различных почтовых приложений, таких как: Gmail, Microsoft Office Outlook и Windows Mail, а также ресурсы для устранения проблем с электронной почтой. Содержание: Прежде чем начать Microsoft Office Outlook Почта Windows Gmail

Комментарии

Как начать ограничивать потребление передачи данных?
Как начать ограничивать потребление передачи данных? 1. Запустите приложение и перейдите в раздел « Настройки» в разделе « Профиль » . 2. В подкатегории « Настройки» найдите « Использовать мобильные данные» . 3. Активируйте функции. Используйте меньше данных.
IPad Pro - это замена ноутбука?
IPad Pro - это замена ноутбука? Не для меня. Однако, если вам нравится идея взаимодействия в основном с помощью касания или карандаша, вы будете поражены чистой производительностью и универсальностью этого планшета. Этот iPad Pro более чем заработал свое место на нашем Лучшие таблетки а также Лучшие детские планшеты стр. Цена и доступность 12,9-дюймовый

Что такое работа шахтера?
Как начать ограничивать потребление передачи данных?
IPad Pro - это замена ноутбука?
IPad Pro - это замена ноутбука?