Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Сегменты



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

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

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

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

Еще один сегментный регистр - регистр дополнительного сегмента (ES) - предназначен для специального использования.

Внутри программы все адреса памяти относительны к началу сегмента. Такие адреса называются смещением от начала сегмента. Двухбайтовое смещение (16 бит) может быть в пределах от 000016 до FFFF16 или от 0 до 65535. Для обращения к любому адресу в программе компьютер складывает адрес в регистре сегмента и смещение. Например, первый байт в сегменте кодов имеет смещение 0, второй байт - 1 и так далее до смещения 65535.

В качестве примера адресации допустим, что регистр сегмента данных содержит значение 045FН и некоторая команда обращается к ячейке памяти внутри сегмента данных со смещением 0032Н. Несмотря на то, что регистр сегмента данных содержит 045FH, он указывает на адрес 045F0, т.е. на границу параграфа. Действительный адрес памяти, поэтому будет следующий:

Адрес в DS: 045F0

Смещение: 0032

Реальный адрес: 04622

Каким образом процессоры 8086/8088 адресуют память в 1 млн. байт? В регистре содержится 16 бит. Так как адрес сегмента всегда на границе параграфа, младшие четыре бита адреса равны нулю.FFF0Н позволяет адресовать до 65520 (плюс смещение) байт. Но специалисты решили, что нет смысла иметь место для битов, которые всегда равны нулю. Поэтому адрес хранится в сегментном регистре как шестнадцатиричное nnnnН, а компьютер полагает, что имеются еще четыре нулевых младших бита (одна шестнадцатиричная цифра), т.е. nnnn0Н. Таким образом, FFFF0H позволяет адресовать до 1048560 байт. Если вы сомневаетесь, то декодируйте каждое шестнадцатиричное FНкак двоичное 1111, учтите нулевые биты и сложите весовые значения для единичных битов.

Процессор 80286 использует 24 бит для адресации так, что FFFFF0 позволяет адресовать до 16 млн. байт, а процессор 80386 может адресовать до 4 млрд. байт.





Дата публикования: 2014-12-11; Прочитано: 427 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.007 с)...