Что такое сегментный регистр

Погружение в ассемблер. Учимся работать с памятью

Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр

Содержание статьи

Другие статьи курса

Знакомимся с сегментными регистрами

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

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

Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр

Поместить какое-то число в сегментные регистры напрямую нельзя. Для этого надо:

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

Как ПК распределяет память

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

Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр

Первый байт диапазона — это первый символ в верхнем левом углу экрана. Второй байт — это цвет фона под символом и цвет самого символа. Затем (третьим байтом) идет второй символ. И так для всех 25 строк по 80 символов каждая.

Исторический факт. IBM PC образца 1981 года поставлялся в двух модификациях: с монохромным режимом и с цветным режимом. Тогдашним разработчикам игрушек приходилось придумывать разные эвристики, чтобы понять, какая у компьютера графика — монохромная или цветная. Несколько старых добрых игрушек для этого писали какую-нибудь цифру по адресу 0xB8000 и считывали ее обратно, чтобы узнать, в каком режиме сейчас идет работа — в цветном или в монохромном.

Прямой доступ к видеопамяти в текстовом режиме

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

Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр

Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр

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

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Источник

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

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

В программной модели микропроцессора имеется шесть сегментных регистров: cs, ss, ds, es, gs, fs.

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

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

Микропроцессор поддерживает следующие типы сегментов.

1. Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр cs (code segment register) – сегментный регистр кода. Он содержит адрес сегмента с машинными командами, к которому имеет доступ микропроцессор (т. е. эти команды загружаются в конвейер микропроцессора).

2. Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр ds (data segment register) – сегментный регистр данных, который хранит адрес сегмента данных текущей программы.

3. Сегмент стека. Этот сегмент представляет собой область памяти, называемую стеком. Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит регистр ss (stack segment register) – сегментный регистр стека, содержащий адрес сегмента стека.

4. Дополнительный сегмент данных. Не явно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в сегментном регистре ds. Если программе недостаточно одного сегмента данных, то она имеет возможность использовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в сегментном регистре ds, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах es, gs,fs (extension data segment registers).

Данный текст является ознакомительным фрагментом.

Продолжение на ЛитРес

Читайте также

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

3. Пользовательские регистры Как следует из названия, пользовательскими регистры называются потому, что программист может использовать их при написании своих программ. К этим регистрам относятся (рис. 2):1) восемь 32-битных регистров, которые могут использоваться

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

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

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

6. Регистры состояния и управления В микропроцессор включены несколько регистров, которые постоянно содержат информацию о состоянии как самого микропроцессора, так и программы, команды которой в данный момент загружены на конвейер. К этим регистрам относятся:1) регистр

ЛЕКЦИЯ № 15. Регистры

ЛЕКЦИЯ № 15. Регистры 1. Системные регистры микропроцессора Само название этих регистров говорит о том, что они выполняют специфические функции в системе. Использование системных регистров жестко регламентировано. Именно они обеспечивают работу защищенного режима. Их

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

2. Регистры управления В группу регистров управления входят четыре регистра: cr0, cr1, cr2, cr3. Эти регистры предназначены для общего управления системой. Регистры управления доступны только программам с уровнем привилегий 0.Хотя микропроцессор имеет четыре регистра

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

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

9.3.4. Модифицируемые регистры

9.3.4. Модифицируемые регистры Если в качестве побочного эффекта инструкция модифицирует значение одного или нескольких регистров, в функции asm() должна присутствовать четвертая секция. Например, инструкция fucomip меняет регистр кода завершения, обозначаемый как cc. Строки,

2.3.11 Регистры

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

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

39. Пользовательские регистры Как следует из названия, пользовательскими регистры называются потому, что программист может использовать их при написании своих программ. К этим регистрам относятся:1) восемь 32-битных регистров, которые могут использоваться

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

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

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

41. Сегментные регистры В программной модели микропроцессора имеется шесть сегментных регистров: cs, ss, ds, es, gs, fs.Их существование обусловлено спецификой организации и использования оперативной памяти микропроцессорами Intel. Она заключается в том, что микропроцессор

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

42. Регистры состояния и управления В микропроцессор включены несколько регистров, которые постоянно содержат информацию о состоянии как самого микропроцессора, так и программы, команды которой в данный момент загружены на конвейер. К этим регистрам относятся:1) регистр

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

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

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

44. Регистры управления В группу регистров управления входят четыре регистра: cr0, cr1, cr2, cr3. Эти регистры предназначены для общего управления системой. Регистры управления доступны только программам с уровнем привилегий 0.Хотя микропроцессор имеет четыре регистра

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

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

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

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

Источник

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

Обновл. 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 звёздочек с простым сообщением:

Источник

Что такое сегментный регистр

Основные регистры процессоров

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

1. ШИ управляет передачей данных на ОУ, в память и на внешние устройства ввода-вывода.

2. Сегментные регистры управляют адресацией памяти.

3. Выборка команд. Все программные команды находятся в памяти, и ШИ должен иметь доступ к ним для выборки их в очередь команд. ШИ должен «заглядывать вперед» и выбирать команды так, чтобы всегда существовала непустая очередь команд, готовых для выполнения.

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

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

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

Сегмент данных ( DS ) содержит определенные данные, константы и рабочие области, необходимые программе. Регистр сегмента данных ( DS ) адресует данный сегмент.

Сегмент стека ( SS ) содержит адреса возврата как для программы при возврате в операционную систему, так и для вызовов подпрограмм при возврате в главную программу. Регистр сегмента стека ( SS ) адресует данный сегмент.

Источник

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

Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр

Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр

Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр

Сегментные регистры используются для хранения начальных адресов полей памяти (сегментов), отведенных в программах для хранения:

— команд программы (сегмент кода – CS);

— данных (сегмент данных – DS);

— стековой области памяти (сегмент стека – SS);

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

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

Что такое сегментный регистр. Смотреть фото Что такое сегментный регистр. Смотреть картинку Что такое сегментный регистр. Картинка про Что такое сегментный регистр. Фото Что такое сегментный регистр

Рис.21 Сегментные регистры

1. Сегмент кода. Содержит команды программы.

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

2. Сегмент данных. Содержит обрабатываемые программой данные.

Для доступа к этому сегменту служит регистр DS (data segment register) — сегментный регистр данных, который хранит адрес сегмента данных текущей программы.

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

Работу со стеком микропроцессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этому сегменту служит регистр SS (stack segment register) — сегментный регистр стека, содержащий адрес сегмента стека.

4. Дополнительные сегменты данных.

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

Источник

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

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