1-freelance.ru

Журнал "Фрилансер"
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Устройство процессора и его назначение

Устройство процессора и его назначение

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

Первый процессор (Intel 4004) появился в 1971 году.

Внешне представляет собой кремневую пластинку с миллионами и миллиардами (на сегодняшний день) транзисторов и каналов для прохождения сигналов.

Назначение процессора – это автоматическое выполнение программы. Другими словами, он является основным компонентом любого компьютера.

Устройство процессора

Ключевыми компонентами процессора являются арифметико-логическое устройство (АЛУ), регистры и устройство управления. АЛУ выполнят основные математические и логические операции. Все вычисления производятся в двоичной системе счисления. От устройства управления зависит согласованность работы частей самого процессора и его связь с другими (внешними для него) устройствами. В регистрах временно хранятся текущая команда, исходные, промежуточные и конечные данные (результат вычислений АЛУ). Разрядность всех регистров одинакова.

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

Схема процессора

Работа процессора

Работает процессор под управлением программы, находящейся в оперативной памяти.

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

Блок управления помимо прочего отвечает за вызов очередной команды и определение ее типа.

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

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

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

Характеристики процессора

Тактовая частота процессора на сегодняшний день измеряется в гигагерцах (ГГц), Ранее измерялось в мегагерцах (МГц). 1МГц = 1 миллиону тактов в секунду.

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

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

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

Как работает процессор?

Инструмент проще, чем машина. Зачастую инструментом работают руками, а машину приводит в действие паровая сила или животное.

Компьютер тоже можно назвать машиной, только вместо паровой силы здесь электричество. Но программирование сделало компьютер таким же простым, как любой инструмент.

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

Два основных компонента процессора

Устройство управления

Устройство управления (УУ) помогает процессору контролировать и выполнять инструкции. УУ сообщает компонентам, что именно нужно делать. В соответствии с инструкциями он координирует работу с другими частями компьютера, включая второй основной компонент — арифметико-логическое устройство (АЛУ). Все инструкции вначале поступают именно на устройство управления.

Существует два типа реализации УУ:

  • УУ на жёсткой логике (англ. hardwired control units). Характер работы определяется внутренним электрическим строением — устройством печатной платы или кристалла. Соответственно, модификация такого УУ без физического вмешательства невозможна.
  • УУ с микропрограммным управлением (англ. microprogrammable control units). Может быть запрограммирован для тех или иных целей. Программная часть сохраняется в памяти УУ.

УУ на жёсткой логике быстрее, но УУ с микропрограммным управлением обладает более гибкой функциональностью.

Арифметико-логическое устройство

Это устройство, как ни странно, выполняет все арифметические и логические операции, например сложение, вычитание, логическое ИЛИ и т. п. АЛУ состоит из логических элементов, которые и выполняют эти операции.

13–15 декабря, Онлайн, Беcплатно

Большинство логических элементов имеют два входа и один выход.

Ниже приведена схема полусумматора, у которой два входа и два выхода. A и B здесь являются входами, S — выходом, C — переносом (в старший разряд).

Схема арифметического полусумматора

Хранение информации — регистры и память

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

Регистры

Регистр — минимальная ячейка памяти данных. Регистры состоят из триггеров (англ. latches/flip-flops). Триггеры, в свою очередь, состоят из логических элементов и могут хранить в себе 1 бит информации.

Читайте так же:
Можно ли присоединить клавиатуру к ноутбуку

Прим. перев. Триггеры могут быть синхронные и асинхронные. Асинхронные могут менять своё состояние в любой момент, а синхронные только во время положительного/отрицательного перепада на входе синхронизации.

По функциональному назначению триггеры делятся на несколько групп:

  • RS-триггер: сохраняет своё состояние при нулевых уровнях на обоих входах и изменяет его при установке единице на одном из входов (Reset/Set — Сброс/Установка).
  • JK-триггер: идентичен RS-триггеру за исключением того, что при подаче единиц сразу на два входа триггер меняет своё состояние на противоположное (счётный режим).
  • T-триггер: меняет своё состояние на противоположное при каждом такте на его единственном входе.
  • D-триггер: запоминает состояние на входе в момент синхронизации. Асинхронные D-триггеры смысла не имеют.

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

Принцип действия RS-триггера

Память (ОЗУ)

ОЗУ (оперативное запоминающее устройство, англ. RAM) — это большая группа этих самых регистров, соединённых вместе. Память у такого хранилища непостоянная и данные оттуда пропадают при отключении питания. ОЗУ принимает адрес ячейки памяти, в которую нужно поместить данные, сами данные и флаг записи/чтения, который приводит в действие триггеры.

Прим. перев. Оперативная память бывает статической и динамической — SRAM и DRAM соответственно. В статической памяти ячейками являются триггеры, а в динамической — конденсаторы. SRAM быстрее, а DRAM дешевле.

Команды (инструкции)

Команды — это фактические действия, которые компьютер должен выполнять. Они бывают нескольких типов:

  • Арифметические: сложение, вычитание, умножение и т. д.
  • Логические: И (логическое умножение/конъюнкция), ИЛИ (логическое суммирование/дизъюнкция), отрицание и т. д.
  • Информационные: move , input , outptut , load и store .
  • Команды перехода: goto , if . goto , call и return .
  • Команда останова: halt .

Прим. перев. На самом деле все арифметические операции в АЛУ могут быть созданы на основе всего двух: сложение и сдвиг. Однако чем больше базовых операций поддерживает АЛУ, тем оно быстрее.

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

В процессоре инструкции реализуются на аппаратном уровне. За один такт одноядерный процессор может выполнить одну элементарную (базовую) инструкцию.

Группу инструкций принято называть набором команд (англ. instruction set).

Тактирование процессора

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

Частота нынешних процессоров измеряется в ГГц (Гигагерцы). 1 ГГц = 10⁹ Гц — миллиард операций в секунду.

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

Выполнение инструкций

Инструкции хранятся в ОЗУ в последовательном порядке. Для гипотетического процессора инструкция состоит из кода операции и адреса памяти/регистра. Внутри управляющего устройства есть два регистра инструкций, в которые загружается код команды и адрес текущей исполняемой команды. Ещё в процессоре есть дополнительные регистры, которые хранят в себе последние 4 бита выполненных инструкций.

Ниже рассмотрен пример набора команд, который суммирует два числа:

  1. LOAD_A 8 . Это команда сохраняет в ОЗУ данные, скажем, <1100 1000> . Первые 4 бита — код операции. Именно он определяет инструкцию. Эти данные помещаются в регистры инструкций УУ. Команда декодируется в инструкцию load_A — поместить данные 1000 (последние 4 бита команды) в регистр A .
  2. LOAD_B 2 . Ситуация, аналогичная прошлой. Здесь помещается число 2 ( 0010 ) в регистр B .
  3. ADD B A . Команда суммирует два числа (точнее прибавляет значение регистра B в регистр A ). УУ сообщает АЛУ, что нужно выполнить операцию суммирования и поместить результат обратно в регистр A .
  4. STORE_A 23 . Сохраняем значение регистра A в ячейку памяти с адресом 23 .

Вот такие операции нужны, чтобы сложить два числа.

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

Иллюстрация работы шины в статье «Как работает процессор?»

У процессора есть механизм сохранения инструкций в кэш. Как мы выяснили ранее, за секунду процессор может выполнить миллиарды инструкций. Поэтому если бы каждая инструкция хранилась в ОЗУ, то её изъятие оттуда занимало бы больше времени, чем её обработка. Поэтому для ускорения работы процессор хранит часть инструкций и данных в кэше.

Если данные в кэше и памяти не совпадают, то они помечаются грязными битами (англ. dirty bit).

Поток инструкций

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

Иллюстрация потока инструкций в статье «Как работает процессор?»

Однако такое решение подходит только для тех инструкций, которые не зависят друг от друга.

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

Устройство и основные характеристики
центрального процессора

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

Содержание:

Что такое процессор и как он устроен

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

Читайте так же:
Материнка gigabyte g31m es2l

Уже много лет основными производителями процессоров являются американские компании Intel и AMD (Advanced Micro Devices). Есть, конечно, и другие достойные производители, но до уровня указанных лидеров им далеко.

Intel и AMD постоянно борются за первенство в изготовлении все более производительных и доступных процессоров, вкладывая в разработки огромные средства и много сил. Их конкуренция — важный фактор, содействующий быстрому развитию этой отрасли. Как выглядит процессор компьютера

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

Как изготавливают процессоры. Что такое техпроцесс

Основным материалом при производстве процессоров является самый обычный песок, а точнее сказать кремний, коего в составе земной коры около 30%. Из очищенного кремния сначала изготавливают большой монокристалл цилиндрической формы, который разрезают на «блины» толщиной около 1 мм.

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

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

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

Сегодняшние технологии позволяют создавать транзисторы размером всего 22 нанометра (толщина человеческого волоса — около 50000 нм). Со временем техпроцесс изготовления процессоров станет еще совершеннее. По прогнозам, их транзисторы уменьшатся как минимум до 14 нм.

Чем тоньше техпроцесс – тем больше транзисторов можно поместить в один процессор, тем он будет производительнее и энергоэффективнее.

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

Понятие архитектуры, ядра, ревизии процессора

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

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

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

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

Архитектурам и ядрам присваиваются определенные имена, а их ревизиям – цифробуквенные обозначения. Например, все модели Intel Core 2 Duo являются процессорами микроархитектуры Intel Core и производились с ядрами Allendale, Conroe, Merom, Kentsfield, Wolfdale, Yorkfield. У каждого из этих ядер были еще и разные ревизии.

Основные характеристики процессора

Количество вычислительных ядер.

Многоядерные процессоры – это процессоры, содержащие на одном процессорном кристалле или в одном корпусе два и более вычислительных ядра.

Многоядерность, как способ повышения производительности процессоров, используется с относительно недавнего времени, но признана самым перспективным направлением их развития. Для домашних компьютеров уже существуют процессоры с 8 ядрами. Для серверов на рынке есть 12-ядерные предложения (Opteron 6100). Разработаны прототипы процессоров, содержащие около 100 ядер.

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

Количество потоков.

Чем больше потоков – тем лучше. Количество потоков не всегда совпадает с количеством ядер процессора. Так, благодаря технологии Hyper-Threading, 4-ядерный процессор Intel Core i7-3820 работает в 8 потоков и во многом опережает 6-тиядерных конкурентов.

Размер кеша 2 и 3 уровней.

Кеш — это очень быстрая внутренняя память процессора, которая используется им как буфер для временного хранения информации, обрабатываемой в конкретный момент времени. Чем кеш больше – тем лучше.

Структура не всех современных процессоров предусматривает наличие кеша 3 уровня, хотя критичным моментом это не является. Так, по результатам многих тестов производительность процессоров Intel Core 2 Quadro, выпускавшихся с 2007 г. по 2011 г. и не имеющих кеша 3 уровня, даже сейчас выглядит достойно. Правда, кеш 2 уровня у них достаточно большой.

Частота процессора.

Здесь все просто – чем выше частота процессора, тем он производительнее.

Скорость шины процессора (FSB, HyperTransport или QPI).

Через эту шину центральный процессор взаимодействует с материнской платой. Ее скорость (частота) измеряется в мегагерцах и чем она выше — тем лучше.

Техпроцесс.

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

Читайте так же:
Моноблок или компьютер что выбрать

Termal Design Point — показатель, отображающий энергопотребление процессора, а также количество тепла, выделяемого им в процессе работы. Единицы измерения — Ватты (Вт). TDP зависит от многих факторов, среди которых главными являются количество ядер, техпроцесс изготовления и частота работы процессора.

Кроме прочих преимуществ, «холодные» процессоры (с TDP до 100 Вт) лучше поддаются разгону, когда пользователь изменяет некоторые настройки системы, вследствие чего увеличивается частота процессора. Разгон позволяет без дополнительных финансовых вложений увеличить производительность процессора на 15 – 25 %, но это уже отдельная тема.

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

Наличие и производительность видеоядра.

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

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

Тип и максимальная скорость поддерживаемой оперативной памяти.

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

Что такое сокет

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

Сокет (socket, разъем центрального процессора) – это щелевой или гнездовой разъём на материнской плате, в который устанавливается процессор.

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

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

Для процессоров Intel длительное время использовался (и сейчас еще используется) сокет LGA775 (процессоры Pentium 4, Pentium D, Celeron D, Pentium EE, Core 2 Duo, Core 2 Extreme, Celeron, Xeon серии 3000, Core 2 Quad). С началом производства линейки новых процессоров были введены сокеты LGA1366, LGA1156, LGA1155 (процессоры i7, i5, i3) и др.

Разъемы для процессоров от AMD за последние годы также изменились — AM2, AM2+, AM3 и т.д. О более ранних сокетах, думаю, смысла вспоминать нет, поскольку компьютеры на их основе – уже раритет.

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

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

Система охлаждения процессора

Как выглядит куллер процессора

Процессор нуждается в надлежащем охлаждении, иначе он может выйти из строя.

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

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

При подборе системы охлаждения процессора нужно учитывать его TDP (рассматривалось выше в пункте о характеристиках процессора).

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

Нормальная температура работы процессора — до 50 градусов Цельсия (при пиковых нагрузках возможно чуть больше). Средства измерения температуры встроены в центральный процессор. При помощи специальных программ температуру можно отслеживать в режиме реального времени (например, программой SpeedFan).

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

Перегрев возможен вследствие низкой эффективности системы охлаждения, выхода ее из строя, засорения пылью, пересыхания термопасты и др.


НАПИСАТЬ АВТОРУ

Дневники чайника. Чтива 0, виток0

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

Большая часть кода программ состоит из команд копирования значений из оперативной памяти в регистры и обратно.

Знаю по себе: понять, зачем нужны регистры можно только через практику. Другого способа нет.

Причём где-то дней 10-15 я вообще не врубался — как оно всё. чтобы вот как-то вот так. 🙂

Но сейчас мне кажется, что регистры — самое простое, и в то же время важное, что есть в процессоре.

  • Приём данных от пользователя (данные передаются в регистры).
  • Вычисления (загрузили в регистр число и дали команду, как его обработать).
  • Приём данных из устройств (опять они — регистры).
  • Изменение состояния ЦП и периферийных устройств (только регистры! Например, регистр флагов).
  • Вывод данных на устройства.
  • Передача данных другим программам.

Во всех операциях программы (а я перечислил только основные) без регистров не обойтись.

Читайте так же:
Май паспорт жесткий диск

И если даже данные не хранятся в регистрах, то в них обязательно будут указатели на эти данные (адреса данных в памяти), других способов работы с данными у процессора нет, только через собственные регистры. А если речь идёт исключительно о сторонних устройствах (например, звуковуха, видяха, винт и т.д.), то мы тоже используем регистры, только это уже не регистры процессора, а, например, PCI-регистры, или AGP, или SATA и так далее.

Так что тема АРХИВАЖНАЯ! Но непонятная без примеров. Их должно быть как минимум 10-15 (по одному в день).

Что-то я разболтался, давайте уже к делу.

  • В окне 3 — дизассемблированный код.
  • В окне 5 — hex-байты. Их адреса (слева) и символы, которые они означают (справа).
  • В окне 7 — регистры процессора.
  • 9 — командная строка.

12BD — сегмент нашей программы, он может быть и другим.

Поскольку все примеры для DOS у нас значительно меньше 64Kb, они будут в одном сегменте.

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

У com-программ в оперативной памяти адрес первой машинной команды равен 100h.

Так происходит потому, что ДОСу первые адреса нужны для служебной информации о программе: командная строка, атрибуты и всё такое (можете посмотреть в окне[5], что там).

ДОС-программы нас уже не очень интересуют, и об этом больше говорить не будем.

А в Win-программах происходит примерно то же самое, только адрес первой машинной команды обычно находится чуть дальше. В самых простых приложениях — 00401000h. 🙂

Нужно просто прибавлять 100h, чтоб узнать адрес в памяти из адреса в com-файле. Так же, как вы складываете 8+100d=108d. Будет всё точно так же, 8+100h=108h.

Я легко посчитал адрес текстовой строки в оперативной памяти (010D) и заложил его в код программы.

Ведь мы знаем номер байта в файле, где начинается строка текста. 0D+100h — и вот он, искомый адрес в памяти.

Главная кнопка здесь будет F10, вам нужно нажимать только на неё (всё остальное можно делать мышкой). Эта кнопка с каждым нажатием будет выполнять текущую строку.

Вы уже понимаете, что отображается в окне[5], и также имеете представление, что в окне[3] — код программ. А вот окно [7] для вас пока ничего не означает, и это очень досадно, но мы сейчас исправимся.

Нажмите F10 один раз. Выполнится строка

Эта команда означает: поместить значение 09 в регистр AH. Но в окне[7] нет регистра AH, а после выполнения этой строки изменится регистр EAX.

Дело в том, что регистр AH — это часть регистра AX, а он — часть регистра EAX.

Если, предположим, мы загрузили регистр EAX значением 44332211, выглядеть он будет так:

Один 32-разрядный регистр — это всего лишь 4 байта в процессоре.

Точно так же устроены ещё 3 регистра.

Можно, кстати, писать и строчными буквами, регистры не обидятся.

EAX, EBX, ECX и EDX — 32-битные регистры данных центрального процессора (от 386-го и по сей день). В эти регистры помещаются необходимые значения, и в них же чаще всего оказываются результаты вычислений. В 32 битах можно хранить hex-число от 00 00 00 00h до FF FF FF FFh. И это всё, что может там храниться. На назначения (Accumulator, Base, Counter, Data) в наших уроках можно вообще не обращать внимания. Когда вы освоите команды Ассемблера, вы сами поймете, почему Counter и почему Base.

Первая строка кода из нашей программы уже почти понятна.

Остаётся непонятной только сама команда.

MOV — это основная команда Ассемблера, она встречается в программах гораздо чаще остальных.

Для программирования самое важное понятие — переменная. На самом деле переменная лишь абстракция для удобства программирования. Такая же абстракция, как в алгебре X, Y, Z. Чтоб решить какую-нибудь задачу, мы говорим, что Y будет равен 5, а Z будет равен 3.

Так вот присвоение переменной Y значения 5 на Ассемблере будет выглядеть так:

Этого достаточно, чтоб использовать команду в своих программах. Посмотрите ещё раз на первые две строки prax01:

Получив первую инструкцию, процессор выполнит инициализацию своего 8-битного регистра AH значением 9, после чего регистр AH будет содержать только байт 09.

При выполнении второй команды процессор поместит в свой 16-битный регистр DX значение 010Dh, после чего регистр DX будет содержать только эти два байта 01 и 0Dh.

Причём, если вы ещё раз посмотрите на устройство регистров, вы обязательно поймёте следующее:
Так как регистр DX состоит из DH и DL, то можно сказать, что после выполнения второй строки кода программы в регистре DH окажется значение 01, а в регистре DL окажется значение 0Dh.

Это просто, но важно! В 16-битный регистр (AX,BX,CX,DX) нельзя положить значение больше двух байт (FFFFh).

А в 8-битный (AH,AL, BH,BL, CH,CL, DH,DL) нельзя положить больше байта, то есть FFh.

Вы должны понять, что физически есть только 4 байта (99 88 44 33h). По отдельности можно обращаться к AX за значением 4433h, или к AH за 44h, или к AL за 33h. Но 9988h находится в E-части, а у неё нет собственного имени, она не является подрегистром. Вы не можете прочитать или загрузить 2 старших байта такого регистра, не обратившись ко всему регистру. Пример:

Читайте так же:
Запись с тв на usb устройство

Это, думаю, понятно. А к старшей части EAX отдельно обращаться можно, например, при помощи команд сдвига битов:

О командах сдвига потом напишу подробно, сейчас я их привёл, только чтоб ответить на вопрос, как можно отдельно читать/записывать 2 старших байта E-регистров.

Итак, мы «познакомились» с четырьмя регистрами общего назначения (РОН), и есть ещё четыре.

Регистры-указатели

Они тоже входят в группу РОН. В этой программе нам они безразличны, но далее мы научимся работать и с ними. Причём на практике всё будет очень похоже на регистры данных. Да и вообще отличий между ними совсем немного. Главное отличие в том, что в регистрах-указателях нет подрегистров, есть только одна вложенная часть.

Мы опять видим четыре байта, ведь все E-регистры 32-разрядные (32 бита — это 4 байта).

Эти страшные слова «указатель базы», «индекс» на самом деле для нас практически ничего не означают. Вы можете забыть о назначении этих регистров и совершенно свободно использовать регистры ESP, EBP, ESI, EDI, как вам захочется. Только нужно сохранять их содержимое на время использования и восстанавливать обратно. Поэтому сейчас не забивайте голову индексами, базами и стеками. Хотя как раз про стек мы скоро поговорим.

Я уже рассказал почти обо всех регистрах, с которыми нам придётся иметь дело. Остались 2 специальных регистра: EIP и E-flags.

Регистр адреса текущей машинной команды — EIP

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

И опять посмотрите на первые две строки кода в отладчике:

Обратите внимание на столбик с байтами. Первая инструкция занимает в памяти два байта (B4h — байт кода операции, 09 — значение в команде). А вторая уже 3 байта, так как значение больше. Есть инструкции, которые занимают аж 15d байт.

Упростив процес выполнения машинной команды, можно сказать так: процессор знает, что если в первом байте содержится код операции 1011 0. b (от B0h до B7h), то это означает, что машинная команда занимает два байта. Тогда он увеличивает значение регистра EIP на два. Затем, выполнив саму маш.команду, он берёт следующий байт по адресу, указанному регистром EIP, и, узнав, что там инструкция с опкодом 1011 1. b (от B8h до BFh), увеличивает значение EIP на три. И так далее.

Таким образом, когда мы смотрим на выполнение программы в отладчике, регистр EIP всегда будет содержать адрес следующей команды процессора, которая ждёт выполнения (примечание).

Есть такие команды Ассемблера, цель которых просто изменить регистр EIP, например, jmp (от слова jump — прыгать). Допустим, ЦП получает машинную команду EB 10h, тогда он выполняет изменение EIP и сразу же приступает к выполнению следующей инструкции — той, что теперь будет указана в EIP.

Теоретически все это запомнить очень сложно и, самое главное, не нужно. Потому что на практике всё станет просто как 2х2.

Мы ещё не обсудили регистр Eflags, который для нас будет очень важен. Говорить о нём без примера программы, мне кажется, глупо. Скоро и до него доберёмся.

Также вы очень часто будете натыкаться на сегментные регистры (CS,DS,ES,FS,GS,SS). Они фигурируют во всех справочниках, отображаются в отладчиках и даже указываются в командах (например: mov byte ptr DS:[EBX],01).

Но сегментные регистры нужно обсуждать вместе с сегментацией памяти, а это отдельная тема, не первой важности.

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

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

Проведите prax01.com по отладчику CodeView самостоятельно (клавишей F10). Повторите этот процесс несколько раз, посмотрите, как будут меняться регистры. Найдите в окне памяти[5] код и данные программы. Чем больше времени вы будете проводить в отладчике, тем быстрее вы станете толковым программистом.

Я очень хорошо помню своё обучение. Самые сложные дни уже позади, ещё пару дней будет трудно и непонятно.

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

<<предыдущая глава&nbsp&nbsp&nbsp&nbsp&nbspследующая глава>>

Вернуться на главную

— CodeView DOS’овый отладчик, он не любит длинных, русских или сложных путей, поэтому рекомендую держать его папку в корне диска.

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

Кроме того, ДОС-программы в хрюшке сами по себе здорово тормозят машину. Но для нас это не критично. Я надеюсь 🙂

Чтоб в CodeView всё выглядело именно так, нужно включить в «Options» пункт «32-bit registers». И для правильного отображения нужно выключить «Screen Swap» (если брали CV у меня — всё уже настроено).

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector