Что такое регистр в программировании
На этом шаге мы познакомимся с регистрами .
Процессор имеет 14 регистров (смотри шаг 4), используемых для управления выполняющейся программой, адресации памяти и обеспечения арифметических вычислений. Каждый регистр имеет длину в одно слово (16 бит) и адресуется по имени. Биты регистра принято нумеровать слева направо.
Замечание . Процессоры 80386, 80486, Pentium имеют ряд дополнительных регистров, некоторые из них 32-битовые. Эти регистры здесь не рассматриваются.
- Сегментные регистры (CS, DS, SS, ES) .
- Регистр сегмента кода (CS) содержит начальный адрес сегмента кода. Этот адрес плюс значение смещения в командном указателе ( IP ) определяет адрес команды, которая должна быть выбрана для выполнения .
- Регистр сегмента данных (DS) содержит начальный адрес сегмента данных. Этот адрес плюс значение смещения, определенное в команде, указывают на конкретную ячейку в сегменте данных.
- Регистр сегмента стека (SS) содержит начальный адрес сегмента стека.
- Регистр ES . Некоторые операции над строками используют дополнительный сегментный регистр для управления адресацией памяти. В этом случае этот регистр связан с индексным регистром DI . Если необходимо использовать регистр ES , ассемблерная программа должна его инициализировать.
- Регистры общего назначения (AX, BX, CX, DX) . Особенность этих регистров состоит в том, что возможна адресация их как одного целого слова, так и однобайтовой части . Левый байт является старшей частью ( High ), а правый — младшей частью ( Low ) соответствующего регистра. Например, двухбайтовый регистр CX состоит из двух однобайтовых CH и CL , и ссылки на регистр возможны по любому из этих трех имен.
Рис.1. Адресация регистров общего назначения
- Регистр AX . Он является основным сумматором и применяется для всех операций ввода-вывода, некоторых операций над строками и некоторых арифметических операций. Например, команды умножения, деления и сдвига предполагают использование регистра AX . Некоторые команды генерируют более эффективный код, если они имеют ссылки на регистр AX .
- Регистр BX . Он является базовым регистром . Это единственный регистр общего назначения, который может использоваться в качестве «индекса» для расширенной адресации. Также он используется при организации вычислений.
- Регистр CX . Это счетчик , используемый для управления числом повторений циклов и для операций сдвига влево или вправо. Регистр CX используется также при вычислениях.
- Регистр DX . Он является регистром данных и применяется для некоторых операций ввода-вывода и тех операций умножения и деления над большими числами, которые используют регистровую пару DX:AX .
- Регистр SP. Указатель стека обеспечивает использование стека в памяти, позволяет временно хранить адреса и иногда данные. Этот регистр связан с регистром SS для адресации стека.
- Регистр BP. Указатель базы облегчает доступ к параметрам (данным и адресам, переданным через стек).
- Регистр SI . Этот регистр является индексом источника данных и применяется для некоторых операций над строками. В этом случае он адресует память в паре с регистром DS .
- Регистр DI . Этот регистр является индексом назначения и применяется также для строковых операций. В данном случае он используется совместно с регистром ES .
Рис.2. Структура флагового регистра
Многие арифметические команды и команды сравнения изменяют состояние флагов. Назначение флагов приведено в таблице 1.
| Флаг | Назначение |
|---|---|
| OF (Переполнение) | Указывает на переполнение старшего бита при арифметических командах. |
| DF (Направление) | Обозначает левое или правое направление пересылки или сравнения строковых данных. |
| IF (Прерывание) | Указывает на возможность внешних прерываний. |
| TF (Пошаговый режим) | Обеспечивает возможность работы процессора в пошаговом режиме. |
| SF (Знак) | Содержит результирующий знак после арифметических операций (0 — плюс, 1- минус). |
| ZF (Ноль) | Показывает результат арифметических операций и операций сравнения (0 — ненулевой, 1 — нулевой результат). |
| AF (Внешний перенос) | Содержит перенос из 3-го бита для 8-битовых данных, используется для специальных арифметических операций. |
| PF (Контроль четности, паритета) | Если младшие 8 битов содержат четное число единиц, то значение флага равно 1, в противном случае — 0. |
| CF (Перенос) | Содержит перенос из старшего бита после арифметических операций, а также последний бит при сдвигах или циклических сдвигах. |
При программировании на Ассемблере наиболее часто используются флаги OF, SF, ZF и CF для арифметических операций и операций сравнения, а флаг DF — для обозначения направления в операциях над строками.
На следующем шаге мы начнем разбирать основные арифметические команды.
Регистр процессора
Регистр процессора — блок ячеек памяти, образующий сверхбыструю оперативную память (СОЗУ) внутри процессора; используется самим процессором и большой частью недоступен программисту: например, при выборке из памяти очередной команды она помещается в регистр команд (англ.), к которому программист обратиться не может.
Имеются также регистры, которые в принципе программно доступны, но обращение к ним осуществляется из программ операционной системы, например, управляющие регистры и теневые регистры дескрипторов сегментов. Этими регистрами пользуются в основном разработчики операционных систем.
Существуют также так называемые регистры общего назначения (РОН), представляющие собой часть регистров процессора, использующихся без ограничения в арифметических операциях, но имеющие определенные ограничения, например в строковых. РОН, не характерные для эпохи мейнфреймов типа IBM/370 [1] стали популярными в микропроцессорах архитектуры X86 — i8085, i8086 и последующих [2] .
Специальные регистры [3] содержат данные, необходимые для работы процессора — смещения базовых таблиц, уровни доступа и т. д.
Часть специальных регистров принадлежит устройству управления, которое управляет процессором путём генерации последовательности микрокоманд.
Доступ к значениям, хранящимся в регистрах, как правило, в несколько раз быстрее, чем доступ к ячейкам оперативной памяти (даже если кеш-память содержит нужные данные), но объём оперативной памяти намного превосходит суммарный объём регистров (объём среднего модуля оперативной памяти сегодня составляет 1-4 Гб [4] , суммарная «ёмкость» регистров общего назначения/данных для процессора Intel 80386 и более новых 32 битов * 8 = 256 бит).
Архитектура x86
IP (англ. Instruction Pointer ) — регистр, обозначающий смещение следующей команды относительно кодового сегмента.
IP — 16-битный (младшая часть EIP)
EIP — 32-битный аналог (младшая часть RIP)
RIP — 64-битный аналог
Сегментные регистры — регистры, указывающие на сегменты.
CS (англ. Code Segment ), DS (англ. Data Segment ), SS (англ. Stack Segment ), ES, FS, GS
В реальном режиме работы процессора сегментные регистры содержат адрес начала 64Kb сегмента, смещенный вправо на 4 бита.
В защищенном режиме работы процессора сегментные регистры содержат селектор сегмента памяти, выделенного ОС.
CS — указатель на кодовый сегмент. Связка CS:IP (CS:EIP/CS:RIP — в защищенном/64-битном режиме) указывает на адрес в памяти следующей команды.
Регистры данных — служат для хранения промежуточных вычислений.
RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8 — R15 — 64-битные
EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D — R15D — 32-битные (extended AX)
AX, CX, DX, BX, SP, BP, SI, DI, R8W — R15W — 16-битные
AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B — R15B — 8-битные (половинки 16-ти битных регистров)
например, AH — high AX — старшая половинка 8 бит
AL — low AX — младшая половинка 8 бит
| RAX | RCX | RDX | RBX | ||||||||||||||||||||||||||||
| EAX | ECX | EDX | EBX | ||||||||||||||||||||||||||||
| AX | CX | DX | BX | ||||||||||||||||||||||||||||
| AH | AL | CH | CL | DH | DL | BH | BL | ||||||||||||||||||||||||
| RSP | RBP | RSI | RDI | Rx | |||||||||||||||||||||||||||||||||||
| ESP | EBP | ESI | EDI | RxD | |||||||||||||||||||||||||||||||||||
| SP | BP | SI | DI | RxW | |||||||||||||||||||||||||||||||||||
| SPL | BPL | SIL | DIL | RxB | |||||||||||||||||||||||||||||||||||
где x — 8..15.
Регистры RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL доступны только в 64-битном режиме работы процессора.
Регистр флагов FLAGS (16 бит) / EFLAGS (32 бита) / RFLAGS (64 бита) — содержит текущее состояние процессора.
Регистром называется функциональный узел, осуществляющий приём, хранение и передачу информации. Регистры состоят из группы триггеров, обычно D. По типу приёма и выдачи информации различают 2 типа регистров:
- С последовательным приёмом и выдачей информации — сдвиговые регистры.
- С параллельным приёмом и выдачей информации — параллельные регистры.
Сдвиговые регистры представляют собой последовательно соединённую цепочку триггеров. Основной режим работы — сдвиг разрядов кода от одного триггера к другому на каждый импульс тактового сигнала.
По назначению регистры различаются на:
- аккумулятор — используется для хранения промежуточных результатов арифметических и логических операций и инструкций ввода-вывода;
- флаговые — хранят признаки результатов арифметических и логических операций;
- общего назначения — хранят операнды арифметических и логических выражений, индексы и адреса;
- индексные — хранят индексы исходных и целевых элементов массива;
- указательные — хранят указатели на специальные области памяти (указатель текущей операции, указатель базы, указатель стека);
- сегментные — хранят адреса и селекторы сегментов памяти;
- управляющие — хранят информацию, управляющую состоянием процессора, а также адреса системных таблиц.
Счётчик команд
IP
IP (англ. Instruction Pointer ) — регистр, содержащий адрес-смещение следующей команды, подлежащей исполнению, относительно кодового сегмента CS в процессорах семейства x86.
Регистр IP связан с CS в виде CS:IP, где CS является текущим кодовым сегментом, а IP — текущим смещением относительно этого сегмента.
Регистр IP является 16-разрядным регистром-указателем. Кроме него, в состав регистров этого типа входят SP (англ. Stack Pointer — указатель стека) и BP (англ. Base Pointer — базовый указатель).
Например, CS содержит значение 2CB5[0]H , в регистре IP хранится смещение 123H .
Адрес следующей инструкции, подлежащей исполнению, вычисляется путем суммирования адреса в CS (сегменте кода) со смещением в регистре IP:
2CB50H + 123H = 2CC73H
Таким образом, адрес следующей инструкции для исполнения равен 2CC73H .
При выполнении текущей инструкции процессор автоматически изменяет значение в регистре IP, в результате чего регистровая пара CS:IP всегда указывает на следующую подлежащую исполнению инструкцию.
EIP
Начиная с процессора 80386 была введена 32-разрядная версия регистра-указателя — EIP. В данном случае IP является младшей частью этого регистра (первые 16 разрядов). Принцип работы EIP в целом схож с работой регистра IP. Основная разница состоит в том, что в защищённом режиме, в отличие от реального режима, регистр CS является селектором (селектор указывает не на сам сегмент в памяти, а на его дескриптор сегмента в таблице дескрипторов).
RIP

В 64-разрядных процессорах используется свой регистр-указатель инструкций — RIP.
Младшей частью этого регистра является регистр EIP.
На основе RIP в 64-разрядных процессорах введён новый метод адресации RIP-relative. В остальном работа RIP аналогична работе регистра EIP.
См. также
Примечания
- ↑Barbara J. Burian Программирование на языке ассемблера системы IBM/370 упрощённый подход = A simple approach to S/370 assembly language programming. — New Jersy: Prentice-Hall, Inc, 1977.
- ↑Погорелый С. Д., Слободянюк Т. Ф. Программное обеспечение микропроцессорных систем. Справочник. — 2-е, переработанное и дополненное. — К: Тэхника, 1989. — С. 7, 48-51. — 301 с. — (Справочник специалиста). — 50 000 экз. — ISBN 5-335-00169-0
- ↑Intel 64 and IA-32 Architectures Software Developer’s Manual. Volume 1: Basic Architecture. 3.4 BASIC PROGRAM EXECUTION REGISTERS (англ.)
- ↑Статистика объёма оперативной памяти ПК, используемых для игр
| Это заготовка статьи о компьютерах. Вы можете помочь проекту, исправив и дополнив её. Это примечание по возможности следует заменить более точным. |
| Pipeline | Конвейер · In-Order & Out-of-Order execution · Переименование регистров · Speculative execution |
| Уровни | Бит · Инструкций · Суперскалярность · Данных · Задач |
| Потоки | Многопоточность · Simultaneous multithreading · Hyperthreading · Superthreading · Аппаратная виртуализация |
| Классификация Флинна | SISD · SIMD · MISD · MIMD |
| 8-бит | MCS-51 • MCS-48 • PIC • AVR • Z8 • H8 • COP8 • 68HC08 • 68HC11 |
| 16-бит | MSP430 • MCS-96 • MCS-296 • PIC24 • MAXQ • Nios • 68HC12 • 68HC16 |
| 32-бит | ARM • MIPS • AVR32 • PIC32 • 683XX • M32R • SuperH • Nios II • Am29000 • LatticeMico32 • MPC5xx • PowerQUICC • Parallax Propeller |
- Технологии процессоров
- Архитектура компьютеров
- Программирование x86
- Обработка команд
Wikimedia Foundation . 2010 .
- Харьковский национальный медицинский университет
- Сегодня увольнения не будет (фильм)
Полезное
Смотреть что такое «Регистр процессора» в других словарях:
- регистр процессора — Память процессора, предназначенная для хранения основных или промежуточных данных либо их частей и используемая для выполнения машинных команд [Источник] Тематики информационные технологии в целом EN processor register … Справочник технического переводчика
- Аккумулятор (регистр процессора) — У этого термина существуют и другие значения, см. Аккумулятор (значения). Аккумулятор (регистр процессора) регистр, в котором сохраняются непосредственные результаты выполнения арифметических и логических команд. Альтернативными методами для… … Википедия
- Регистр флагов — Регистр флагов регистр процессора, отражающий текущее состояние процессора. Содержание 1 Архитектура x86 1.1 Флаги состояния 1.2 Управляющий флаг … Википедия
- Регистр — Регистр: В Викисловаре есть статья «регистр» Регистр (цифровая техника) последовательное или параллельное логическое … Википедия
- Регистр (вычислительная техника) — Регистр процессора сверхбыстрая память внутри процессора, предназначенная прежде всего для хранения промежуточных результатов вычисления (регистр общего назначения/регистр данных) или содержащая данные, необходимые для работы процессора … … Википедия
- регистр общего назначения — РОН — [Е.С.Алексеев, А.А.Мячев. Англо русский толковый словарь по системотехнике ЭВМ. Москва 1993] регистр общего назначения универсальный регистр общий регистр Регистр процессора, доступный программам и используемый ими для временного… … Справочник технического переводчика
- РЕГИСТР КОМПЬЮТЕРА — Специализированная ячейка памяти, входящая в состав процессора. Регистры выполняют функции кратковременного хранения и преобразования данных или команд. На физическом уровне регистр представляет собой совокупность триггеров, способных хранить… … Словарь бизнес-терминов
- Регистр (в вычислит. технике) — Регистр ЦВМ, часть памяти вычислительной машины обычно ёмкостью в одно машинное слово, предназначенная для запоминания (а иногда также и для преобразования) кодов. В каждой ЦВМ имеются наборы Р. различного назначения, например Р. центрального… … Большая советская энциклопедия
- Регистр (цифровая техника) — У этого термина существуют и другие значения, см. Регистр. 4 х разрядный сдвиговый регистр, преобразователь последовательного кода в параллельный и обратно Регистр последовательное или параллельное … Википедия
- Регистры процессора — Регистр процессора сверхбыстрая память внутри процессора, предназначенная прежде всего для хранения промежуточных результатов вычисления (регистр общего назначения/регистр данных) или содержащая данные, необходимые для работы процессора … … Википедия
- Обратная связь: Техподдержка, Реклама на сайте
- Путешествия
Экспорт словарей на сайты, сделанные на PHP,
WordPress, MODx.
- Пометить текст и поделитьсяИскать в этом же словареИскать синонимы
- Искать во всех словарях
- Искать в переводах
- Искать в ИнтернетеИскать в этой же категории
Регистры процессора
Начиная с модели 80386 процессоры Intel предоставляют 16 основных регистров для пользовательских программ и ещё 11 регистров для работы с мультимедийными приложениями (MMX) и числами с плавающей точкой (FPU/NPX). Все команды так или иначе изменяют содержимое регистров. Как уже говорилось, обращаться к регистрам быстрее и удобнее, чем к памяти. Поэтому при программировании на языке Ассемблера регистры используются очень широко.
В этом разделе мы рассмотрим основные регистры процессоров Intel. Названия и состав/количество регистров для других процессоров могут отличаться. Итак, основные регистры процессоров Intel.
Таблица 2.1. Основные регистры процессора.
| Название | Разрядность | Основное назначение |
| EAX | 32 | Аккумулятор |
| EBX | 32 | База |
| ECX | 32 | Счётчик |
| EDX | 32 | Регистр данных |
| EBP | 32 | Указатель базы |
| ESP | 32 | Указатель стека |
| ESI | 32 | Индекс источника |
| EDI | 32 | Индекс приёмника |
| EFLAGS | 32 | Регистр флагов |
| EIP | 32 | Указатель инструкции (команды) |
| CS | 16 | Сегментный регистр |
| DS | 16 | Сегментный регистр |
| ES | 16 | Сегментный регистр |
| FS | 16 | Сегментный регистр |
| GS | 16 | Сегментный регистр |
| SS | 16 | Сегментный регистр |
Регистры EAX, EBX, ECX, EDX – это регистры общего назначения. Они имеют определённое назначение (так уж сложилось исторически), однако в них можно хранить любую информацию.
Регистры EBP, ESP, ESI, EDI – это также регистры общего назначения. Они имеют уже более конкретное назначение. В них также можно хранить пользовательские данные, но делать это нужно уже более осторожно, чтобы не получить «неожиданный» результат.
Регистр флагов и сегментные регистры требуют отдельного описания и будут более подробно рассмотрены далее.
Пока для вас здесь слишком много непонятных слов, но со временем всё прояснится)))
Когда-то процессоры были 16-разрядными, и, соответственно, все их регистры были также 16-разрядными. Для совместимости со старыми программами, а также для удобства программирования некоторые регистры разделены на 2 или 4 «маленьких» регистра, у каждого из которых есть свои имена. В таблице 2.2 перечислены такие регистры.
Вот пример такого регистра.

Из этого следует, что вы можете написать в своей программе, например, такие команды:
MOV AX, 1 MOV EAX, 1
Обе команды поместят в регистр AX число 1. Разница будет заключаться только в том, что вторая команда обнулит старшие разряды регистра EAX, то есть после выполнения второй команды в регистре EAX будет число 1. А первая команда оставит в старших разрядах регистра EAX старые данные. И если там были данные, отличные от нуля, то после выполнения первой команды в регистре EAX будет какое-то число, но не 1. А вот в регистре AX будет число 1. Сложно? Ну это пока… Со временем вы к таким вещам привыкните.
Мы пока не говорили о разрядах (битах). Эту тему мы обсудим в разделах, посвящённых системам счисления. А сейчас пока вам достаточно знать, что нулевой разряд (бит) – это младший бит. Он крайний справа. Старший бит – крайний слева. Номер старшего бита зависит от разрядности числа/регистра. Например, в 32-разрядном регистре старшим битом является 31-й бит (потому что отсчёт начинается с 0, а не с 1).
Ниже приведён список регистров общего назначения, которые можно поделить описанным выше способом и при этом к «половинкам» и «четвертинкам» этих регистров можно обращаться в программе как к отдельному регистру.
Таблица 2.2. «Делимые» регистры..
| Регистр | Старшие разряды | Имена 16-ти и 8-ми битных регистров | |
| 31…16 | 15…8 | 7…0 | |
| EAX | . | AX | |
| AH | AL | ||
| EBX | . | BX | |
| BH | BL | ||
| ECX | . | CX | |
| CH | CL | ||
| EDX | . | DX | |
| DH | DL | ||
| ESI | . | SI | |
| EDI | . | DI | |
| EBP | . | BP | |
| ESP | . | SP | |
| EIP | . | IP | |
На этом мы закончим наше краткое знакомство с регистрами. Если вам пока не всё понятно – просто прочитайте этот раздел, чтобы более-менее представлять себе, что такое регистры. По мере приобретения новых знаний вы можете вернуться к этому разделу и уже на новом уровне воспринять эту информацию. А в следующем разделе мы коротко опишем процесс выполнения команды.
Регистры процессора
Регистр процессора, как мы уже рассматривали раньше, — это, просто говоря, специально отведённая память для временного хранения каких-то данных, переменная.
Процессоры 8086 — 80186 имеют 14 регистров. В прошлой главе мы встретили два из них: AH и DX. В Таблицах № 1, 2 и 3 приведены списки всех регистров, кроме IP и регистра флагов, которые со временем будут рассматриваться отдельно:
Таблица № 1. Регистры данных
Все регистры процессора можно разделить на регистры данных и сегментные регистры.
Регистры данных (Таблица № 1)
Эти регистры процессора могут использоваться программистом по своему усмотрению (за исключением некоторых случаев). В них можно хранить любые данные (числа, адреса и пр.). В верхнем ряду
AX (Accumulator register — аккумулятор). Применяется для хранения промежуточных данных. В некоторых командах использование этого регистра обязательно
BX (Base register — база). Применяется для хранения базового адреса некоторого объекта в памяти
CX (Count register — счетчик). Применяется в командах, производящих некоторые повторяющиеся действия.
DX (Data register — регистр данных). Так же, как и регистр AX, он хранит промежуточные данные. В некоторых командах его использование обязательно; для некоторых команд это происходит неявно
Эти шестнадцатиразрядные регистры могут хранить числа от 0 до 65.535 (от 0h до FFFFh в шестнадцатеричной системе (вспоминаем прошлую главу)). Под ними идет ряд восьмиразрядных регистров (AH, AL, BH, BL, CH, CL, DH, DL), которые могут хранить максимальное число 255 (FFh). Это половинки (старшая или младшая) шестнадцатиразрядных регистров.
Мы уже знаем оператор MOV, который предназначен для загрузки числа в регистр. Чтобы присвоить, к примеру, регистру AL число 35h, нам необходимо записать так:
а регистру AX число 346Ah — так:
Если мы попытаемся загрузить большее число, чем может содержать регистр, то, при ассемблировании программы произойдет ошибка.
Например, следующие записи будут ошибочны:
mov ah,123h максимум FFh
mov bx,12345h максимум FFFFh
mov dl,100h максимум FFh
Здесь надо отметить, что если шестнадцатеричное число начинается не с цифры (напр.: 12h), а с буквы (A-F) (напр.: С5h), то перед таким числом ставится нуль: 0C5h. Это необходимо для того, чтобы программа-ассемблер могла отличить где шестнадцатеричное число, а где метка. Ниже мы рассмотрим это на примере.
Допустим, мы выполнили команду mov ax,1234h. В этом случае в регистре AH будет находится число 12h, а в регистре AL — 34h. Т.е. AL, BL, CL, DL — это младшие (Low), а AH, BH, CH, DH — старшие (High) половинки шестнадцатиразрядных регистров (см. Таблицу № 4).
Таблица № 4. Результаты выполнения различных команд
AX = 1234h, AH = 12h, AL = 34h