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

Что такое сегментные регистры? Не очень понял

Необходимость указывать сегментные регистры
Почему когда делаем mov, обязательно нужно писать mov al,cs:, если написать mov al,, то не.

Что такое сегментный регистр ассемблер. Смотреть фото Что такое сегментный регистр ассемблер. Смотреть картинку Что такое сегментный регистр ассемблер. Картинка про Что такое сегментный регистр ассемблер. Фото Что такое сегментный регистр ассемблерЧто такое регистры микропроцессора? Перечислите регистры общего назначения
Помогите пожалуйста решить задания по TASM 1) Что такое регистры микропроцессора? Перечислите.

Сегментные регистры
Добрый вечер! Возник вопрос по сегментным регистрам. Вроде бы когда мы программируем под Windows в.


Физический адрес
^^^^^^^^^^^^^^^^^^^^^^^

У первых плат 8086 шина-адреса была 20-битная. Такая ширина позволяет адресовать всего FFFFFh байт памяти. Запускаем виндовый калькулятор, переводим его с BIN, и введём 20 единиц. Так выглядит шина(А) на физическом уровне:

На аппаратном уровне линией(А20) управляет чипсет через порт(92h) системной логики, но ей можно управлять и программно: через прерывания BIOS, или порт(60h) контроллёра клавиатуры. Нужно сказать, что в современной архитектуре чипсет избавили от этой задачи, и управление взял на себя сам ЦП через ножку (А20-Mask). Проц пользуется ею при входе/выходе из защищённого режима.


Линейная и сегментная адресация
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Любая память имеет линейную структуру. То есть это прямая линия от нуля до N байт. Эту прямую можно логически разделить на некоторое кол-во отрезков. Размер памяти от этого не изменится, но зато изменится её лог/структура. Логический адрес привязан к типу памяти: ROM, RAM, Flash, HDD.

Посмотрим на линейный адрес А7FFFh.
В сегментном виде это А700:0FFFh, но не только.

Файлы типа(COM) всегда грузятся в один сегмент, поэтому значения этих регистров у них имеют одно и тоже значения. Файлы типа(EXE) могут иметь размер больше 64КБ, поэтому загрузчик ОС разбрасывает его содержимое по-нескольким сегментам. В этом случае, все данные программы (константы, переменные, текстовые строки) находятся в сегменте данных на который указывает регистр(DS), а сам код находится в другом сегменте памяти, на который указывает(CS). Так-же и стек находится в третьем/произвольном сегменте(SS). Их содержимое можно посмотреть в отладчиках:

Источник

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

Справочная система по языку 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.

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

Источник

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

Справочная система по языку 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.

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

Источник

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

Начиная с модели 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

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

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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

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