Разное

Регистр ds: в языке ассемблера? — Хабр Q&A

41. Сегментные регистры. Информатика и информационные технологии

41. Сегментные регистры. Информатика и информационные технологии

ВикиЧтение

Информатика и информационные технологии
Цветкова А В

Содержание

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

В программной модели микропроцессора имеется шесть сегментных регистров: 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. Аппаратно микропроцессор содержит восемь регистров отладки, но реально из них используются только

Учебные материалы по математике | Системное программирование на ассемблер

Системное программирование

Задание 1

Текст задания

Задание 1. 1. Используя командные файлы, подготовьте к выполнению и запустите программы из примеров 1, 2 и 3. Убедитесь, что они выводят на экран нужный текст и успешно завершаются.

Задание 1.2. Заполните таблицы трассировки для программ вывода строки на экран из примеров 1, 2 и 3.

Таблица трассировки программы

Шаг

Машинный код

Команда

Регистры

Флаги

AX

BX

CX

DX

SP

DS

SS

CS

IP

CZSOPAID

1

2

Пример 1

Текст программы

stak segment stack ‘stack’ ;Начало сегмента стека
db 256 dup (?) ;Резервируем 256 байт для стека
stak ends ;Конец сегмента стека
data segment ‘data’ ;Начало сегмента данных
Hello db ‘Hello, World!$’ ;Строка для вывода
data ends ;Конец сегмента данных
code segment ‘code’ ;Начало сегмента кода
assume CS:code, DS:data, SS:stak  ;Сегментный регистр CS будет ;указывать на сегмент команд,
  ;регистр DS — на сегмент данных, ;SS – на стек
start:  ;Точка входа в программу start
;Обязательная инициализация регистра DS в начале программы
mov AX, data  ;Адрес сегмента данных сначала ;загрузим в AX,
mov DS, AX  ;а затем перенесем из AX в DS
mov AH,09h  ;Функция DOS 9h вывода на экран
mov DX, offset Hello ;Адрес начала строки ‘Hello, ;World!’ записывается в регистр DX
int 21h  ;Вызов функции DOS
mov AX,4C00h  ;Функция 4Ch завершения ;программы с кодом возврата 0
int 21h  ;Вызов функции DOS
code ends  ;Конец сегмента кода
end start  ;Конец текста программы с точкой ;входа

Текст командного файла

cls

tasm. exe task1.asm

tlink. exe /x task1.obj

task1

Таблица трассировки

Шаг

Машинный код

Команда

Регистры

Флаги

AX

BX

CX

DX

SP

DS

SS

CS

IP

CZSOPAID

0000

0000

0000

0000

0100

489D

48AD

48BE

0000

00000010

1

B8BD45

mov ax, 48BD

48BD

0000

0000

0000

0100

489D

48AD

48BE

0003

00000010

2

8ED8

mov ds, ax

48BD

0000

0000

0000

0100

48BD

48AD

48BE

0005

00000010

3

B409

mov ah, 09

09BD

0000

0000

0000

0100

48BD

48AD

48BE

0007

00000010

4

BA0000

mov dx, 0000

09BD

0000

0000

0000

0100

48BD

48AD

48BE

000A

00000010

5

CD21

int 21

09BD

0000

0000

0000

0100

48BD

48AD

48BE

000C

00000010

6

B8004C

mov ax, 4C00

4C00

0000

0000

0000

0100

48BD

48AD

48BE

000F

00000010

7

CD21

int 21

0192

000B

F711

098D

0106

2110

0192

0000

0000

10100011

Пример 2

Текст программы

. model small  ;Модель памяти SMALL использует ;сегменты 
  ;размером не более 64Кб
.stack 100h  ;Сегмент стека размером 100h (256 ;байт)
.data  ;Начало сегмента данных
Hello db ‘Hello, World!$’
.code  ;Начало сегмента кода
start:  ;Точка входа в программу start 
 ;Предопределенная метка @data ;обозначает
  ;адрес сегмента данных в момент ;запуска программы,
mov AX, @data ;который сначала загрузим в AX,
mov DS, AX  ;а затем перенесем из AX в DS
mov AH,09h
mov DX, offset Hello
int 21h
mov AX,4C00h
int 21h
end start

Текст командного файла

cls

tasm. exe task2.asm

tlink. exe /x task2.obj

task2

Таблица трассировки

Шаг

Машинный код

Команда

Регистры

Флаги

AX

BX

CX

DX

SP

DS

SS

CS

IP

CZSOPAID

0000

0000

0000

0000

0100

489D

48B0

48AD

0000

00000010

1

B8AF48

mov ax, 48AF

48AF

0000

0000

0000

0100

489D

48B0

48AD

0003

00000010

2

8ED8

mov ds, ax

48AF

0000

0000

0000

0100

48AF

48B0

48AD

0005

00000010

3

B409

mov ah, 09

09AF

0000

0000

0000

0100

48AF

48B0

48AD

0007

00000010

4

BA0000

mov dx, 0000

09AF

0000

0000

0000

0100

48AF

48B0

48AD

000A

00000010

5

CD21

int 21

09AF

0000

0000

0000

0100

48AF

48B0

48AD

000C

00000010

6

B8004C

mov ax, 4C00

4C00

0000

0000

0000

0100

48AF

48B0

48AD

000F

00000010

7

CD21

int 21

0192

000B

F711

098D

0106

2110

0192

0000

0000

10100011

Пример 3

Текст программы

. model tiny ;Модель памяти TINY, в которой код, ;данные и стек
 ;размещаются в одном и том же сегменте ;размером до 64Кб
.code  ;Начало сегмента кода
org 100h  ;Устанавливает значение программного ;счетчика в 100h
  ;Начало необходимое для COM-программы,
 ;которая загружается в память с адреса ;PSP:100h

start:
mov AH,09h
mov DX, offset Hello
int 21h
mov AX,4C00h
int 21h
;===== Data =====
Hello db ‘Hello, World!$’
end start

Текст командного файла

cls

tasm. exe task3.asm

tlink. exe /x /t task3.obj

task3

Таблица трассировки

Шаг

Машинный код

Команда

Регистры

Флаги

AX

BX

CX

DX

SP

DS

SS

CS

IP

CZSOPAID

0000

0000

0000

0000

FFFE

489D

489D

489D

0100

00000010

1

B409

mov ah, 09

0900

0000

0000

0000

FFFE

489D

489D

489D

0102

00000010

2

BA0C01

mov dx, 010C

0900

0000

0000

010C

FFFE

489D

489D

489D

0105

00000010

3

CD21

int 21

0900

0000

0000

010C

FFFE

489D

489D

489D

0107

00000010

4

B8004C

mov ax, 4C00

4C00

0000

0000

010C

FFFE

489D

489D

489D

010A

00000010

5

CD21

int 21

0192

000B

F711

098D

0106

2110

0192

0000

0000

10100011

Контрольные вопросы

1.   Запустите под управлением отладчика программу из примера 1. Как располагаются сегменты программы в памяти? Сопоставьте полученные данные с соответствующими размерами сегментов из листинга трансляции.

Ответ: CS – сегмент команд, DS – сегмент данных, SS – сегмент стека. CS = 48BEh, DS = 489Dh, SS = 48ADh

2.  Что такое сегментный (базовый) адрес?

Ответ: Адрес ячейки памяти. Находится по формуле: база сегмента + смещение.

3.  Почему перед началом выполнения программы из примера 1 содержимое регистра DS в точности на 10h меньше содержимого регистра SS?

Ответ: Адрес начала сегмента всегда кратен 16-ти (каждый сегмент должен начинаться на границе параграфа).

4.  Почему в программе из примера 1 первая команда mov AX, data, начинающаяся с байта 0000 сегмента команд, занимает 3 байта? Какая еще команда занимает 3 байта?

Ответ: Так как здесь используется прямая адресация. Ещё 3 байта занимает команда mov dx, 0000.

5.   Чему равен сегментный адрес сегмента команд программы из примера 2? Почему?

Ответ: 48ADh, так как используется модель памяти small.

6.  Сравните содержимое регистра SP в программах из примера 2 и примера 3. Объясните, как получены эти значения.

Ответ: Во 2-м примере SP = 0100h, так как используется модель памяти small и стек располагается в первых 256 байтах сегмента памяти, а в 3-м – FFFEh, так как используется модель памяти tiny и сегменты кода, данных и стека находятся в одном сегменте размером 64 Кб.

7.  Какие операторы называют директивами ассемблера? Приведите примеры директив.

Ответ: Директивы – это параметры, указывающие программе ассемблеру, каким образом следует объединять инструкции для создания модуля, который станет работающей программой. Примеры: ASSUME, SEGMENT.

8.  Зачем в последнем предложении end указывают метку, помечающую первую команду программы?

Ответ: Для того, чтобы программа ассемблер поняла какая из подпрограмм закончена.

9.  Как числа размером в слово хранятся в памяти и как они заносятся в 2-ух байтовые регистры?

Ответ: Они хранятся в памяти как шестнадцатеричное число и записываются справа налево. При занесении их в 2-х байтовые регистры байты меняются местами.

10.Как инициализируются в программе выводимые на экран текстовые строки?

Ответ: Сначала строка заносится в память также как и обычное число, а затем строка выводится на экран.

11.Что нужно сделать, чтобы обратиться к DOS для вывода строки на экран? Как DOS определит, где строка закончилась?

Ответ: Использовать оператор int 21h. В конец строки всегда добавляется символ $.

12.Программы, которые должны исполняться как. EXE и. COM, имеют существенные различия по:

o  размеру,

o  сегментной структуре,

o  механизму инициализации.

Охарактеризуйте каждый из перечисленных пунктов.

Ответ: COM программы занимают меньше места в памяти и быстрее загружаются. В COM программах префикс программного сегмента, код программы, инициализированные данные и стек располагаются в одном сегменте. При запуске такой программы в начале строится PSP, занимающий 256 байт, далее располагается содержимое программы. Указатель стека устанавливается на конец сегмента.

EXE программы содержат сегменты кода, данных и стека. EXE файл загружается, начиная с адреса PSP:0100h. В процессе загрузки считывается информация EXE-заголовка в начале файла, при помощи которого загрузчик настраивает ссылки на сегменты в загруженном модуле, так как программа загружается в произвольный сегмент. После настройки ссылок управление передается загрузочному модулю к адресу CS:IP, извлеченному из заголовка EXE.

x86 — Сборка: использование регистра сегментов данных (DS)

Задавать вопрос

спросил

Изменено 6 лет, 9 месяцев назад

Просмотрено 33 тысячи раз

Часть коллектива Intel

В настоящее время я изучаю ассемблер x86 для развлечения, я люблю программирование микроконтроллеров, поэтому я знаком с ассемблером.

В настоящее время я ищу ответ на этот вопрос повсюду, но не могу его найти… регистр DS, я знаю, что он должен указывать на глобальные данные в моей программе, но я не знаю не знаю, как это работает точно. Я использую NASM и в большинстве простых программ вижу следующее:

[орг 0x7C00]
[бит 16]
главный:
  топор, 0x0000
мов дс, топор 
mov al, [msg]
мов ах, 0x0E
мов бх, 0x0007
интервал 0x10
jmp $
сообщение БД 'X'
раз 510-($-$$) дб 0
дв 0xAA55
 

и это прекрасно работает (даже если я опускаю код, выделенный жирным шрифтом), но как? Загружает ли ЦП автоматически глобальные переменные, начиная с 0x0000? или здесь есть что-то внутреннее, что мне не хватает?

  • сборка
  • x86
  • процессор-регистры
  • сегмент

1

Когда компьютер находится в реальном режиме (режим, в котором ЦП находится, когда BIOS запускает загрузчик), метод, который ЦП использует для вычисления адреса, очень прост: умножьте значение сегментного регистра на 16 (сдвиньте биты на 4 позиции влево) , затем добавьте смещение.

Например, в такой инструкции, как «mov ax, [0x1234]», ЦП будет использовать «DS * 0x10 + 0x1234» в качестве эффективного адреса (в вашем случае первый член разрешается равным нулю). ax, [BP+0x32]», то ЦП будет использовать «SS * 0x10 + BP + 0x32». Обратите внимание, что теперь ЦП использует другой регистр сегмента (сегмент стека), потому что, когда используется регистр BP, ЦП предполагает, что вы не хотите обращаться к стеку по умолчанию (но вы можете переопределить это, используя [DS :BP + 0x32]).

Более или менее то, что я объяснил, и многое другое можно найти на http://wiki.osdev.org/Real_Mode и http://www.internals.com/articles/protmode/realmode.htm и во многих других местах. .

Кстати, «msg» должен располагаться примерно по адресу 0x7C11.

1

Зарегистрируйтесь или войдите

Зарегистрироваться через Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Как получить премиальную учетную запись для входа в DS онлайн

Premium  DS Logon  – это безопасные идентификационные данные, которые ветераны и военнослужащие могут использовать для входа на сайты VA. gov,  My HealtheVet и другие веб-сайты с одним именем пользователя и паролем. Читайте ниже, чтобы узнать, как зарегистрироваться в Интернете для получения учетной записи Premium DS Logon .

  • Проверьте свою регистрацию в DEERS в DS Logon

Пошаговая инструкция

  1.  Убедитесь, что вы зарегистрированы в Системе отчетности о правах на участие в программе защиты (DEERS)

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

    • Если вы являетесь ветераном или военнослужащим или квалифицированным опекуном семьи, оставшимся в живых или иждивенцем ветерана или военнослужащего, служившего после 19 лет82, вы уже должны быть зарегистрированы в DEERS.
    • Если вы являетесь ветераном или квалифицированным опекуном, оставшимся в живых или иждивенцем ветерана, служившего до 1982 года, , вы не можете быть зачислены. Чтобы зарегистрироваться, позвоните нам по телефону 800-827-1000 и выберите «Вариант 7». Сообщите оператору, что хотите зарегистрироваться в DEERS, и попросите его отправить вам электронное письмо с подтверждением завершения регистрации.
  2. Зарегистрируйте свою базовую учетную запись DS Logon в Интернете

    Перейдите на веб-сайт самообслуживания DS Logon и нажмите кнопку Дополнительные параметры входа DS  . Из появившихся вариантов выберите  Требуется вход в службу DS?

    Вам будет предложено выбрать способ регистрации:

    • Если у вас есть общая карта доступа (CAC) с доступным устройством чтения карт, выберите этот вариант. Это самый простой способ получить DS Logon 9.0072  и немедленно перейдите на премиум-аккаунт.
    • Если у вас есть учетная запись myPay в Defense Finance and Account Service (DFAS), , вы можете выбрать этот вариант. Вы сможете сразу перейти на премиум-аккаунт.
    • Если у вас нет учетной записи CAC или DFAS myPay,  выберите  Ни одно из вышеперечисленных условий не применяется  вариант.

    Примечание:  Вы также можете перейти на учетную запись Premium DS Logon лично или по телефону, если не хотите регистрироваться онлайн.
    Узнайте, как получить Premium DS Logon лично или по телефону

  3. Обновление до Премиум-аккаунта

    Инструмент регистрации проведет вас через процесс регистрации вашей учетной записи и предложит вам перейти на учетную запись Premium через онлайн-процесс. В ходе этого процесса вам будет задан ряд вопросов, чтобы доказать, что вы — это вы, а не кто-то, кто притворяется вами, — чтобы помочь защитить личную информацию, к которой у вас будет доступ с помощью учетной записи Premium.
    Перейти на веб-сайт самообслуживания DS Logon

  • Проверьте свою регистрацию в DEERS в DS Logon
  • Часто задаваемые вопросы о входе в службу DS

  • Вход в систему VA.gov

  • Подтверждение вашей личности на VA.

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

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