28-01-2019 12:15

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

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

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

Как убрать замок с папки Windows 7? Способы решения проблемыВам будет интересно:Как убрать замок с папки Windows 7? Способы решения проблемы

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

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

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

  • Регистры общего назначения.
  • Индексные регистры.
  • Регистры-указатели.
  • Сегментные блоки памяти.
  • Регистры флагов.

Как сделать визитку в иллюстраторе своими силамиВам будет интересно:Как сделать визитку в иллюстраторе своими силами

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

Команды управления памятью

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

  • ЕАХ – Accumulator регистра аккумулятора;
  • EBX – Base – база;
  • ECX – Counter – отвечает за счет;
  • EDX – Data – блок ячеек данных;
  • ESI – Source Index – регистр источника;
  • EDI – Destination Index – регистр приемника;
  • ESP – Pointer of stack – указатель на стек;
  • EBP – Base Pointer - указатель основания стека.

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

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

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

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

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

  • ЕАХ (accumulator) регистр аккумуляции. Состоит из трех младших блоков по 8 бит: АХ, АН, AL. При необходимости можно обращаться к двум младшим блокам.
  • ЕВХ (base) – блок данных, который отвечает за базу. Так же, как и все регистры общего назначения, состоит из двух младших разделов по 8 бит и одного шестнадцатибитного. Таким образом в один регистр можно поместить сразу несколько числовых значений.
  • ЕСХ (counter) – отвечает за счетчик. Используется во время выполнения циклов. Без него не работает команда loop. Состоит из двух частей, одна из которых включает два восьмибитных блока СН и CL.
  • EDX – Data – требуется для операций точного определения адреса в оперативной памяти для функций ввода и вывода. Кроме того, в этот регистр можно помещать данные для переадресации на использование в процедурах и шаблонах. Работа с регистрами в 64-битной версии

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

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

Структура процессора и регистров

  • Регистр ESP – указатель на вершину стека. Всегда содержит адрес первого элемента, который был помещен в стек в кэш-памяти процессора. При необходимости может быть заполнен другими данными. Включает младший регистр SP, состоящий из 16 бит.
  • Регистр ЕВР (Base Pointer) – представляет собой блок ячеек памяти, требующийся для адресации данных, которые содержатся в стеке. При этом значительно облегчает доступ ко всем данным и переменным. Включает младший разряд ВР.

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

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

  • ESI (Source index) включает индекс источника (место, откуда берутся данные) и нужен для части действий над байтовыми строками;
  • EDI (Destination index) требуется для записи результатов вычислений. Также применяется для части строковых действий. Частично связан с регистром сегментов ES.

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

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

  • Регистр кода CS в обычном виде содержит адрес начала сегмента кода программного обеспечения (начала машинного представления кода). Таким образом осуществляется переход по командам за счет командного указателя IP.
  • Регистр данных содержит адрес данных, которые обрабатывает программа в момент начала запуска. Передвижение по данным осуществляется за счет смещения, которое записано в регистр EIP.
  • Stack Segment (ESS) нужен для сохранения начала сегмента абстрактного типа данных.
  • Extra segment – вспомогательный регистр, который содержит пустую область для записи данных во время некоторых действий над байтовыми строками. Может содержать информацию, аналогичную регистру данных.

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

Связь между блоками памяти

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

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

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



Источник