что такое регистр в ассемблере

Регистры процессора

Начиная с модели 80386 процессоры Intel предоставляют 16 основных регистров для пользовательских программ и ещё 11 регистров для работы с мультимедийными приложениями (MMX) и числами с плавающей точкой (FPU/NPX). Все команды так или иначе изменяют содержимое регистров. Как уже говорилось, обращаться к регистрам быстрее и удобнее, чем к памяти. Поэтому при программировании на языке Ассемблера регистры используются очень широко.

В этом разделе мы рассмотрим основные регистры процессоров Intel. Названия и состав/количество регистров для других процессоров могут отличаться. Итак, основные регистры процессоров Intel.

Таблица 2.1. Основные регистры процессора.

НазваниеРазрядностьОсновное назначение
EAX32Аккумулятор
EBX32База
ECX32Счётчик
EDX32Регистр данных
EBP32Указатель базы
ESP32Указатель стека
ESI32Индекс источника
EDI32Индекс приёмника
EFLAGS32Регистр флагов
EIP32Указатель инструкции (команды)
CS16Сегментный регистр
DS16Сегментный регистр
ES16Сегментный регистр
FS16Сегментный регистр
GS16Сегментный регистр
SS16Сегментный регистр

Регистры EAX, EBX, ECX, EDX – это регистры общего назначения. Они имеют определённое назначение (так уж сложилось исторически), однако в них можно хранить любую информацию.

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

Регистр флагов и сегментные регистры требуют отдельного описания и будут более подробно рассмотрены далее.

Пока для вас здесь слишком много непонятных слов, но со временем всё прояснится)))

Когда-то процессоры были 16-разрядными, и, соответственно, все их регистры были также 16-разрядными. Для совместимости со старыми программами, а также для удобства программирования некоторые регистры разделены на 2 или 4 «маленьких» регистра, у каждого из которых есть свои имена. В таблице 2.2 перечислены такие регистры.

Вот пример такого регистра.

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

Из этого следует, что вы можете написать в своей программе, например, такие команды: Обе команды поместят в регистр AX число 1. Разница будет заключаться только в том, что вторая команда обнулит старшие разряды регистра EAX, то есть после выполнения второй команды в регистре EAX будет число 1. А первая команда оставит в старших разрядах регистра EAX старые данные. И если там были данные, отличные от нуля, то после выполнения первой команды в регистре EAX будет какое-то число, но не 1. А вот в регистре AX будет число 1. Сложно? Ну это пока… Со временем вы к таким вещам привыкните.

Мы пока не говорили о разрядах (битах). Эту тему мы обсудим в разделах, посвящённых системам счисления. А сейчас пока вам достаточно знать, что нулевой разряд (бит) – это младший бит. Он крайний справа. Старший бит – крайний слева. Номер старшего бита зависит от разрядности числа/регистра. Например, в 32-разрядном регистре старшим битом является 31-й бит (потому что отсчёт начинается с 0, а не с 1).

Ниже приведён список регистров общего назначения, которые можно поделить описанным выше способом и при этом к «половинкам» и «четвертинкам» этих регистров можно обращаться в программе как к отдельному регистру.

Таблица 2.2. «Делимые» регистры..

РегистрСтаршие разрядыИмена 16-ти и 8-ми битных регистров
31…1615…87…0
EAX.AX
AHAL
EBX.BX
BHBL
ECX.CX
CHCL
EDX.DX
DHDL
ESI.SI
EDI.DI
EBP.BP
ESP.SP
EIP.IP

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

Источник

Ассемблер. Сегменты памяти и регистры

Обновл. 27 Сен 2021 |

Результат выполнения программы:

Сегменты памяти

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

Сегменты памяти:

Сегмент данных (data segment) — представлен секциями .data и .bss. Секция .data используется для объявления области памяти, где хранятся элементы данных для программы. Эта секция не может быть расширена после объявления элементов данных, и она остается статической во всей программе. Секция .bss также является секцией статической памяти, содержащей буферы для данных, которые будут объявлены в программе позже. Эта буферная память заполнена нулями.

Сегмент кода (code segment) — представлен секцией .text. Он определяет область в памяти, в которой хранятся коды инструкций. Это также фиксированная область.

Стек (stack) — это сегмент, который содержит значения данных, передаваемые в функции и процедуры в программе.

Регистры

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

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

Регистры процессора

В архитектуре IA-32 есть десять 32-битных и шесть 16-битных процессорных регистров. Регистры делятся на три категории:

Общие регистры (General Registers);

Регистры управления (Control Registers);

Сегментные регистры (Segment Registers).

В свою очередь, общие регистры делятся на следующие:

Регистры данных (Data Registers);

Регистры-указатели (Pointer Registers);

Индексные регистры (Index Registers).

Регистры данных

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

как полные 32-битные регистры данных: EAX, EBX, ECX, EDX;

нижние половины 32-битных регистров могут использоваться как четыре 16-битных регистра данных: AX, BX, CX и DX;

нижняя и верхняя половины вышеупомянутых четырех 16-битных регистров могут использоваться как восемь 8-битных регистров данных: AH, AL, BH, BL, CH, CL, DH и DL.

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

Некоторые из этих регистров данных имеют специфическое применение в арифметических операциях:

AX (primary accumulator) — используется для ввода/вывода и в большинстве арифметических операций. Например, в операции умножения один операнд сохраняется в регистре EAX/AX/AL в соответствии с размером операнда.

BX (base register) — используется при индексированной адресации.

CX (count register) — хранит количество циклов в повторяющихся операциях (также, как и регистры ECX и CX).

DX (data register) — используется в операциях ввода/вывода, а также с регистрами AX и DX для выполнения операций умножения и деления, связанных с большими значениями.

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

Регистрами-указателями являются 32-битные регистры EIP, ESP и EBP и соответствующие им 16-битные регистры IP, SP и BP. Есть три категории регистров-указателей:

Указатель на инструкцию или команду (Instruction Pointer или IP) — 16-битный регистр IP хранит смещение адреса следующей команды, которая должна быть выполнена. IP в сочетании с регистром CS (как CS:IP) предоставляет полный адрес текущей инструкции в сегменте кода.

Указатель на стек (Stack Pointer или SP) — 16-битный регистр SP обеспечивает значение смещения в программном стеке. SP в сочетании с регистром SS (SS:SP) означает текущее положение данных или адреса в программном стеке.

Базовый указатель (Base Pointer или BP) — 16-битный регистр BP используется в основном при передаче параметров в подпрограммы. Адрес в регистре SS объединяется со смещением в BP, чтобы получить местоположение параметра. BP также можно комбинировать с DI и SI в качестве базового регистра для специальной адресации.

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

Индексные регистры

В процессоре существуют 32-битные индексные регистры ESI и EDI и их 16-битные версии: SI и DI. Все они используются в индексированной адресации, и, иногда, в операциях сложения/вычитания. Есть два типа индексных указателей:

Исходный индекс (Source Index или SI) — используется в качестве исходного индекса в строковых операциях.

Индекс назначения (Destination Index или DI) — используется в качестве индекса назначения в строковых операциях.

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

Регистры управления

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

Распространенные битовые флаги:

Флаг переполнения (Overflow Flag или OF) — указывает на переполнение старшего бита данных (крайнего левого бита) после signed арифметической операции.

Флаг ловушка (Trap Flag или TF) — позволяет настроить работу процессора в одношаговом режиме.

Вспомогательный флаг переноса (Auxiliary Carry Flag или AF) — после выполнения арифметической операции содержит перенос от бита 3 до бита 4. Используется для специализированной арифметики. AF устанавливается, когда 1-байтовая арифметическая операция вызывает перенос из бита 3 в бит 4.

Флаг переноса (Carry Flag или CF) — после выполнения арифметической операции содержит перенос 0 или 1 из старшего бита (крайнего слева). Кроме того, хранит содержимое последнего бита операции сдвига или поворота.

В следующей таблице указано положение битовых флагов в 16-битном регистре флагов:

Флаг:ODITSZAPC
Бит №:1514131211109876543210

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

Сегменты — это специфические части программы, которые содержат данные, код и стек. Есть три основных сегмента:

Сегмент кода (Code Segment или CS) — содержит все команды и инструкции, которые должны быть выполнены. 16-битный регистр сегмента кода или регистр CS хранит начальный адрес сегмента кода.

Сегмент данных (Data Segment или DS) — содержит данные, константы и рабочие области. 16-битный регистр сегмента данных или регистр DS хранит начальный адрес сегмента данных.

Сегмент стека (Stack Segment или SS) — содержит данные и возвращаемые адреса процедур или подпрограмм. Он представлен в виде структуры данных «Стек». Регистр сегмента стека или регистр SS хранит начальный адрес стека.

Кроме регистров CS, DS и SS существуют и другие регистры дополнительных сегментов — ES (Extra Segment), FS и GS, которые предоставляют дополнительные сегменты для хранения данных.

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

Пример на практике

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

Источник

Уроки FASM. Регистры. Window x32

Что это такое и зачем нужны?

Это самая быстрая память в ПК по сравнению с ОЗУ. Но при этом размер регистров намного меньше чем ОЗУ, по этой причине используют ОЗУ.

Регистр RAX это дополнение EAX, EAX это дополнение AX, AX это объединение 2 регистров AH и AL.

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблереwikipedia

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблереOllyDbg

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблереOllydbg

Зачем так много разновидностей 1 регистра?

Для поддержке более старых версий процессоров x86 (обратная совместимость, например: на 64 битном ЦП запустить 32 битную программу)

Какие бывают регистры?

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

Это 32 битные регистры (16, 8):

ESI (SI, это 16 битный регистр, меньше нет)

EDI (DI, это 16 битный регистр, меньше нет)

Как работать с регистрами?

В них можно хранить любую информацию: числа со знаком (int), числа без знака (unsigned int), числа с плавающей запятой (float, в x64 можно хранить double в регистре), адрес, символы (не превышая размер регистра), и другую информацию.

Попробуем записать значение в регистры:

Что за регистр FLAGS?

Это регистр состояния ЦП, он нужен для проверки и сравнению чисел, проверки регистров.

Источник

Регистры ассемблера: виды, назначение и особенности команд

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

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

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере Вам будет интересно: Как записать гитару в FL Studio: простейшие методы

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

Виды регистров

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

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере Вам будет интересно: Как сделать визитку в иллюстраторе своими силами

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

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

Регистры ассемблера получили название согласно выполняемым функциям:

Особенности использования регистров

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

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

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

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

Регистры-индексы

Индексные блоки памяти требуются для расширенной индексации. Кроме того, они участвуют в работе некоторых арифметических операций и обработки байтовых строк – последовательности байт, содержащих произвольное значение. В assembler включено два регистра, которые отвечают за индексирование ESI и EDI. Опишем их:

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

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

Регистр указателя команд

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

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

Регистр флагов ассемблера

Отвечает за текущее состояние центрального процессора. Состоит из 16 бит, из которых могут быть заняты только 9. Заполнение данного блока памяти осуществляется после выполнения, пропуска или кода ошибки в результате предыдущей команды. Кроме того, часть битов используется процессором и может инициализироваться и удаляться посредством определенной системы команд. Таким образом осуществляется управление системой команд.

Источник

Что такое регистр в ассемблере

Справочная система по языку Assembler

Программная модель микропроцессора


Пользовательские регистры

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

Рис. 1. Пользовательские регистры микропроцессоров i486 и Pentium

Почему многие из этих регистров приведены с наклонной разделительной чертой?
Нет, это не разные регистры — это части одного большого 32-разрядного регистра. Их можно использовать в программе как отдельные объекты.
Так сделано для обеспечения работоспособности программ, написанных для младших 16-разрядных моделей микропроцессоров фирмы Intel, начиная с i8086.
Микропроцессоры i486 и Pentium имеют в основном 32-разрядные регистры. Их количество, за исключением сегментных регистров, такое же, как и у i8086, но размерность больше, что и отражено в их обозначениях — они имеют
приставку e ( E xtended ).

Разберемся подробнее с составом и назначением пользовательских регистров.

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


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


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

что такое регистр в ассемблере. Смотреть фото что такое регистр в ассемблере. Смотреть картинку что такое регистр в ассемблере. Картинка про что такое регистр в ассемблере. Фото что такое регистр в ассемблере

Рис. 2. Содержимое регистра eflags

Таблица 1. Флаги состояния

Мнемоника флагаФлагНомер бита в eflagsСодержание и назначение
cfФлаг переноса
(Carry Flag)
01 — арифметическая операция произвела перенос из старшего бита результата. Старшим является 7, 15 или 31-й бит в зависимости от размерности операнда;
0 — переноса не было
pfФлаг паритета
(Parity Flag)
21 — 8 младших разрядов (этот флаг — только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц;
0 — 8 младших разрядов результата содержат нечетное число единиц
afВспомогательный флаг переноса
(Auxiliary carry Flag)
4Только для команд работающих с BCD-числами. Фиксирует факт заема из младшей тетрады результата:
1 — в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде;
0 — переносов и заемов в(из) 3 разряд(а) младшей тетрады результата не было
zfФлаг нуля (Zero Flag)61 — результат нулевой;
0 — результат ненулевой
sfФлаг знака
(Sign Flag)
7Отражает состояние старшего бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно):
1 — старший бит результата равен 1;
0 — старший бит результата равен 0
ofФлаг переполнения
(Overflow Flag)
11Флаг of используется для фиксирования факта потери значащего бита при арифметических операциях:
1 — в результате операции происходит перенос (заем) в(из) старшего, знакового бита результата (биты 7, 15 или 31 для 8, 16 или 32-разрядных операндов соответственно);
0 — в результате операции не происходит переноса (заема) в(из) старшего, знакового бита результата
ioplУровень Привилегий ввода-вывода
(Input/Output Privilege Level)
12, 13Используется в защищенном режиме работы микропроцессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи
ntфлажок вложенности задачи
(Nested Task)
14Используется в защищенном режиме работы микропроцессора для фиксации того факта, что одна задача вложена в другую

Таблица 2. Системные флаги

Мнемоника флагаФлагНомер бита в eflagsСодержание и назначение
tfФлаг трассировки
(Trace Flag)
8Предназначен для организации пошаговой работы микропроцессора.
1 — микропроцессор генерирует прерывание с номером 1 после выполнения каждой машинной команды. Может использоваться при отладке программ, в частности отладчиками;
0 — обычная работа
ifФлаг прерывания
(Interrupt enable Flag)
9Предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний по входу INTR).
1 — аппаратные прерывания разрешены;
0 — аппаратные прерывания запрещены
rfФлаг возобновления
(Resume Flag)
16Используется при обработке прерываний от регистров отладки.
vmФлаг виртуального
(Virtual 8086 Mode)
17Признак работы микропроцессора в режиме виртуального 8086.
1 — процессор работает в режиме виртуального 8086;
0 — процессор работает в реальном или защищенном режиме
acФлаг контроля выравнивания
(Alignment Check)
18Предназначен для разрешения контроля выравнивания при обращениях к памяти. Используется совместно с битом am в системном регистре cr0. К примеру, Pentium разрешает размещать команды и данные с любого адреса. Если требуется контролировать выравнивание данных и команд по адресам кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут возбуждать исключительную ситуацию

Системные регистры микропроцессора

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

Регистры управления

Эти регистры предназначены для общего управления системой.
Регистры управления доступны только программам с уровнем привилегий 0.

Регистры системных адресов


Регистры отладки

Регистр dr6 называется регистром состояния отладки. Биты этого регистра устанавливаются в соответствии с причинами, которые вызвали возникновение последнего исключения с номером 1.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *