Статус нашего сайта: |
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Каждому из этих сегментов соответствует один из 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-й бит — только так можно было бы различить указатели на сегмент данных и на стековый сегмент. По большому счету, создание разработчиками микросхемы отдельного стекового сегмента вряд ли можно признать оправданным. |