WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

Pages:     || 2 | 3 | 4 | 5 |   ...   | 6 |

«ASSEMBLER 2-е издание Допущено Министерством образования Российской Федерации в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению подготовки дипломированных специалистов ...»

-- [ Страница 1 ] --

У Ч Е Б Н И К /ДЛЯ ВУЗОВ

В. И. Юров

ASSEMBLER 2-е издание

Допущено Министерством образования Российской Федерации

в качестве учебного пособия для студентов высших учебных заведений,

обучающихся по направлению подготовки дипломированных

специалистов «Информатика и вычислительная техника»

goe,

300.piter.com

Издательская программа

300 лучших учебников для высшей школы в честь 300-летия Санкт-Петербурга осуществляется при поддержке Министерства образования РФ Москва • Санкт-Петербург • Нижний Новгород • Воронеж Ростов-на-Дону • Екатеринбург • Самара Киев • Харьков • Минск 2003 ББК 32.973-018.1я УДК 681.3.06(075) Ю Рецензенты:

Гурко А. В., кандидат технических наук, доцент кафедры военной кибернетики филиала ВУ ПВО Тузов В. А., доктор физико-математических наук, профессор кафедры «Технологии программирования»

Санкт-Петербургского государственного университета Ю70 Assembler. Учебник для вузов. 2-е изд. / В. И. Юров — СПб.: Питер, 2003. — 637 с.: ил.

ISBN 5-94723-581- В учебнике рассматриваются вопросы программирования на языке ассемблера для компьютеров на базе микропроцессоров фирмы Intel. Основу книги составляет материал, являющийся частью курса, читаемого автором в высшем учебном заведении и посвященного вопросам системного программирования. По сравнению с первым изданием учебник существенно переработан. Исправлены ошибки и неточности. Добавлено описание команд для Intel-совместимых процессоров (до Pentium IV включительно).

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

Допущено Министерством образования Российской Федерации в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению подготовки дипломированных специалистов «Информатика и вычислительная техника».

ББК 32.973-018.1я УДК 681.3.06(075) Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги.

ISBN 5-94723-581 -1 © ЗАО Издательский дом «Питер», Краткое содержание Предисловие Благодарности От издательства Глава 1. Организация современного компьютера Глава 2. Программно-аппаратная архитектура IA- процессоров Intel Глава 3. Система команд процессора IA-32 Глава 4. Системы счисления Глава 5. Синтаксис ассемблера Глава 6. Первая программа Глава 7. Команды обмена данными Глава 8. Арифметические команды Глава 9. Логические команды и команды сдвига Глава 10. Команды передачи управления Глава 11. Программирование типовых управляющих структур Глава 12. Цепочечные команды Глава 13. Сложные структуры данных Глава 14. Макросредства языка ассемблера Глава 15. Модульное программирование 6 Краткое содержание Глава 16. Создание Windows-приложений на ассемблере Глава 17. Архитектура и программирование сопроцессора Вместо заключения Приложение. Система команд процессоров IA-32 Список литературы Алфавитный указатель Содержание Предисловие Глава 1. Организация современного компьютера Глава 2. Программно-аппаратная архитектура IA- Варианты микроархитектуры процессоров Intel Глава 3. Система команд процессора IA-32 Поля смещения и непосредственного операнда Функциональная классификация машинных команд Перевод чисел из одной системы счисления в другую Перевод в десятичную систему счисления Перевод в шестнадцатеричную систему счисления 8 Содержание Особенности разработки программ в Microsoft Visual Studio Арифметические операции над целыми двоичными числами Вычитание и сложение операндов большой размерности Вспомогательные команды для арифметических вычислений Арифметические операции над двоично-десятичными числами Глава 11. Программирование типовых управляющих 10 Содержание Загрузка в регистр AL/AX/EAX байтов, слов, двойных слов Сохранение в цепочке байта, слова, двойного слова Глава 16. Создание Windows-приложений Углубленное программирование на ассемблере для Win32 Организация высокоуровневого консольного ввода-вывода Глава 17. Архитектура и программирование 12 Содержание Исключения сопроцессора и их обработка Общие рекомендации по программированию сопроцессора Приложение. Система команд процессоров IA-32 Предисловие Перед вами второе, исправленное и дополненное, издание книги «Assembler» из серии книг «Учебное пособие» издательства «Питер». Материал подобран и выстроен таким образом, чтобы служить информационно-методической базой для самостоятельного и организованного в рамках различных вузовских дисциплин и факультативов изучения языка ассемблера. Исходя из этого, учебник адресован следующим категориям читателей:

^ преподавателям и студентам вузов для использования в качестве источника методически подобранной и систематизированной информации по различным аспектам применения ассемблера в контексте архитектуры Intel-совместимых процессоров;

ж специалистам, занимающимся программированием и желающим освоить ассемблер для расширения своего профессионального кругозора, придания новых свойств своему опыту и для решения конкретных практических задач;

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



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

ш изложить основы архитектуры Intel-совместимых процессоров;

^ показать неразрывную связь архитектуры процессора с его машинным языком;

* представить систему машинных команд в виде функциональных групп с тем, чтобы объяснить цели, которые преследовали разработчики процессора при введении той или иной команды в систему машинных команд;

ш научить использовать инструментальные средства разработки ассемблерных программ;

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

Язык ассемблера является символическим представлением машинного языка, он неразрывно связан с архитектурой самого процессора. По мере внесения изменений в архитектуру процессора совершенствуется и сам язык ассемблера. По этой причине книга направлена на решение комплексной задачи — не просто рассмотреть ассемблер как еще один из десятков языков программирования, а показать 14 Предисловие объективность его существования и неразрывную связь его конструкций с архитектурой конкретного процессора. Материал книги содержит описание основных особенностей архитектуры и системы команд процессоров Pentium Pro/MMX/II/ III/IV.

Изложение материала в учебнике ведется в форме глав, которых всего 17. Логически их можно разделить на четыре части.

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

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

Рассматриваются возможности ассемблера для работы со сложными структурами данных, механизм макрокоманд, вопросы организации модульного программирования, в том числе принципы связи с модулями, написанными на C/C++ и Pascal.

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

в Важная часть учебника — его приложение. В нем собрана справочная информация о командах (вплоть до Pentium IV). Данных, которые приведены в приложении, достаточно для проведения широкого круга работ — от общего знакомства с системой машинных команд до поддержки процесса дизассемблирования на уровне машинных кодов.

В других приложениях, расположенных на сайте http://www.piter.com/download, собрана справочная информация о различных средствах пакетов ассемблера MASM и TASM.

Таким образом, книга является самодостаточным учебным пособием. Ее использование позволяет сформировать фундаментальные знания по различным аспектам низкоуровневого программирования на языке ассемблера для Intel-совместимых компьютеров. В долгосрочной перспективе материал учебника может служить справочником.

По сравнению с первым изданием в учебнике сделаны многочисленные изменения. Во-первых, материал был приведен в соответствие с современным уровнем развития процессоров Intel (до Pentium IV). Во-вторых, исправлены ошибки и опечатки. Во многом это заслуга внимательных читателей, за что им отдельная благодарность. В-третьих, произведено перестроение материала с учетом существования своеобразных продолжений учебников — книг серии «Практика» издательства «Питер». Для настоящего учебника пока существует одна такая книга — «Assembler: практика». Ее содержание посвящено углубленному изучению языка ассемблера на различных востребованных на практике задачах прикладного характера. Материал книги «Assembler: практика» может служить основой для выполнения курсовых и дипломных работ, не говоря уже о его использовании при работе над различными программными проектами. Планируется появление второй книги из этой серии, которая будет ориентирована на освещение вопросов системного программирования. Каждую из этих книг следует позиционировать следующим образом. Учебник формирует основы и принципы, а на определенном этапе начинает выполнять справочные функции. Книги серии «Практикум» представляют описания вариантов реализации востребованных на практике задач прикладного и системного характера.

Об ошибках следует сказать отдельные слова. Конечно, книги, а тем более учебники, не должны содержать неточностей и ошибок, но при нынешних темпах жизни и развития техники это — недостижимый идеал. Конечно, это не говорит о том, что нельзя написать книгу без ошибок. Безусловно можно, но для этого потребуется времени в несколько раз больше и ее выход в свет может оказаться совершенно бессмысленной затратой времени и сил, так как к этому моменту перестанет быть актуальным сам предмет, которому посвящена книга. Поэтому вопрос о том, что важнее — своевременная книга, содержащая определенное количество ошибок, но помогающая читателю решить актуальные проблемы сегодняшнего дня, или идеально выверенное издание, освещающее вопросы вчерашнего дня, остается философским. Книги, в которых много исходного кода, — это особый вид книг, которые можно охарактеризовать как «книги-программы», а в программах, как известно, последних ошибок не бывает. Более того, рискну высказать мнение, что с учебной целью ошибки даже полезны. Это подтверждает и свой, и чужой опыт. Пословица «На ошибках учатся» имеет скрытый смысл — наиболее устойчивые знания формируются именно при исправлении своих и чужих ошибок. Это даже не знания, это уже профессиональный опыт. Тем не менее мои рассуждения не следует рассматривать как оправдание ошибок первого издания учебника и будущих ошибок второго издания. Они неизбежны, и автор будет благодарен всем читателям, кто заметит ошибки, неточности и просто опечатки и сообщит о них редакции или автору по указанным далее адресам электронной почты.

Часто спрашивают, для программирования каких процессоров можно использовать учебник. Ответ — для Intel-совместимых процессоров. Под термином «Intelсовместимые процессоры» подразумеваются процессоры фирм Intel, AMD, VIA, Transmeta, полностью поддерживающие базовую систему команд процессоров Intel и полностью или частично поддерживающие различные расширения базовой системы команд процессоров Intel.

Что нужно для работы с книгой? Во-первых, компьютер на базе Intel-совместимого процессора. Во-вторых, пакещ ассемблеров TASM и MASM. Причем лучше всего будет на этапе изучения использовать оба этих пакета. К сожалению, пакет TASM в самостоятельном виде уже не развивается, но работа с ним на этапе обучения достаточно комфортна, тем более что он имеет режим работы, позволяющий во многих случаях без дополнительной доработки переносить программы для 16 Предисловие использования с пакетом MASM. Последняя доступная версия этого пакета — TASM 5.0. С пакетом MASM дела обстоят лучше — он развивается. Последние доступные версии — MASM 6.14 и MASM32 версии 7.0. И наконец, для работы нужен один из текстовых редакторов класса notepad.exe.

Благодарности Хорошая традиция — выражение благодарности окружающим людям за их активный или пассивный вклад в появление книг на свет. Это не является некой формой похвальбы, а говорит лишь о том, что ты не один на белом свете и своими успехами и неудачам обязан многим людям, которых ты, возможно, никогда не видел и никогда не увидишь. Поэтому я рад и благодарен письму каждого читателя. Адрес электронной почты [email protected] всегда доступен для писем читателей относительно содержимого книг, пожеланий, сообщений о замеченных ошибках и неточностях. Особую благодарность выражаю жене Елене и детям — Саше и Юле.

От издательства Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

Все исходные тексты программ, приведенные в книге, а также дополнительные приложения вы сможете найти по адресу http://www.piter.com/download.

Подробную информацию о наших книгах вы найдете по адресу http:// www.piter.com.

Глава Организация современного компьютера Внешний вид типичного современного компьютера Структурная схема компьютера Место ассемблера Историческая ретроспектива процессоров Intel Современному человеку трудно представить свою жизнь без электронно-вычислительных машин (ЭВМ). В настоящее время любому желающему по силам собрать у себя на рабочем столе полноценный вычислительный центр, степень функциональности которого может быть ограничена только фантазией и финансовыми возможностями его обладателя.

В минимальной комплектации типовой персональный компьютер состоит из компонентов, показанных на рис. 1.1.

Из рисунка видно, что компьютер образуют несколько физических устройств, каждое из которых подключено к одному блоку, называемому системным. Если рассуждать логически, то ясно, что он играет роль некоторого координирующего устройства. Попытка открыть корпус и заглянуть внутрь системного блока, скорее всего, не приведет к удовлетворению жажды познания — непонятная совокупность разнообразных плат, блоков, индикаторов и соединительных проводов вряд ли даст однозначные ответы на возможные вопросы. Внутри монитора вы тем более ничего интересного не найдете, за исключением возможности удовлетворить другую жажду — жажду приключений. Если хорошо поискать отверткой подходящий источник, то, в отличие от системного блока, можно довольно быстро получить разряд в несколько киловольт.

18 Глава 1. Организация современного компьютера Рассмотрим структурную схему типичного современного персонального компьютера. Она не претендует на безусловную точность и имеет целью лишь показать назначение, взаимосвязь и типовой состав его элементов.

На рис. 1.2 показана функциональная схема системного блока компьютера на базе процессоров семейства Intel. На схеме представлены: центральный процессор, оперативная память, внешние устройства. Все компоненты соединены между собой через системную шину. Системная шина имеет дополнительную шину — шину расширения. В компьютерах на базе Pentium в качестве такой шины используется шина PCI (Peripheral Component Interface), к которой подсоединяются внешние устройства, а также шины более ранних стандартов, например ISA (Industry Standard Architecture).

На рисунке показана самая общая схема сердца компьютера — процессора. Основу процессора составляют блок микропрограммного управления, исполнительное устройство, обозначенное как «конвейер», и регистры. Остальные компоненты процессора выполняют вспомогательные функции. Более подробный вариант этой схемы мы рассмотрим в следующей главе.

Машинный язык и язык ассемблера Чтобы лучше понять принципы работы компьютера, давайте сравним его с человеком. У компьютера есть органы восприятия информации из внешнего мира — это клавиатура, мышь, накопители на магнитных дисках (на схеме они расположены под системными шинами). У компьютера есть органы, «переваривающие» полученную информацию, — это центральный процессор и оперативная память. И наконец, у компьютера есть органы речи, выдающие результаты переработки. Это также некоторые из устройств ввода-вывода, расположенные в нижней части схемы. Современным компьютерам, конечно, далеко до человека. Их можно сравнить с существами,' взаимодействующими с внешним миром на уровне большого, но ограниченного набора безусловных рефлексов. Этот набор рефлексов образует систему машинных команд. На каком бы высоком уровне вы ни общались с компьютером, в конечном итоге все сводится к скучной и однообразной последовательМашинный язык и язык ассемблера (Pentium Pro/11/lll) ности машинных команд. Каждая машинная команда является своего рода раздражителем для возбуждения того или иного безусловного рефлекса. Реакция на этот раздражитель всегда однозначна и «зашита» в блоке микропрограммного управления в виде микропрограммы. Эта микропрограмма и реализует действия по выполнению машинной команды, но уже на уровне сигналов, подаваемых на те или иные логические схемы компьютера, тем самым управляя различными подсистемами компьютера. В этом состоит так называемый принцип микропрограммного управления. Продолжая аналогию с человеком, отметим: для того чтобы компьютер правильно «питался», придумано множество операционных систем, компиляторов сотен языков программирования и т. д. Но все они являются, по сути, лишь блюдом, на котором по определенным правилам доставляется пища (программы) желудку (компьютеру). Только (вот досада!) желудок компьютера любит диетическую, однообразную пищу — подавай ему информацию структурированную, в виде строго организованных последовательностей нулей и единиц, комбинации которых и составляют машинный язык.

20 Глава 1. Организация современного компьютера Таким образом, внешне являясь полиглотом, компьютер понимает только один язык — язык машинных команд. Конечно, для общения и работы с компьютером необязательно знать этот язык, но практически любой профессиональный программист рано или поздно сталкивается с необходимостью его изучения. К счастью, при этом человеку не нужно пытаться постичь значение различных комбинаций двоичных чисел, так как еще в 50-е гг. программисты стали использовать для программирования символический аналог машинного языка, который назвали языком ассемблера. Этот язык точно отражает все особенности машинного языка.

Именно поэтому, в отличие от языков высокого уровня, язык ассемблера для каждого типа компьютеров свой. Более того, бессмысленны разговоры о том, что ассемблер как язык программирования устарел и знать его необязательно. АССЕМБЛЕР ОБЪЕКТИВЕН, и подобные разговоры в определенной ситуации могут выглядеть довольно глупо (особенно для особо «продвинутых» программистов).

На первый взгляд ассемблер кажется очень сложным, но это не так. Для освоения этого языка совершенно не нужно выучивать наизусть все его команды и директивы. Более того, в большинстве случаев для практической работы достаточно понимания основных концепций и идей, лежащих в основе языка ассемблера. Детали реализации той или иной команды всегда можно найти в справочнике команд, гораздо важнее понимать, какое место данная команда занимает в системе команд, в идеале хорошо было бы знать и цели, которые преследовали разработчики процессора, вводя данную команду в систему машинных команд. Одна из целей данного учебника — сформировать у читателя именно такое понимание языка ассемблера.

Из всего сказанного напрашивается вывод о том, что самую эффективную программу можно написать только на ассемблере (при условии, что ее пишет квалифицированный программист), так как этот язык является «родным» для компьютера. Здесь есть одно маленькое «но»: это очень трудоемкий и требующий большого внимания и практического опыта процесс. Поэтому реально на ассемблере пишут в основном программы, которые должны обеспечить эффективную работу с аппаратной частью компьютера. Иногда на ассемблере пишутся критичные ко времени выполнения или расходованию памяти фрагменты программы. Впоследствии они оформляются в виде подпрограмм и совмещаются с кодом на языке высокого уровня.

В данном учебнике будут рассмотрены два фундаментальных для понимания логики функционирования компьютера вопроса: первый — архитектурные особенности процессора и основы его взаимоотношений с другими компонентами компьютера; второй — место и роль языка ассемблера во всем этом процессе. За основу в нашем рассмотрении будут взяты процессоры фирмы Intel. Необходимо отметить, что эти процессоры не являются единственными процессорами на рынке аппаратного обеспечения (hardware), хотя и занимают довольно большой сегмент этого рынка. Исторически сложилось так, что архитектура процессоров Intel полностью или частично поддерживается процессорами других фирм. Поэтому процессорам фирмы Intel приходится делить свой сегмент рынка с процессорами фирм AMD, VIA, Transmeta. Так как в своем сегменте рынка (Intel-совместимых процессоров) процессоры фирмы Intel являются стандартом де-факто, то в данном учебнике речь будет идти исключительно о них, однако все приводимые примеры программ будут работать и на Intel-совместимых процессорах процессорах других фирм.

История процессоров Intel Процессоры Intel в своем развитии прошли довольно сложный и насыщенный различными событиями путь. Корпорация Intel была основана в 1968 г. Первый процессор 14004 был разработан Intel в 1969 г. Он представлял собой 4-разрядное параллельное вычислительное устройство с 2300 транзисторами. Его возможности были сильно ограничены — он выполнял всего лишь четыре основные арифметические операции. Поначалу 14004 применялся в карманных калькуляторах. Позднее сфера его использования была расширена за счет различных систем управления, в частности, систем управления светофорами.

В 1972 г. был выпущен 8-разрядный процессор 18008 с адресацией внешней оперативной памяти размером 16 Кбайт. Неожиданный успех этого процессора подтолкнул разработчиков Intel к дальнейшим изысканиям. В 1974 г. был выпущен 18080, который, оставаясь 8-разрядным, мог адресовать 64 Кбайт оперативной памяти. Для того времени это было революцией, этот процессор был выпущен в миллионах экземпляров. Историю современных Intel-совместимых процессоров принято вести именно от 18080.

Очередной революционный процессор Intel — 18086 — появился в 1978 г. Его основные характеристики —наличие 16-разрядных регистров, 16-разрядной шины данных. Поддержка сегментной организации памяти наряду с 20-разрядной шиной адреса позволяла организовать адресацию памяти в пределах 1 Мбайт при доступности адресного пространства размером 256 Кбайт. С целью занятия более широкой ниши на рынке Intel вскоре представила более дешевый вариант этого процессора —18088. При внутренней 16-разрядной архитектуре 18086 он имел 8-разрядную шину данных, вследствие чего был менее производителен. Важно отметить, что дешевизна достигалась в основном не за счет дешевизны самого процессора, а за счет удешевления конечного продукта — компьютера на его основе. Другой причиной появления и широкого распространения 18088 было наличие большого количества 8-разрядных внешних устройств. 8-разрядная шина данных 18088 позволяла упростить процесс сопряжения с этими устройствами. Отметим, что одним из внешних устройств, поддерживаемых процессорами 18086/88, был математический сопроцессор 18087, который мог устанавливаться в специальный разъем материнской платы. Это позволяло более эффективно выполнять операции с плавающей точкой в соответствии со стандартом IEEE-754. Важно также подчеркнуть, что, начиная с 18086/88, все процессоры Intel совместимы «снизу вверх».

Следствием этого является гарантированная возможность запуска на современном процессоре Pentium практически любой программы, написанной для 18086/ (естественно, при соответствующей поддержке системного программного обеспечения).

Согласно известному закону, программное обеспечение (software), подобно газу, стремится заполнить весь доступный ему объем. Поэтому поначалу кажущиеся 22 Глава 1. Организация современного компьютера фантастическими возможности новых процессоров со временем становятся узами, тем самым подталкивая конструкторов процессоров искать новые архитектурные и технологические решения для перевода программ в новые, более свободные рамки существования. Оперативная память объемом 1 Мбайт — это много. Долгая жизнь процессоров 18086/88 подтверждает это. Но с течением времени даже такой объем памяти превратился в ограничение, в связи с чем стали применяться различные технологии для обхода этого ограничения. Многие, наверное, еще помнят загрузку MS-DOS с драйверами расширенной памяти EMS (Expanded Memory Specification), с помощью которых через окно размером 64 Кбайт можно было обращаться к внешней дополнительной памяти размером до 32 Мбайт. Но это не могло продолжаться вечно, и в 1982 г. Intel представляет процессор i80286. И хотя он не решил окончательно проблему ограничения пространства памяти, в нем были реализованы определенные архитектурные изменения, благодаря которым последующие модели процессоров позволили разрядить ситуацию с доступом к памяти.

К главным нововведениям следует отнести расширение шины адреса до 24 битов, что позволило адресовать уже 16 Мбайт оперативной памяти, а также появление еще одного режима работы процессора — защищенного. В этом отношении данный процессор также можно считать революционным. До этого в процессорах Intel отсутствовала поддержка на процессорном уровне какой-либо защиты программ от взаимного влияния. Введение подобных средств в архитектуру процессоров Intel стимулировало производителей на разработку многозадачных операционных систем. Наиболее яркие примеры — Microsoft (ОС Windows) и IBM (OS/2). Справедливости ради следует отметить, что доминирующей системой для i286 была MSDOS, и данный процессор использовался как более быстрый вариант 18086/88. Для широкого распространения многозадачные системы должны были пройти определенный путь развития.

Мощным стимулом к развитию многозадачных систем стали возможности, предоставляемые новым процессором i80386, выпущенным Intel в 1985 г. Это был первый 32-разрядный процессор, который положил начало семейству процессоров IA-32 (32-bit Intel Architecture). Главные отличительные особенности: 32-разрядные шины адреса и данных (адресация оперативной памяти — до 4 Гбайт);

увеличенная до 32 битов разрядность внутренних регистров процессора; введение третьего режима работы процессора (режима виртуального процессора 8086); поддержка страничной адресации памяти, благодаря которой стало возможном за счет дисковой памяти виртуализировать доступ к оперативной памяти и теоретически расширить ее рамки вплоть до 4 Гбайт. Аналогично ситуации с 18086 и 18088, одновременно был выпущен более дешевый вариант процессора i80386 (180386-DX) с 16-разрядной шиной данных — 180386-SX. При необходимости на материнскую плату можно было установить и математический сопроцессор 180387. Процессор i80386 первым из семейства процессоров Intel стал поддерживать возможность параллельного функционирования своих устройств: устройства шинного интерфейса (bus interface unit), блока предварительной выборки (code prefetch unit), блока декодирования команд (instruction decode unit), исполнительного блока (execution unit), блока сегментации (segment unit), блока страничной адресации (paging unit).

Концепция параллельного функционирования устройств позже, а именно в 180486, стала основой другой концепции — конвейеризации вычислений.

Процессор i80486 появился в 1989 г. Основные его характеристики — наличие встроенного математического сопроцессора, поддержка многопроцессорного режима работы и работы с двумя видами кэш-памяти — внутренней размером 8 Кбайт (1-го уровня L1) и внешней кэш-памятью (2-го уровня L2). Важные изменения в архитектуре процессора i80486 коснулись концепции параллельных вычислений.

Они стали воплощением идей, лежащих в основе RISC-технологии разработки процессоров. Согласно им, машинные команды со сложным алгоритмом работы (Complete-Instuction-Set Computing, CISC) на микропрограммном уровне реализовывались на основе более простых команд из ограниченного набора (Reduced Instruction Set Computer, RISC). Для выполнения CISC-команд требуется несколько тактов работы процессора, иногда несколько десятков. RISC-команды должны выполняться за один такт. Такое изменение внутреннего представления внешних команд, наряду с изменением последовательности их выполнения и режимов декодирования, позволило реализовать реальную конвейеризацию вычислений.

В результате выполнение CISC-команды происходило за один такт процессора.

Конвейер процессора i80486 состоял из 5 ступеней. Начиная с процессора J процессоры Intel поддерживают различные концепции энергосбережения. Интересно, что совершенствование процессора J80486 шло в ходе его промышленного производства. Вследствие этого по своим возможностям следующие по времени выпуска процессоры 180486 в большей или меньшей степени отличались от предыдущих.

Ну и, наконец, ЭПОХА PENTIUM. Знаменитый своей ошибкой блока с плавающей точкой первый Pentium — Pentium-60 — был представлен в начале 1993 г.

Благодаря суперскалярной архитектуре (с двумя конвейерами, известными как и и v) он мог выполнять две машинные инструкции за один такт. К внутреннему кэшу команд добавлен внутренний 8-килобайтный кэш данных. Реализована технология предсказания переходов (branch prediction). Для увеличения пропускной способности при обработке данных процессор Pentium поддерживает внутренние пути шириной 128 и 256 битов, внешняя шина данных увеличена до 64 битов. Добавлены средства для построения многопроцессорных систем, в частности расширенный программируемый контроллер прерываний (Advanced Programmable Interrupt Controller, APIC), дополнительные выводы и специальный режим дуальной обработки (dual processing), ориентированный на построение двухпроцессорных систем. Начиная с модели процессоров Pentium с тактовой частотой 133 МГц (1997 г.) в них был введен блок ММХ-команд (ММХ означает MultiMedia extensions). Реализованный на базе сопроцессора, данный блок поддерживал SIMD-технологию, которая предполагает обработку блока однородных данных одной машинной инструкцией. Цель введения данного расширения — увеличение производительности приложений, обрабатывающих массивы однородных целочисленных данных.

Примеры таких приложений — программы обработки изображений, звука, архивирования-разархивирования данных и др. Излишне говорить, что все эти нововведения резко подняли производительность процессора Pentium по сравнению с его предшественником — процессором i486 — и не оставили последнему особых альтернатив для существования.

На сегодняшний день имеется три поколения, или семейства, процессоров Pentium — Pentium, P6 и Pentium IV с микроархитектурой NetBurst. К семейству 24 Глава 1. Организация современного компьютера Pentium относятся упоминавшиеся ранее процессоры Pentium и Pentium MMX.

История семейства Р6 началась в 1995 году с появлением процессора Pentium Pro.

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

Процессор Pentium Pro использовал новую технологию работы с кэш-памятью.

Наряду с уже обычным внутренним кэшем первого уровня размером 8 Кбайт в одном корпусе (но не на одной микросхеме) с процессором располагалась кэшпамять второго уровня размером 256 Кбайт, для связи с которой имелась специальная 64-разрядная шина, работающая на частоте процессора. Шина данных процессора Pentium Pro имела разрядность 36 бита, что позволяло при определенных условиях организовать адресацию памяти до 64 Гбайт.

Процессор Pentium II, появившийся на свет в 1997 г., добавил к архитектуре процессора Pentium Pro поддержку ММХ-команд. Кроме того, были увеличены размеры кэш-памяти всех уровней — кэш-память команд и данных первого уровня выросла до 16 Кбайт каждая, кэш-память второго уровня могла иметь величину 256,512 Кбайт или 1 Гбайт. Кэш-память второго уровня могла работать на половине частоты работы процессора. Также процессор поддерживал множество технологий энергосбережения. Следующие две модели процессоров, выпущенные в 1998 г., — Celeron и Pentium II Xeon — были, соответственно, более «легкой» и более «тяжелой» модификациями процессора Pentium П. Celeron позиционировался как процессор для построения компьютерных систем массового использования. Pentium II Xeon предназначался для построения высокопроизводительных серверных систем.

Последний процессор семейства Р6 — Pentium III, — выпущен в 2000 г. Его основное отличие — поддержка дополнительного набора ММХ-команд, называемых SSE-расширением (SSE — Streaming SIMD Extensions) основного набора команд процессора. Для этого в архитектуру процессора был введен специальный блок.

На сегодняшний день последним 32-разрядным процессором является Pentium IV.

Он позиционируется как процессор нового поколения с новым типом микроархитектуры, носящей название NetBurst. Подробнее основные архитектурные особенности процессора Pentium IV будут рассмотрены в следующей главе при обсуждении микроархитектуры NetBurst. Отметим лишь один важный в контексте нашего обсуждения момент — с появлением процессора Pentium IV система команд процессоров Intel пополнилась еще 144 новыми командами. В основном это команды для блока ММХ с плавающей точкой, а также команды управления кэшированием и памятью. Условное название этой группы команд — SSE2 (Streaming SIMD Extensions 2).

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

Работать компьютер заставляет некий «серый кардинал» — машинный язык.

Пользователь может даже и не подозревать о его существовании. Общаться с компьютером пользователю помогают операционные системы, офисные пакеты, системы программирования и т. д. Современные технологии программирования позволяют создавать программы, не написав ни строчки кода. Но в «мозг» компьютера команды все же поступают на машинном языке.

Машинный язык полностью отражает все архитектурные тонкости конкретного типа компьютеров. Следствием этого является его индивидуальность для каждого семейства ЭВМ. Чтобы эффективно использовать все возможности компьютера, применяют символический аналог машинного языка — язык ассемблера.

Работать на компьютере можно и без знания ассемблера. Но элементом подготовки программиста-профессионала обязательно является изучение этого языка. Почему? Изучая ассемблер, человек обязательно попутно знакомится с архитектурой компьютера. А это, в свою очередь, позволяет ему в дальнейшем создавать более эффективные программы на других языках и объединять их при необходимости с программами на ассемблере.

Процессоры Intel являются стандартом де-факто в своем сегменте рынка. За тридцать с лишним лет своего развития процессоры Intel из примитивных устройств, пригодных лишь для калькуляторов, превратились в сложные системы, содержащие более 7 000 000 транзисторов и поддерживающие работу высокопроизводительных приложений и многопроцессорных конфигураций.

Глава Программно-аппаратная архитектура IA- процессоров Intel Общее понятие об архитектуре ЭВМ Архитектура и свойства машины фон Неймана Общие и индивидуальные свойства процессоров Intel Архитектура IA-32 процессоров Intel Варианты микроархитектуры Р6 (Pentium Pro/I I/I II) и NetBurst (Pentium IV) Программная модель архитектуры IA- Режимы работы процессора архитектуры IA- Набор регистров процессора архитектуры IA- Организация памяти компьютера архитектуры IA- Формирование физического адреса в реальном и защищенном режимах В главе 1 мы описали компьютер на «житейском» уровне. Его сердце — процессор.

Без него компьютер представляет собой упорядоченный, но безжизненный набор. аппаратных компонентов. Кроме различных схемотехнических решений, процессор живет благодаря машинному языку, «зашитому» в его устройстве микропрограммного управления. Именно машинный язык определяет логику работы процессора.

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

При выборе конкретного типа (или модели) компьютера неизбежно возникают вопросы: как оценить его возможности, каковы его отличия от компьютеров других типов (моделей)? Рассмотрения одной лишь его функциональной схемы явно недостаточно, так как она вряд ли чем-то принципиально отличается от схем других машин. У всех компьютеров есть оперативная память, процессор, внешние устройства. В данном случае в содержании рекламы стоит обратить внимание на то, какие отличительные характеристики компьютера как товара продавец в первую очередь пытается довести до сведения потенциального покупателя. Обычно первые слова подобной рекламы: «Компьютер на базе процессора...». То есть все дело в процессоре. Именно он задает те правила, по которым в конечном итоге все устройства компьютера функционируют как единый механизм.

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

Архитектура ЭВМ Однозначно определить понятие архитектуры ЭВМ довольно трудно, потому что при желании в него можно включить все, что связано с компьютерами вообще и какой-то конкретной моделью компьютера в частности. Попытаемся все же его формализовать.

Архитектура ЭВМ — это абстрактное представление ЭВМ, которое отражает ее структурную, схемотехническую и логическую организацию. Понятие архитектуры ЭВМ является комплексным, в него входят:

структурная схема ЭВМ;

средства и способы доступа к элементам структурной схемы ЭВМ;

организация и разрядность интерфейсов ЭВМ;

набор и доступность регистров;

организация и способы адресации памяти;

" способы представления и форматы данных ЭВМ;

набор машинных команд ЭВМ;

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

правила обработки нештатных ситуаций (прерываний).

Таким образом, описание архитектуры включает в себя практически всю необходимую для программиста информацию о компьютере. Понятие архитектуры ЭВМ — иерархическое. Допустимо вести речь как об архитектуре компьютера в целом, так и об архитектуре отдельных его составляющих, например, архитектуре процессора или архитектуре подсистемы ввода-вывода.

Все современные компьютеры обладают некоторыми общими и индивидуальными архитектурными свойствами. Индивидуальные свойства присущи только конкретной модели компьютера и отличают ее от своих больших и малых собратьев. Общие архитектурные свойства, наоборот, присущи некоторой, часто довольГлава 2. Программно-аппаратная архитектура IA-32 процессоров Intel но большой группе компьютеров. На сегодняшний день общие архитектурные свойства большинства современных компьютеров подпадают под понятие фон-неймановской архитектуры. Так названа архитектура по имени ученого фон Неймана. Когда фон Нейман начал заниматься компьютерами, программирование последних осуществлялось способом коммутирования. В первых ЭВМ для генерации нужных сигналов необходимо было с помощью переключателей выполнить ручное программирование всех логических схем. В первых машинах использовали десятичную логику, при которой каждый разряд представлялся десятичной цифрой и моделировался 10 электронными лампами. В зависимости от нужной цифры одна лампа включалась, остальные девять оставались выключенными. Фон Нейман предложил схему ЭВМ с программой в памяти и двоичной логикой вместо десятичной. Логически машину фон Неймана составляли пять блоков (рис. 2.1): оперативная память, арифметико-логическое устройство (АЛУ) с аккумулятором, блок управления, устройства ввода и вывода. Особо следует выделить роль аккумулятора. Физически он представляет собой регистр АЛУ. Для процессоров Intel, в которых большинство команд — двукоперандные, его роль не столь очевидна. Но существовали и существуют процессорные среды с однооперандными машинными командами. В них наличие аккумулятора играет ключевую роль, так как большинство команд используют его содержимое в качестве либо второго, либо единственного операнда команды.

Ниже описаны свойства и принципы работы машины фон Неймана.

Линейное пространство памяти. Для оперативного хранения информации компьютер имеет совокупность ячеек с последовательной нумерацией (адресами) О, 1, 2,... Данная совокупность ячеек называется оперативной памятью.

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

в Последовательное выполнение программ. Процессор выбирает из памяти команды строго последовательно. Для изменения прямолинейного хода выполнения программы или осуществления ветвления необходимо использовать специальные команды. Они называются командами условного и безусловного переходов.

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

ii Безразличие к назначению данных. Машине все равно, какую логическую нагрузку несут обрабатываемые ею данные.

Данный учебник посвящен вопросам программирования процессоров фирмы Intel и Intel-совместимых процессоров других фирм. Поэтому в качестве примера индивидуальных архитектурных принципов компьютера, в силу иерархичности этого понятия, рассмотрим индивидуальные архитектурные принципы и свойства процессоров Intel. Их полное рассмотрение не является нашей целью, уделим внимание лишь тем их них, которые наиболее характерны и понадобятся нам для дальнейшего изложения. Более подробно вопросы организации архитектуры компьютера описаны в [7].

Согласно материалам фирмы Intel, индивидуальные архитектурные свойства и принципы работы всех ее процессоров, начиная с i8086 и заканчивая Pentium IV, выстроены в рамках единой архитектуры, которая позже получила название IA- (32-bit Intel Architecture). Эта архитектура не является «закостенелым» образованием. В процессе эволюции процессоров Intel она постоянно изменяется и развивается. Каждый из процессоров вносил в IA-32 одно или несколько архитектурных новшеств. Несмотря на то, что датой рождения архитектуры IA-32 нужно считать дату появления на свет процессора i80386, предыдущие модели процессоров также внесли существенный вклад в представление ее принципов и свойств.

Если вернуться к материалу главы 1, то можно проследить за вкладом, который внес каждый из процессоров Intel в ходе своей эволюции в формирование элементов архитектуры IA-32. Так, благодаря процессорам 18086/88 в IA-32 существует сегментация памяти, i80286 ввел защищенный режим и т. д.

Архитектура IA- В рамках архитектуры IA-32 существует и развивается ряд микроархитектур. Ранее было показано, что понятие архитектуры компьютера иерархично и что существуют общие и индивидуальные свойства архитектуры. В контексте обсуждения Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel архитектуры процессоров Intel имеет смысл также позиционировать различные их архитектурные свойства и принципы как общие и индивидуальные. К индивидуальным архитектурным свойствам и принципам можно отнести существующие в рамках различных микроархитектур (см. далее). Что касается общих архитектурных свойств и принципов IA-32, то к ним относятся те, которые имеют место для всех процессоров Intel или, по крайней мере, существуют вне рамок конкретной микроархитектуры для большого числа моделей процессоров. Так как процессор в основном определяет логику работы компьютера, то и названия большинства общих архитектурных свойств и принципов IA-32 совпадают с названиями аналогичных свойств и принципов компьютера: номенклатура программно-доступных регистров; организация и способы адресации памяти; номенклатура режимов работы процессоров; организация и разрядность внешних интерфейсов ЭВМ; способы представления и форматы данных; набор и форматы машинных команд ЭВМ;

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

Варианты микроархитектуры процессоров Intel Понятие микроархитектуры впервые было определено Intel для процессоров семейства Pentium Pro. Его введение объяснялось необходимостью правильного позиционирования новых процессоров среди существующих. Внешняя программная модель (логическая) 32-разрядных процессоров изменялась только в сторону развития, в то время как их исполнительная (физическая) часть могла быть совершено разной. Понятие микроархитектуры ориентировано на описание особенностей исполнительной части процессоров, то есть того, какими способами и какими средствами процессор выполняет обработку машинного кода (рис. 2.2). На сегодняшний день в рамках IA-32 существует две микроархитектуры процессоров Intel: P и NetBurst.

Рис. 2.2. Представление компьютера в виде уровней Микроархитектура Р Микроархитектуру Р6 поддерживают такие процессоры Intel, как Pentium Pro, Pentium II (Xeon), Celeron, Pentium III (Xeon). Эта микроархитектура является, по определению Intel, трехходовой (three-way) суперскалярной конвейерной архиАрхитектура 1А-32 тектурой. Термин «трехходовая» означает поддержку технологий параллельного вычисления, позволяющих процессору одновременно (за один такт) обрабатывать до трех инструкций. Проблема оптимальной обработки потока машинных команд является ключевой при разработке любого процессора. Поэтому для большей ясности необходимо показать эту проблему в развитии. В компьютере фон-неймановской архитектуры существуют две основные стадии исполнения команды — выборка очередной команды из памяти и собственно ее исполнение. В первых процессорах Intel все блоки процессора работали последовательно, начиная с этапа выборки очередной команды из памяти и заканчивая этапом завершения ее обработки процессором. Напоминание об этом осталось в названии регистра IP/EIP — (Instruction Pointer — указатель инструкции). До появления процессоров Intel с конвейерной архитектурой данный регистр непосредственно указывал на очередную команду, подлежащую выполнению. Процессоры Intel относятся к группе CISC-процессоров, в которых для выполнения одной команды может требоваться от единиц до нескольких десятков процессорных тактов. При такой обработке команд увеличение производительности может быть достигнуто только повышением частоты генерации машинных тактов. Простое увеличение частоты работы процессора не имеет смысла, так как есть физически обусловленная верхняя граница, до которой ее можно поднимать. По этому пути разработчики Intel шли до процессора i80386 включительно. В ходе исполнения команды есть и другое узкое место — выборка команды из памяти. Это затратная по времени операция. Частичное решение проблемы было найдено еще на заре развития компьютерной техники в виде буфера упреждающей выборки. Развитием этой и реализацией других идей стал конвейер — специальное устройство, существующее на уровне архитектуры исполнительной части компьютера. Благодаря конвейеру исполнение команды разбивается на несколько стадий, каждая из которых реализует некоторую элементарную операцию общего процесса обработки команды. Впервые для процессоров Intel конвейер был реализован в архитектуре процессора 180486. Конвейер J80486 имеет пять ступеней, которые соответствуют перечисленным далее стадиям обработки машинной команды.

1. Выборка команды из кэш-памяти или из оперативной памяти.

2. Декодирование команды.

3. Генерация адреса, в ходе которой определяются адреса операндов в памяти и выполняется выборка операндов.

4. Выполнение операции с помощью АЛУ.

5. Запись результата (место записи результата зависит от алгоритма работы конкретной машинной команды).

В чем преимущество такого подхода? Очередная команда после ее выборки попадает в блок декодирования. Таким образом блок выборки освобождается и может выбрать следующую команду. В результате на конвейере могут находиться в различной стадии выполнения пять команд. Скорость вычисления в результате существенно возрастает.

В процессорах Pentium конвейерная архитектура была усовершенствована и получила название суперскалярной. В отличие от скалярной архитектуры 32 Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel (с одним конвейером), первые модели процессоров Pentium имели два конвейера.

В идеале такой суперскалярный процессор должен выполнять две команды за машинный такт. Но не все так просто. Реально два конвейера Pentium не были функционально равнозначными. В связи с этим они даже имели разные названия — u-конвейер (главный) и v-конвейер (второстепенный). Главный конвейер был полнофункциональным и мог выполнять любые машинные команды. Функциональность второстепенного конвейера была ограничена основными целочисленными командами и одной командой с плавающей точкой (FXCH). Внутренняя структура обоих конвейеров такая же, как у 480486 с одним общим блоком выборки команд.

Для того чтобы два разных по функциональным возможностям конвейера могли обеспечить предельную эффективность (две выполненных команды за такт работы процессора), необходимо было группировать команды из входного потока в совместимые пары. Важно заметить, что исходная последовательность команд входного потока была неизменной. Если процессору не удавалось собрать совместимую пару, то выполнялась одна команда на u-конвейере. Оставшуюся команду процессор пытался «спарить» со следующей командой входного потока.

Вернемся к процессорам микроархитектуры Р6. Они имеют другую структуру конвейера. Собственно конвейера в понимании 180486 и первых Pentium уже нет.

Конвейеризация заключается в том, что весь процесс обработки команд разбит на 12 стадий, которые исполняются различными блоками процессора. Сколько именно команд обрабатывается процессором, сказать трудно. Термин трехходовой означает лишь то, что для исполнения из входного потока выбираются до трех команд.

Известен верхний предел — в процессоре в каждый момент времени могут находиться до 30 команд в различной стадии исполнения. Детали этого процесса скрыты за понятием динамическое исполнение с нарушением исходного порядка следования машинных команд (out of order), что означает исполнение команд в порядке, определяемом исполнительным устройством процессора, а не исходной последовательностью команд. В основу технологии динамического исполнения положены три концепции:

• Предсказание правильного адреса перехода. Основная задача механизма предсказания — исключить перезагрузку конвейера. Под переходом понимается запланированное алгоритмом изменение последовательного характера выполнения программы. Как показывает статистика, типичная программа на каждые 6-8 команд содержит 1 команду перехода. Последствия обработки перехода предсказать несложно: при наличии конвейера через каждые 6-8 команд его нужно очищать и заполнять заново в соответствии с адресом перехода. Все преимущества конвейеризации теряются. Поэтому в архитектуру Pentium в состав устройства выборки/декодирования (см. главу 1) был введен блок предсказания переходов. Вероятность правильного предсказания составляет около 80 %.

II Динамический анализ потока данных. Анализ проводится с целью определения зависимостей команд программы от данных и регистров процессора с последующей оптимизацией выполнения потока команд. Главный критерий здесь — максимально полная загрузка процессора. Для реализации данного критерия допускается нарушение исходного порядка следования команд. Сбоя при этом не7 происходит, так как внешне логика работы программы не нарушается. 39999Архитектура 1А-32 Подобная внутренняя неупорядоченность исполнения команд позволяет держать процессор загруженным даже тогда, когда данные в кэш-памяти второго уровня отсутствуют и необходимо тратить время на обращение за ними в оперативную память.

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

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

Для иллюстрации будем использовать схему, представленную на рис. 2.3 и являющуюся развитием схемы на рис. 1.2 (см. главу 1). Из схемы видно, что структурно процессор микроархитектуры Р6 состоит из нескольких подсистем.

• Подсистема памяти состоит из системной шины, кэша второго уровня L2, устройства шинного^интерфейса, кэша первого уровня L1 (инструкций и данных), устройства связи с памятью и буфера переупорядочивания запросов к памяти.

Ш Устройство выборки/декодирования состоит из устройства выборки команд, блока предсказания переходов, в который входят блоки меток перехода и вычисления адреса следующей инструкции, устройства декодирования, устройства микропрограммного управления и таблицы псевдонимов регистров.

'•'• Буфер команд.

Устройство диспетчеризации/исполнения содержит буфер микроопераций, готовых к исполнению, и пять исполнительных устройств (два — для исполнения целочисленных операций, два — для исполнения операций с плавающей точкой, а также устройство связи с памятью). Необходимо заметить, что здесь допущена вольность в трактовке назначения исполнительных устройств: выделены устройства для выполнения обычных команд (целочисленных и с плавающей точкой) и ММХ-команд (также целочисленных и с плавающей точкой).

Реальное деление несколько иное. Такое допущение сделано исключительно с учебной целью — для более осознанного перехода от архитектуры к системе команд ассемблера.

iis Блок удаления и восстановления.

Рассмотрим подсистему памяти. Для бесперебойной работы процессора в микроархитектуре Рб используется два уровня кэш-памяти1. Кэш-память первого уровня состоит из кэшей команд и данных размером по 8 Кбайт, расположенных внутри процессора в непосредственной близости к его исполнительной части. Кэш-память второго уровня является внешней по отношению к процессору (но в едином конКэширование — способ увеличения быстродействия системы за счет хранения часто используемых данных и кодов в так называемой кэш-памяти, находящейся внутри процессора (кэш-память первого уровня) либо в непосредственной близости от него (кэш-память второго уровня).

2 Зак. Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel Центральный процессор (Pentium Pro/11/lll) :полнительные устройства Буфер микроопераций, готовых к исполнению Буфер команд (переупорядоченных) Рис. 2.3. Структурная схема процессора семейства Р6 (Pentium Pro/11/lll) структиве с ним), имеет значительно б ольший размер (256 Кбайт, 512 Кбайт или 1 Мбайт) и соединена с ядром процессора посредством 64-разрядной шины. Разделение кэш-памяти на две части (для кода и данных) обеспечивает бесперебойную поставку машинных инструкций и элементов данных в исполнительное устройство процессора. Исходные данные для кэш-памяти первого уровня предоставляет кэш-память второго уровня. Заметьте, что информация из нее поступает на устройство шинного интерфейса и далее в соответствующую кэш-память первого уровня по 64-разрядной шине. При этом благодаря более быстрому обновлению содержимого кэш-памяти первого уровня обеспечивается высокий темп работы процессора.

Устройство шинного интерфейса обращается к оперативной памяти системы через внешнюю системную шину. Эта 64-разрядная шина ориентирована на обработку запросов, то есть каждый шинный запрос обрабатывается отдельно и требуАрхитектура 1А-32 ет обратной реакции. Пока устройство шинного интерфейса ожидает ответа на один запрос шины, возможно формирование многочисленных дополнительных запросов. Все они обслуживаются в порядке поступления. Считываемые по запросу данные помещаются в кэш второго уровня. То есть процессор посредством устройства шинного интерфейса читает команды и данные из кэша второго уровня. Устройство шинного интерфейса взаимодействует с кэшем второго уровня через 64-разрядную шину кэша, которая также ориентирована на обработку запросов и функционирует на тактовой частоте процессора. Доступ к кэшу первого уровня осуществляется через внутренние шины на тактовой частоте процессора. Синхронная работа с системной памятью кэш-памяти обоих уровней осуществляется благодаря специальному протоколу MESI [7], [13].

Запросы от команд на получение операндов из памяти в исполнительном устройстве процессора обслуживаются посредством устройства связи с памятью и буфера переупорядочивания запросов к памяти. Эти два устройства специально включены в схему для того, чтобы обеспечить бесперебойное снабжение исполняемых команд необходимыми данными. Особо стоит подчеркнуть роль буфера переупорядочивания запросов к памяти. Он отслеживает все запросы к операндам в памяти и выполняет функции планирующего устройства. Если нужные для очередной операции данные в кэш-памяти первого уровня (L1) отсутствуют, то буфер переупорядочивания запросов к памяти автоматически передает информацию о неудачном обращении к данным кэшу второго уровня (L2). Если и в кэше L2 нужных данных не оказалось, то буфер переупорядочивания запросов к памяти заставляет устройство шинного интерфейса сформировать запрос к оперативной памяти компьютера.

Устройство выборки/декодирования извлекает одну 32-байтную строку кэша команд ( L1) за такт и передает в декодер, который преобразует ее в последовательность микроопераций. Поток микроопераций (пока он еще соответствует последовательности исходных команд) поступает в буфер команд. Устройство выборки команд вычисляет указатель на следующую команду, подлежащую выборке, на основании информации трех источников: буфера меток перехода, состояния прерывания/исключения и сообщения от исполнительного целочисленного устройства об ошибке в предсказании метки перехода. Важная часть этого процесса — предсказание метки перехода, которое выполняется по специальному алгоритму.

В его основе лежит работа с буфером меток перехода, который содержит информацию о последних 256 переходах. Если очередная команда, выбираемая из памяти, является командой перехода, то содержащийся в ней адрес перехода сравнивается с адресами, уже находящимися в буфере меток перехода. Если этот адрес уже есть в буфере меток переходов, то он станет адресом следующей команды, с которой устройство выборки будет извлекать очередную команду. Если искомого адреса перехода в буфере нет, то выборка команд из памяти будет продолжена до момента исполнения команды перехода исполнительным устройством. В результате ее исполнения становится ясно, было ли правильным решение об адресе начала выборки следующих команд после выборки команды перехода. Если предсказанный переход оказывается неверным, то конвейер сбрасывается и загружается заново в соответствии с адресом перехода. Цель предсказания переходов — в том, чтобы 36 Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel устройство исполнения постоянно было занято полезной работой и сброс конвейера производился как можно реже.

Устройство выборки команд выбирает команды для исполнения и помещает их в устройство декодирования. Устройство декодирования состоит из трех параллельно работающих декодеров (два простых и один сложный). Именно эти декодеры воплощают в жизнь понятие исполнения с нарушением исходного порядка следования команд (out of order) и являются теми самыми тремя входами (three way) в исполнительное устройство процессора. Декодеры преобразуют команды процессора в микрооперации. Микрооперации представляют собой примитивные команды, которые выполняются пятью исполнительными устройствами процессора, работающими параллельно. Многие машинные команды преобразуются в одиночные микрооперации (это делает простой декодер), а некоторые машинные команды — в последовательность от двух и более (оптимально — четырех) микроопераций (это делает сложный декодер). Информация о последовательности микроопераций для реализации конкретной машинной команды содержится в устройстве микропрограммного управления. Кроме команд, декодеры обрабатывают также префиксы команд. Декодер команд может формировать до шести микроопераций за такт — по одной от простых декодеров и до четырех от сложного декодера. Для достижения наибольшей производительности работы декодеров необходимо, чтобы на их вход поступали команды, которые декодируются шестью микрооперациями в последовательности 4 + 1 + 1. Если время работы программы критично, то имеет смысл провести ее оптимизацию, заключающуюся в переупорядочивании исходного набора команд таким образом, чтобы группы команд формировали последовательности микроопераций по схеме 4 + 1 + 1. После того как команды разбиты на микрооперации, порядок их выполнения трудно предсказать. При этом могут возникнуть проблемы с таким критичным ресурсом, как регистры. Суть здесь в том, что если в двух соседних фрагментах программы данные помещались в одинаковые регистры, откуда они, возможно, записывались в некоторые области памяти, а после переупорядочивания эти фрагменты перемешались, то как разобраться в том, какие регистры и где использовались. Эта проблема носит название проблемы ложных взаимозависимостей и решается с помощью механизма переименования регистров. Основу этого механизма составляет набор из 40 внутренних универсальных регистров, которые и задействуются в реальных вычислениях исполнительным устройством абсолютно прозрачно для программ. Универсальные регистры могут работать как с целыми числами, так и со значениями с плавающей точкой. Информация о действительных именах регистров процессора и их внутренних именах (номерах универсальных регистров) помещается в таблицу псевдонимов регистров.

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

Устройство диспетчеризации/исполнения планирует и исполняет неупорядоченную последовательность микроопераций из буфера переупорядоченных команд.

Но оно не занимается непосредственной выборкой микроопераций из буфера переупорядоченных команд, так как в нем могут содержаться и не готовые к исполнению микрооперации. Этим занимается устройство, управляющее специальным буфером, который условно назовем буфером микроопераций, готовых к исполнению. Оно постоянно сканирует буфер переупорядоченных команд в поисках микроопераций, готовых к исполнению (фактически это означает доступность всех операндов), после чего посылает их соответствующим исполнительным устройствам, если они не заняты. Результаты исполнения микроопераций возвращаются в буфер переупорядоченных команд и сохраняются там наряду с другими микрооперациями до тех пор, пока не будут удалены устройством удаления и восстановления.

Подобная схема планирования и исполнения программ реализует классический принцип неупорядоченного выполнения, при котором микрооперации посылаются исполнительным устройствам вне зависимости от их расположения в исходном алгоритме. В случае, если к выполнению одновременно готовы две или более микрооперации одного типа (например, целочисленные), то они выполняются в соответствии с принципом FIFO (First In, First Out — первым пришел, первым ушел), то есть в порядке поступления в буфер переупорядоченных команд.

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

Два целочисленных исполнительных устройства могут параллельно обрабатывать две целочисленные микрооперации. Одно из этих целочисленных исполнительных устройств специально предназначено для работы с микрооперациями переходов. Оно способно обнаружить непредсказанный переход и сообщить об этом устройству выборки команд, чтобы перезапустить конвейер. Такая операция реализована следующим образом. Декодер команд отмечает каждую микрооперацию перехода и адрес перехода. Когда целочисленное исполнительное устройство выполняет микрооперацию перехода, то оно определяет, был предсказан переход или нет. Если переход предсказан правильно, то микрооперация отмечается пригодной для использования, и выполнение продолжается по предсказанной ветви. Если переход предсказан неправильно, то целочисленное исполнительное устройство изменяет состояние всех последующих микроопераций с тем, чтобы удалить их из буфера переупорядоченных команд. После этого целочисленное устройство помещает метку перехода в буфер меток перехода, который, в свою очередь, совместно с устройством выборки команд перезапускает конвейер относительно нового исполнительного адреса.

38 Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel Устройство связи с памятью управляет загрузкой и сохранением данных для микроопераций. Для их загрузки в исполнительное устройство достаточно определить только адрес памяти, поэтому такое действие кодируется одной микрооперацией. Для сохранения данных необходимо определять и адрес, и записываемые данные, поэтому это действие кодируется двумя микрооперациями. Та часть устройства связи с памятью, которая управляет сохранением данных, имеет два блока, позволяющие ему обрабатывать адрес и данные для микрооперации параллельно. Это позволяет устройству связи с памятью выполнить загрузку и сохранение данных для микроопераций параллельно в одном такте.

Исполнительные устройства с плавающей точкой аналогичны устройствам в более ранних моделях процессора Pentium. Было добавлено только несколько новых команд с плавающей точкой для организации условных переходов и перемещений.

Последний блок в этой схеме выполнения команд исходной программы — блок удаления и восстановления, задачей которого является возврат вычислительного процесса в рамки, определенные исходной последовательностью команд. Для этого он постоянно сканирует буфер переупорядоченных команд на предмет обнаружения полностью выполненных микроопераций, не имеющих связи с другими микрооперациями. Такие микрооперации удаляются из буфера переупорядоченных команд и восстанавливаются в порядке, соответствующем порядку следования команд исходной программы с учетом прерываний, исключений, точек прерывания и переходов. Блок удаления и восстановления может удалить три микрооперации за один машинный такт. При восстановлении порядка следования команд блок удаления и восстановления записывает результаты в реальные регистры процессора и в оперативную память.

Таким образом, система динамического исполнения команд позволяет организовать прохождение команд программы через исполнительное устройство процессора эффективнее, чем это было в конвейере процессора 180486 и первых процессоров Pentium.

Микроархитектура NetBurst Микроархитектура NetBurst, реализованная в процессоре Pentium IV, является развитием идей микроархитектуры Р6, поэтому рассматривается довольно конспективно. Судя по названию (net — сеть, burst — прорыв), микроархитектура NetBurst призвана обеспечить некий «сетевой прорыв». Очевидно, что этим разработчики хотели подчеркнуть те новые особенности процессора Pentium IV, которые позволяют организовать более быструю и эффективную работу приложений в современных сетевых и мультимедийных информационных средах. Отметим наиболее важные свойства новой микроархитектуры.

я Быстрая исполнительная часть процессора. АЛУ процессора работает на удвоенной частоте процессора. За каждый такт процессора выполняются две основные целочисленные команды. Обеспечена более высокая пропускная способность потока команд через исполнительную часть процессора и уменьшены различные задержки.

» Гиперконвейерная технология. Гиперконвейер Pentium IV состоит из 20 ступеней. Цель увеличения длины конвейера — упрощение задач, реализуемых кажАрхитектура IA-32 дой из его ступеней, и, как следствие, упрощение соответствующей аппаратной логики.

Улучшенная технология динамического исполнения благодаря более глубокой «произвольности» в порядке исполнения кода и усовершенствованной системе предсказания переходов. Размер буфера меток перехода увеличен до 4 Кбайт (Pentium III — 512 байт). Усовершенствован и сам алгоритм предсказания.

В результате вероятность предсказания перехода возрастает до 95 %.

Новая подсистема кэширования. Отсутствует кэш команд первого уровня. Вместо него введен кэш трасс. Трассами называются последовательности микроопераций, в которые были декодированы ранее выбранные команды. Кэш трасс способен хранить до 12 Кбайт микроопераций и доставлять исполнительному ядру до 3 микроопераций за такт. Кэш второго уровня работает на полной частоте ядра процессора.

Структурная схема процессора Pentium IV показана на рис. 2.4.

Препроцессор (команды ->.микрооперации) декодирования Микроархитектура NetBurst поддерживает еще одну новую технологию — НуperThreading. Данная технология позволяет на базе одного физического процессора Pentium IV моделировать несколько логических, каждый из которых имеет собственное архитектурное пространство IA-32. Под архитектурным пространством 40 Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel IA-32 понимается совокупность регистров данных, сегментных регистров, системных регистров и регистров MSR. Каждый логический процессор имеет также собственный контроллер прерываний API С.

На этом, наверное, следует завершить обсуждение общих вопросов, связанных с архитектурой процессоров Intel. Более подробную информацию по этой теме, в том числе о логике функционирования и характеристиках микроархитектур Р и NetBurst, можно получить из материала книги [13]. Наша ближайшая задача — разобраться, как управлять этими сложными процессорами. Программисту совершенно необязательно помнить о схемотехнических тонкостях реализации процессора, ему достаточно знать, какие части процессора ему доступны и как с ними взаимодействовать для реализации некоторой задачи. Первый шаг в этом направлении — знакомство с программной моделью процессора. Эта модель описывает видимые для программиста объекты архитектуры процессора, знание которых позволяет программисту эффективно и в полном объеме использовать возможности процессора.

Программная модель IA- Любая выполняющаяся программа получает в свое распоряжение определенный набор ресурсов процессора. Эти ресурсы необходимы для обработки и хранения в памяти команд и данных программы, а также информации о текущем состоянии программы и процессора. Программную модель процессора в архитектуре IA- процессоров Intel составляет следующий набор ресурсов (рис. 2.5):

' пространство адресуемой памяти до 232 - 1 байт (4 Гбайт), для Pentium III/IV — до 236 - 1 байт (64 Гбайт);

- набор регистров для хранения данных общего назначения;

набор сегментных регистров;

набор регистров состояния и управления;

• набор регистров устройства вычислений с плавающей точкой (сопроцессора);

набор регистров целочисленного MMX-расширения, отображенных на регистры сопроцессора (впервые появились в архитектуре процессора Pentium MMX);

' набор регистров MMX-расширения с плавающей точкой (впервые появились в архитектуре процессора Pentium III);

9 программный стек — специальная информационная структура, работа с которой предусмотрена на уровне машинных команд (более подробно она будет обсуждена позже).

Это основной набор ресурсов. Кроме того, к ресурсам, поддерживаемым архитектурой IA-32, необходимо отнести порты ввода-вывода, счетчики мониторинга производительности.

Программные модели более ранних процессоров (i486, первые Pentium) отличаются меньшим размером адресуемого пространства оперативной памяти (232 - 1, так как разрядность их шины адреса составляет 32 бита) и отсутствием некоторых групп регистров. Для каждой группы регистров в скобках показано, начиная Регистры целочисленного MMX-расширения Рис. 2.5. Программная модель архитектуры IA-32 процессоров Intel с какой модели данная группа регистров появилась в программной модели процессоров Intel. Если такого обозначения нет, то это означает, что данная группа регистров присутствовала в процессорах i386 и i486. Что касается еще более ранних процессоров 18086/88, то на самом деле они тоже полностью представлены на схеме, но составляют лишь ее небольшую ее часть. В программную модель данных процессоров входят 8- и 16-разрядные регистры общего назначения, сегментные регистры, регистры FLAGS, IP и адресное пространство памяти размером до 1 Мбайт.

Свойства некоторых перечисленных далее программно-доступных ресурсов определяются текущим режимом работы процессора.

42 Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel Режимы работы процессора архитектуры IA- Режим работы процессора определяет поведение, номенклатуру и свойства доступных ресурсов процессора. Перевод процессора из одного режима в другой осуществляется специальными программными и аппаратными методами.

В рамках архитектуры IA-32 доступны следующие режимы работы процессора.

II Режим реальных адресов, или просто реальный режим (real mode) — это режим, в котором работал 18086. Наличие его в i486 и Pentium обусловлено тем, что фирма Intel старается обеспечить в новых моделях процессоров возможность функционирования программ, разработанных для ранних моделей.

II Защищенный режим (protected mode) позволяет максимально реализовать все идеи, заложенные в процессорах архитектуры IA-32, начиная с i80286. Программы, разработанные для J8086 (реального режима), не могут функционировать в защищенном режиме. Одна из причин этого связана с особенностями формирования физического адреса в защищенном режиме.

И Режим виртуального процессора 8086 предназначен для организации многозадачной работы программ, разработанных для реального режима (процессора 18086), совместно с программами защищенного режима. Переход в этот режим (virtual 8086 mode) возможен, если процессор уже находится в защищенном режиме. Работа программ реального режима в режиме виртуального 18086 возможна благодаря тому, что процесс формирования физического адреса для них производится по правилам реального режима.

Ш Режим системного управления (System Management Mode, SMM) — это новый режим работы процессора, впервые появившийся в процессоре Pentium. Он обеспечивает операционную систему механизмом для выполнения машиннозависимых функций, таких как перевод компьютера в режим пониженного энергопотребления или выполнения действий по защите системы. Для перехода в данный режим процессор должен получить специальный сигнал SMI от усовершенствованного программируемого контроллера прерываний (Advanced Programmable Interrupt Controller, APIC), при этом сохраняется состояние вычислительной среды процессора. Функционирование процессора в этом режиме подобно его работе в режиме реальных адресов. Возврат из этого режима производится специальной командой процессора.

Процессор всегда начинает работу в реальном режиме.

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

Соответственно, машинные команды с операндами в регистрах выполняются максимально быстро, поэтому в программах на языке ассемблера регистры используются очень интенсивно. К сожалению, архитектура IA-32 предоставляет в распоряжение программиста не слишком много регистров, поэтому они являются критически важным ресурсом и за их содержимым приходится следить очень внимательно.

Большинство регистров имеют определенное функциональное назначение.

С точки зрения программиста, их можно разделить на две большие группы.

is Первую группу образуют пользовательские регистры, к которым относятся:

D регистры общего назначения EAX/AX/AH/AL, EBX/BX/BH/BL, EDX/DX/DH/DL, ЕСХ/ CX/CH/CL, ЕВР/ВР, ESI/SI, EDI/DI, ESP/SP предназначены для хранения данных и адресов, программист может их использовать (с определенными ограничениями) для реализации своих алгоритмов;

D сегментные регистры CS, DS, SS, ES, FS, GS используются для хранения адресов сегментов в памяти;

П регистры сопроцессора ST(0), ST(1), ST(2), ST(3), ST(4), ST(5), ST(6), ST(7) предназначены для написания программ, использующих тип данных с плавающей точкой (глава 17);

П целочисленные регистры MMX-расширения ММХО, MMXl, MMX2, ММХЗ, ММХ4, D регистры MMX-расширения с плавающей точкой XMMO, XMM1, ХММ2, ХММЗ,, ХММ4,ХММ5,ХММб,ХММ7;

D регистры состояния и управления (регистр флагов Е FLAGS/FLAGS и региструказатель команды EIP/IP) содержат информацию о состоянии процессора, исполняемой программы и позволяют изменить это состояние.

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

D управляющие регистры CRO...CR4 определяют режим работы процессора и характеристики текущей исполняемой задачи;

D регистры управления памятью GDTR, IDTR, LDTR и TR используются в защищенном режиме работы процессора для локализации управляющих структур этого режима;

П отладочные регистры DRO...DR7 предназначены для мониторинга и управления различными аспектами отладки;

D регистры типов областей памяти MTRR используются для аппаратного управления кэшированием в целях назначения соответствующих свойств областям памяти;

П машинно-зависимые регистры MSR используются для управления процессором, контроля за его производительностью, получения информации об Почему в обозначениях многих из регистров общего назначения присутствует наклонная разделительная черта? Это не разные регистры — это части одного большого 32-разрядного регистра, но их можно использовать в программе как отдельные объекты. Зачем так сделано? Чтобы обеспечить работоспособность программ, написанных для прежних 16-разрядных моделей процессоров фирмы Intel начиная с i8086. Процессоры i486 и Pentium имеют в основном 32-разрядные регистры.

44 Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel Их количество, за исключением сегментных регистров, такое же, как и у 18086, но размерность больше, что и отражено в обозначениях — они имеют приставку е(extended).

Многие из приведенных регистров предназначены для работы с определенными вычислительными подсистемами процессора: сопроцессором, MMX-расширениями. Поэтому их целесообразно рассматривать в соответствующем контексте.

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

Регистры общего назначения Регистры общего назначения используются в программах для хранения:

ш операндов логических и арифметических операций;

«i компонентов адреса;

il указателей на ячейки памяти.

В принципе, все эти регистры доступны для хранения операндов без особых ограничений, хотя в определенных условиях некоторые из них имеют жесткое функциональное назначение, закрепленное на уровне логики работы машинных команд. Среди всех этих регистров особо следует выделить регистр ESP. Его не следует использовать явно для хранения каких-либо операндов программы, так как в нем хранится указатель на вершину стека программы.

Все регистры этой группы позволяют обращаться к своим «младшим» частям (см. рис. 2.5). Обращение производится по их именам. Важно отметить, что использовать для самостоятельной адресации можно только младшие 16- и 8-разрядные части этих регистров. Старшие 16 битов как самостоятельные объекты недоступны.

Это сделано, как мы отметили ранее, для совместимости с первыми 16-разрядными моделями процессоров фирмы Intel. Перечислим регистры, относящиеся к группе регистров общего назначения и физически находящиеся в процессоре внутри арифметико-логического устройства (поэтому их еще называют регистрами АЛУ):

к регистр-аккумулятор (Accumulator register) EAX/AX/AH/AL применяется для хранения промежуточных данных, в некоторых командах его использование обязательно;

т базовый регистр (Base register) EBX/BX/BH/BL применяется для хранения базового адреса некоторого объекта в памяти;

II регистр-счетчик (Count register) ECX/CX/CH/CL применяется в командах, производящих некоторые повторяющиеся действия. Использование регистра-счетчика зачастую скрыто в алгоритме работы той или иной команды. Например, команда организации цикла LOOP помимо передачи управления анализирует и уменьшает на единицу значение регистра ЕСХ/СХ;

т регистр данных (Data register) EDX/DX/DH/DL, так же как и регистр ЕАХ/АХ/АН/ AL, хранит промежуточные данные (в некоторых командах его явное использование обязательно, в других он используется неявно).

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

И регистр индекса источника (Source Index register) ESI/SI в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике;

il регистр индекса приемника (Destination Index register) EDI/DI в цепочечных операциях содержит текущий адрес в цепочке-приемнике.

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

;»; регистр указателя стека (Stack Pointer register) ESP/SP содержит указатель на вершину стека в текущем сегменте стека;

II регистр указателя базы кадра стека (Base Pointer register) EBP/BP предназначен для организации произвольного доступа к данным внутри стека.

Не стоит пугаться столь жесткого функционального назначения регистров АЛ У.

На самом деле при программировании хранить операнды команд можно в большинстве регистров, причем практически в любых сочетаниях. Однако всегда следует помнить, что некоторые команды требуют строго определенных регистров.

Цель подобного жесткого закрепления регистров для этих команд — более компактная кодировка их машинного представления. Знание особенностей использования регистров машинными командами (см. приложение) позволяет, при необходимости, экономить память, занимаемую кодом программы, и более эффективно программировать алгоритм.

Сегментные регистры Процессоры Intel аппаратно поддерживают сегментную организацию программы.

Это означает, что любая программа состоит из трех сегментов: кода, данных и стека. Логически машинные команды в архитектуре IA-32 построены так, что при выборке каждой команды для доступа к данным программы или к стеку неявно используется информация из вполне определенных сегментных регистров. В зависимости от режима работы процессора по их содержимому определяются адреса памяти, с которых начинаются соответствующие сегменты. В программной модели IA-32 имеется шесть сегментных регистров CS, SS, DS, ES, GS, FS, служащих для доступа к четырем типам сегментов.

ii Сегмент кода содержит команды программы. Для доступа к этому сегменту служит регистр сегмента кода (Code Segment register) CS. Он содержит адрес сегмента с машинными командами, к которому имеет доступ процессор (эти команды загружаются в конвейер процессора).

ii Сегмент данных содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр сегмента данных (Data Segment register) DS, который хранит адрес сегмента данных текущей программы.

ш Сегмент стека представляет собой область памяти, называемую стеком. Работу со стеком процессор организует по следующему принципу: последний запиГлава 2. Программно-аппаратная архитектура IA-32 процессоров Intel санный в эту область элемент выбирается первым. Для доступа к этой области служит регистр сегмента стека (Stack Segment register) SS, содержащий адрес сегмента стека.

№ Дополнительный сегмент данных. Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в регистре сегмента данных DS.

Если программе недостаточно одного сегмента данных, то она имеет возможность задействовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в регистре DS, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах дополнительного сегмента данных (Extension Data Segment registers) ES, GS, FS.

Регистры состояния и управления В процессор включены два регистра (см. рис. 2.5), постоянно содержащие информацию о состоянии как самого процессора, так и программы, команды которой он в данный момент обрабатывает:

ii регистр-указатель команд EIP/IP;

it регистр флагов Е FLAGS/FLAGS.

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

Регистр-указатель команд (Instruction Pointer register) EIP/IP имеет разрядность 32(16) бита и содержит смещение следующей подлежащей выполнению команды относительно содержимого регистра сегмента кода CS в текущем сегменте команд.

Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра EIP/IP.

Разрядность регистра флагов (flag register) EFLAGS/FLAGS равна 32(16) битам. Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть регистра EFLAGS/FLAGS полностью аналогична регистру FLAGS процессора i8086. На рис. 2.6 показано содержимое регистра EFLAGS.

Исходя из особенностей использования, флаги регистра EFLAGS/FLAGS можно разделить на три группы.

В первую группу флагов регистра EFLAGS/FLAGS входят 8 флагов состояния. Эти флаги могут изменяться после выполнения машинных команд. Флаги состояния регистра EFLAGS отражают особенности результата исполнения арифметических или логических операций. Это дает возможность анализировать состояние вычислительного процесса и реагировать на него с помощью команд, условных переходов и вызовов подпрограмм.

ФЛАГИ СОСТОЯНИЯ :

IOPL OF DF IF CF

ID VIP VIF AC VM RF TF SF ZF

NT AF PF

ФЛАГ УПРАВЛЕНИЯ: I СИСТЕМНЫЕ ФЛАГИ:

Флаг переноса (carry flag) CF:

1 — арифметическая операция произвела перенос из старшего бита результата, старшим является 7-й, 15-й или 31-й бит в зависимости от размерности операнда;

О — переноса не было.

Флаг четности (parity flag) PF:

1 — 8 младших разрядов (этот флаг только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц;

0 — 8 младших разрядов результата содержат нечетное число единиц.

Вспомогательный флаг переноса (auxiliary carry flag) AF применяется только для команд, работающих с BCD-числами. Фиксирует факт заема из младшей тетрады результата:

1 — в результате операции сложения был произведен перенос из разряда в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде;

0 — переносов и заемов в третий разряд (из третьего разряда) младшей тетрады результата не было.

Флаг нуля (zero flag) ZF:

1 — результат нулевой;

О — результат ненулевой.

Глава 2. Программно-аппаратная архитектура IA-32 процессоров Intel * Флаг знака (sign flag) SF отражает состояние старшего бита результата (биты 7, 15 или 31 для 8-, 16- или 32-разрядных операндов соответственно):

1 — старший бит результата равен 1;

0 — старший бит результата равен 0.

ж Флаг переполнения (overflow flag) OF используется для фиксации факта потери значащего бита при арифметических операциях:

1 — в результате операции происходит перенос в старший знаковый бит результата или заем из старшего знакового бита результата (биты 7,15 или для 8-, 16- или 32-разрядных операндов соответственно);

0 — в результате операции не происходит переноса в старший знаковый бит результата или заема из старшего знакового бита результата.

ш Уровень привилегированности ввода-вывода (Input/Output privilege level) IOPL используется в защищенном режиме работы процессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи.

« Флаг вложенности задачи (nested task) NT используется в защищенном режиме работы процессора для фиксации того факта, что одна задача вложена в другую.

Во вторую группу флагов (группа флагов управления) регистра EFLAGS/FLAGS входит всего один флаг направления (directory flag) DF. Он находится в десятом бите регистра Е FLAGS и используется цепочечными командами. Значение флага DF определяет направление поэлементной обработки в этих операциях: от начала строки к концу (DF = 0) либо, наоборот, от конца строки к ее началу (DF =1). Для работы с флагом DF существуют специальные команды CLD (снять флаг DF) и STD (установить флаг DF). Применение этих команд позволяет привести флаг DF в соответствие с алгоритмом и обеспечить автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками.

В третью группу флагов регистра EFLAGS/FLAGS входит 8 системных флагов, управляющих вводом-выводом, маскируемыми прерываниями, отладкой, переключением между задачами и режимом виртуального процессора 8086. Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это ведет к прерыванию работы программы. Далее перечислены системные флаги и их назначение.

II Флаг трассировки (trace flag) TF предназначен для организации пошаговой работы процессора:

1 — процессор генерирует прерывание с номером 1 после выполнения каждой машинной команды (может использоваться при отладке программ, в частности отладчиками);

Флаг прерывания (interrupt enable flag) IF предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний по входу INTR):

1 — аппаратные прерывания разрешены;

О — аппаратные прерывания запрещены.

is Флаг возобновления (resume flag) RF используется при обработке прерываний от регистров отладки.



Pages:     || 2 | 3 | 4 | 5 |   ...   | 6 |


Похожие работы:

«ПРЕДЛОЖЕНИЯ ВРЕМЕННОЙ КОМИССИИ ВОРОНЕЖСКОЙ ГОРОДСКОЙ ДУМЫ ПО ОБЕСПЕЧЕНИЮ ЖИТЕЛЕЙ ГОРОДА ДЕТСКИМИ ДОШКОЛЬНЫМИ УЧРЕЖДЕНИЯМИ МИЛЛИОННЫЙ ГОРОД – В ДЕТСКИЙ САД БЕЗ ПРОБЛЕМ ВОРОНЕЖ 2013 В соответствии с поручением губернатора Воронежской области Алексея Васильевича Гордеева решением Воронежской городской Думы от 24.10.2012 № 970-III из числа депутатов и представителей структурных подразделений администрации городского округа город Воронеж создана временная комиссия Воронежской городской Думы по...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное образовательное учреждение высшего профессионального образования Санкт-Петербургский государственный университет ВЫСШАЯ ШКОЛА МЕНЕДЖМЕНТА ПРОГРАММА ВСТУПИТЕЛЬНОГО ЭКЗАМЕНА В АСПИРАНТУРУ ПО СПЕЦИАЛЬНОЙ ДИСЦИПЛИНЕ Специальность 05.02.22 – Организация производства (экономические науки) 2 Санкт-Петербург 2009 Общие положения Программа вступительного экзамена в аспирантуру Высшей школы менеджмента СПбГУ по...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ УТВЕРЖДАЮ Заместитель Министра образования Российской Федерации _ В.Д. Шадриков “17” марта 2000 г. Регистрационный № 165 тех\дс ГОСУДАРСТВЕННЫЙ ОБРАЗОВАТЕЛЬНЫЙ СТАНДАРТ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ Направление подготовки дипломированного специалиста 656600 – Защита окружающей среды Квалификация – инженер-эколог Вводится с момента утверждения Москва 2000 г. 1. Общая характеристика направления подготовки дипломированного специалиста “Защита...»

«Приложение 1: Рабочая программа обязательной дисциплины История и философия науки ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ПЯТИГОРСКИЙ ГОСУДАРСТВЕННЫЙ ЛИНГВИСТИЧЕСКИЙ УНИВЕРСИТЕТ Утверждаю Проректор по научной работе и развитию интеллектуального потенциала университета профессор З.А. Заврумов _2013 г. Аспирантура по специальности 10.01.01 Русская литература отрасль науки: 10.00.00 Филологические науки Кафедра философии, культурологии...»

«Министерство образования и науки РФ ФГБОУ ВПО Дагестанский государственный технический университет Кафедра строительных конструкций и гидротехнических сооружений УТВЕРЖДАЮ Ректор ФГБОУ ВПО ДГТУ, Т.А. Исмаилов 014 г. ПРОГРАММА вступительного экзамена в аспирантуру по направлению 08.06.01 Техника и технологии строительства Одобрена на совместном заседании кафедр СКиГТС, АД, ОиФ, СМиИК (протокол №6 от 28 февраля 2014 г.) Заведующий кафедрой СКиГТС д.т.н., профессор J jp Устарханов О.М. 1111 '....»

«2 Основная цель экзамена - определить уровень сформированности у будущего аспиранта способности философствовать и готовности к межкультурному, научному общению. Программа нацелена на выявление мировоззренческой и методологической готовности специалиста заниматься подготовкой в системе послевузовского профессионального образования в соответствии с профессиональным стандартом и возможностью повышения уровня образования, научной и педагогической квалификации. Будущий аспирант должен...»

«“Msdienu izgltbas problmas“ НЕКОТОРЫЕ АСПЕКТЫ МЕТОДИКИ ПРОВЕДЕНИЯ ПРАКТИЧЕСКИХ ЗАНЯТИЙ И ЛАБОРАТОРНЫХ РАБОТ ПО ДИСЦИПЛИНЕ АРХИТЕКТУРА ВЫЧИСЛИТЕЛЬНЫХ МАШИН И СИСТЕМ Борис Цилькер1, Владимир Пятков2 Институт транспорта и связи, ул. Ломоносова, 1, Рига, LV-1019, Латвия Тел.: +371 7100604. Факс: +371 7100560. E-mail: [email protected], [email protected] Опыт проведения практических и лабораторных занятий по дисциплине Архитектура вычислительных машин и систем свидетельствует о сравнительно низком уровне...»

«1. Общие положения. Примерная основная образовательная программа (ПООП ВПО) по направлению 030600 – История (магистратура) разработана на основании Федерального государственного образовательного стандарта высшего профессионального образования подготовки бакалавра по направлению 030600 – История, утвержденного приказом Министра образования и науки Российской Федерации от 21 декабря 2009 года № 759 и является системой учебно-методических документов, рекомендуемых вузам для использования при...»

«1    Аннотации к рабочим программам дисциплин в соответствии учебным планом аспирантов по специальности 12.00.03. Гражданское право, предпринимательское право, семейное право, международное частное право Дисциплина История и философия науки Рабочая программа дисциплины соответствует ООП послевузовского профессионального образования. Включает в себя цели и задачи дисциплины, место дисциплины в ООП (ОД.А.01), требования к результатам освоения дисциплины, объем дисциплины и виды учебной работы,...»

«СОДЕРЖАНИЕ 1 ОБЩИЕ ПОЛОЖЕНИЯ 3 1.1 Нормативные документы для разработки ООП ВПО 3 Общая характеристика ООП ВПО 3 1.2 1.2.1 Цель (миссия) ООП ВПО 3 1.2.2 Срок освоения ООП ВПО 4 1.2.3 Трудоемкость ООП ВПО 4 1.3 Требования к уровню подготовки, необходимому для освоения ООП ВПО 4 2 ХАРАКТЕРИСТИКА ПРОФЕССИОНАЛЬНОЙ ДЕЯТЕЛЬНОСТИ ВЫПУСКНИКА 5 2.1 Область профессиональной деятельности выпускника 2.2 Объекты профессиональной деятельности выпускника 2.3 Виды профессиональной деятельности выпускника 2.4...»

«Приложение №1 ПРОГРАММНО-МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ПРЕДМЕТОВ УЧЕБНОГО ПЛАНА 2013/2014 учебный год УМК Перспектива Класс Учебники Программы Предмет Автор Название учебника Издательство, год издания 3а,3б,3в,3г Математика Петерсон Л.Г. Математика. 3 класс, в 3 Москва,Просвещен Рабочая программа курса частях. ие, 2011 г. математики, 2 класс. Рабочая тетрадь в 3 частях. Допущен Петерсон Л.Г. Министерством Утверждена Министерством образования и науки образования и науки РФ, РФ, 2013 год. 2013 год....»

«ОАО НПО Сатурн Программа кадровой политики на 2012-2020 гг. 1 УТВЕРЖДАЮ: Управляющий директор ПРОГРАММА кадровой политики ОАО НПО Сатурн на 2012-2020 г.г. 1 Общие положения 1.1 Программа кадровой политики ОАО НПО Сатурн (далее Программа) разработана на основе Программы кадровой политики открытого акционерного общества Управляющая компания Объединённая двигателестроительная корпорация на 2012-2020г.г., утверждённой приказом ОАО УК ОДК от 08.10.2012г. № 237. 1.2Настоящая Программа определяет...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙССКОЙ ФЕДЕРАЦИИ федеральное государственное автономное образовательное учреждение высшего профессионального образования Северный (Арктический) федеральный университет имени М.В. Ломоносова УТВЕРЖДАЮ Первый проректор по учебной работе Л.Н. Шестаков 04 апреля 2012 г. Основная образовательная программа высшего профессионального образования Направление подготовки: 222900.62 Нанотехнологии и микросистемная техника Профиль подготовки: Материалы микро- и...»

«МИНИСТЕРСТВО СЕЛЬСКОГО ХОЗЯЙСТВА РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Саратовский государственный аграрный университет имени Н.И. Вавилова УТВЕРЖДАЮ Декан факультета _ /Трушкин В.А./ _ 20 г. РАБОЧАЯ ПРОГРАММА ДИСЦИПЛИНЫ (МОДУЛЯ) ЭКОНОМИЧЕСКИЙ АНАЛИЗ ПРОИЗВОДСТВЕННОЙ Дисциплина ДЕЯТЕЛЬНОСТИ Направление подготовки 110800.68Агроинженерия Профиль подготовки / Технологии и технические специализация / магистерская...»

«УТВЕРЖДЕНО _ _2012 Г. ПРОТОКОЛ ПЕДСОВЕТА ОТ _№ ДИРЕКТОР МБОУ ГИМНАЗИЯ №8 _ Ф.Н.ЦАЙ ПРОГРАММНОЕ УЧЕБНО-МЕТОДИЧЕСКОЕ ОБЕСПЕЧЕНИЕ УЧЕБНОГО ПЛАНА МУНИЦИПАЛЬНОГО БЮДЖЕТНОГО ОБЩЕОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ ГИМНАЗИЯ №8 Г. ХАБАРОВСКА 2012-2013 1 ОГЛАВЛЕНИЕ 1. Образовательная область Филология 1.1. Русский язык 1.2. Литература 1.3. Литература Дальнего Востока.. 1.4. Иностранные языки 2. Образовательная область Естествознание 2.1. Химия 2.2. Биология...»

«2 1. Цели практики Целями педагогической практики являются: ознакомление с учебными программами по направлению подготовки учащихся объекта в соответствии с проблемным полем деятельности магистранта; ознакомление с постановкой лекций, практических и лабораторных занятий на объекте, с организацией практик, учебно-научных исследовательских работ, курсового и дипломного проектирования; приобретение магистрантом опыта воспитательной (помощник куратора), учебной (со студентами младших курсов) и...»

«Организация Объединенных Наций по вопросам образования, наук и и культуры 1998-1999 гг. Д оклад 31 C/3 Генерального директора Доклад Генерального директора 1998-1999 гг. Доклад Генерального директора о деятельности Организации в 1998-1999 гг., представленный государствам-членам и Исполнительному совету в соответствии со статьей VI.3.b Устава Генеральная конференция Тридцать первая сессия, 2001 г. 31 C/3 ЮНЕСКО Опубликовано в 2001 г. Организацией Объединенных Наций по вопросам образования, науки...»

«Рабочая программа профессионального модуля разработана на основе Федерального государственного образовательного стандарта (далее – ФГОС) по специальности среднего профессионального образования 040401.51 Социальная работа. Организация-разработчик: Финансово-технологический колледж ФГБОУ ВПО Саратовский государственный аграрный университет имени Н.И. Вавилова. Разработчики: Степанова Варвара Владимировна, заместитель директора финансово – технологического колледжа, преподаватель высшей категории;...»

«Форум-выставка НефтьГазТЭК (сентябрь 2010 г.) Чернов Вадим Вадимович +7906-731-2438 Инновационный взгляд высокоразрешающей электроразведки на перспективы углеводородного сырья в гранитогнейсовом комплексе кристаллического фундамента Южного Зауралья Технология наземных измерений ВРЭ-ВП В комплексе геофизических исследований электроразведка занимает важное место. Это связано с тем, что геоэлектрические параметры напрямую связаны с физическими параметрами слоёв, литологическим составом и...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Самарский государственный университет Физический факультет УТВЕРЖДАЮ Ректор _ И.А. Носков __2011 г. Номер внутривузовской регистрации _ ОСНОВНАЯ ОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ Направление подготовки 011200.68 ФИЗИКА Магистерская программа Теоретическая и математическая физика Квалификация (степень) Магистр Форма обучения Очная Самара 1. Общие положения 1.1. Основная образовательная программа магистратуры,...»






 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.