- •3.8Адресация оперативной памяти. Сегментные регистры.
- •3.9Система команд процессора i32. Способы адресации.
- •3.10Система команд процессора i32. Машинная команда. Байт способа адресации.
- •3.11Разветвляющий вычислительный процесс.
- •3.12Циклический вычислительный процесс.
- •3.13Рекурсивный вычислительный процесс.
3.8Адресация оперативной памяти. Сегментные регистры.
С точки зрения процессора, оперативная память представляет собой массив пронумерованных ячеек. Номер каждой ячейки памяти называется ее адресом. Разрядность адреса является одной из важнейших характеристик процессора и реализуемой им системы команд. Разрядность важна не как самоцель, а потому, что ею обусловлен объем адресуемой памяти — адресного пространства. Системы с 16-разрядным адресом способны адресовать 64 Кбайт (65 536) ячеек памяти, а с 32-разрядным — 4 Гбайт (4 294 967 296) ячеек. В наше время адресуемая память в 4 Гбайт для многих приложений считается неприемлемо маленькой и требуется 64-разрядная адресация.
Сегментные адресные регистры
CS Сегментный регистр кода DS Сегментный регистр данных SS Указатель сегмента стека
ES Дополнительный регистр сегмента Сегментные регистры содержат начальный адрес каждого из 4 сегментов. 16-разрядное значение в сегментном регистре для получения 20-разрядного адреса сегмента сдвигается влево на 4 (умножается на 16). Регистры сегментов (cs, ds, ss, es, fs и gs) хранят 16-ти битные дескрипторы сегментов. Дескрипторы сегментов - это специальные указатели, определяющие расположение сегмента в памяти. В защищенном режиме работы процессора все сегментные регисты указывают на один и тот же сегмент, поэтому обычно в программе они не используются.
Процессоры Intel аппаратно поддерживают сегментную организацию программы. Это означает, что любая программа состоит как минимум из трех сегментов: кода, данных и стека. Логически машинные команды в архитектуре IA-32 построены так, что при выборке каждой команды для доступа к данным программы или к стеку неявно используется информация из вполне определенных сегментных регистров. В зависимости от режима работы процессора по их содержимому определяются адреса памяти, с которых начинаются соответствующие сегменты. В программной модели IA-32 имеется шесть сегментных регистров CS, SS, DS, ES, GS, FS, служащих для доступа к четырем типам сегментов.
Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр сегмента кода (code segment register) CS. Он содержит значение, которое по-разному интерпретируется процессором, в зависимости от текущего режима работы. В реальном режиме — это адрес первого параграфа сегмента, в защищенном — индекс элемента в таблице дескрипторов (глобальной GDT или локальной LDT).
Сегмент данных. Хранит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр сегмента данных (data segment register) DS, в который помещен адрес сегмента данных текущей программы.
Сегмент стека. Представляет собой область памяти, называемую стеком. Работу со стеком процессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Доступ к области стека выполняется через регистр сегмента стека (stack segment register) SS, содержащий адрес сегмента стека.
Дополнительный сегмент данных. Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в регистре сегмента данных DS. Если программе недостаточно одного сегмента данных, то она имеет возможность одновременно задействовать еще три дополнительных сегмента данных, адреса которых должны содержаться в регистрах дополнительного сегмента данных (extension data segment registers) ES, GS, FS. Среди них следует особо выделить регистр ES. Он используется для обеспечения цепочечных команд процессора, адресуя собой операнд-источник.