Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.547


Таненбаум Э.- Архитектура компьютера. стр.547

Каждому из этих сегментов соответствует один из 16-разрядных сегментных регистров: СБ, ОБ, ББ или ЕБ. Начальным адресом сегмента является 20-разрядное целое число без знака, формируемое путем сдвига сегментного регистра на 4 би та влево и размещения в четырех освободившихся позициях справа четырех нулей. Следовательно, сегментные регистры в рамках 20-разрядного адресного пространства всегда выражаются числами, кратными 16. Сегментный регистр указывает на базу сегмента. Адреса сегментов формируются путем преобразования 16-разрядного значения в сегментном регистре в фактический 20-разрядный адрес — для этого в конец значения прибавляется четыре нулевых бита и выполняется смещение. В итоге абсолютный адрес в памяти устанавливается путем умножения значения в сегментном регистре на 16 и прибавления смещения. К примеру, если значение DS равняется 7, а ВХ — 12, значит, ВХ указывает на адрес 7x16+12 = 124. Иными словами, на основании значения 7 в регистре DS можно получить 20-разрядный двоичный адрес 00000000000001110000. Добавив к исходному значению сегмента 16-разрядное смещение 0000000000001100 (десятичное 12), получаем 20-разрядный адрес 00000000000001111100 (десятичное 124).

При каждом обращении к памяти один из сегментных регистров применяется для формирования фактического адреса в памяти. Если та или иная команда содержит непосредственный адрес без указания на регистр, считается, что этот адрес находится в сегменте данных, и для определения базы этого сегмента используется регистр DS. Физический адрес определяется путем сложения результата предыдущей операции с адресом, указанным в команде. Физический адрес в памяти кода следующей команды устанавливается путем смещения содержимого регистра CS на четыре двоичных разряда и сложения со значением счетчика команд. Иными словами, сначала на основе значения 16-разрядного регистра CS вычисляется фактический 20-разрядный адрес, а затем к нему прибавляется новое 16-разрядное значение PC; в результате получается 20-разрядный абсолютный адрес в памяти.

Стековый сегмент состоит из 2-байтовых слов, а это значит, что в указателе стека (SP) может храниться только четное число. Стек заполняется в порядке от больших адресов к меньшим. Таким образом, команда PUSH уменьшает значение указателя стека на 2, а затем сохраняет операнд по адресу в памяти, вычисленному на основании значений SS и SP. Команда POP извлекает полученное после выполнения операции PUSH значение и увеличивает значение SP на 2. Те адреса в стековом сегменте, которые расположены ниже предела, определяемого регистром SP, считаются свободными. Следовательно, очистка стека осуществляется за счет одного лишь приращения SP. На практике значения регистров DS и SS всегда совпадают, так что для обращения к переменной в общем сегменте данных и стека достаточно 16-разрядного указателя. Если бы значения регистров DS и SS различались, к каждому указателю потребовалось бы прибавлять 17-й бит — только так можно было бы различить указатели на сегмент данных и на стековый сегмент. По большому счету, создание разработчиками микросхемы отдельного стекового сегмента вряд ли можно признать оправданным.


⇐ Предыдущая страница| |Следующая страница ⇒

.