"П.Нортон "Программно-аппаратная организация компьютера IBM PC"" - читать интересную книгу автора


25553


(В конце этого раздела мы приведем несколько примеров работы с
сегментированными адресами на Бейсике и Паскале).
Для работы с сегментированными адресами микропроцессор 8088 имеет
специальные регистры сегментов, предназначенные для хранения сегментной
части адресов. Загрузив в регистр сегмента некоторое значение, можно
адресовать следующие за ним 64К ячеек памяти. Без изменения значения в
регистре сегмента компьютер может работать только с 64К байтами из общего
адресного пространства в 1.024К. Путем изменения значения в регистре
сегмента можно адресовать любую ячейку памяти.
Чтобы иметь возможность в каждый момент времени работать более чем с
64К памяти, в микропроцессоре 8088 предусмотрены четыре различных регистра
сегмента, каждый из которых имеет особое назначение. Память компьютера
используется для различных целей - часть ее занимает программа, другая
часть используется для хранения данных, с которыми в данный момент
работает программа. Поэтому два регистра сегмента выделены для программы и
для данных. Для указания базового адреса программного или кодового
сегмента используется регистр CS. Для указания сегмента данных
используется регистр DS. Еще одна область памяти, используемая для
специальных целей, называется стеком и ее адрес указывается регистром
стека SS. И, наконец, для обеспечения дополнительных возможностей
адресации имеется регистр дополнительного сегмента (или сегмента
расширения), ES.
Когда программа подготавливается к выполнению, операционная система,
такая как DOC, выбирает ячейки каких разделов будут использоваться для
размещения кодовой части программ, данных и стека. В регистры сегментов
CS,DS и SS заносятся адреса этих ячеек. При выполнении программы адреса в
этих регистрах позволяют находить нужные ячейки памяти.
Следует понять, что эти регистры совсем не обязательно должны
указывать на сегменты памяти, расположенные далеко друг от друга. Они
могут указывать на любые ячейки, находящиеся далеко или близко друг от
друга и даже располагающиеся в одном разделе. Если необходимо всего пару
тысяч байт для размещения программы и данных, кодовый сегмент и сегмент
данных могут располагаться рядом. И хотя фрагменты кодового сегмента и
сегмента данных используются при выполнении программы по-разному,
64К-байтные области, адресуемые соответствующими регистрами сегментов,
могут отсекаться. На рис.3.2 показано как эти три сегмента -
кодовый,данных и стека - могут использоваться и как области этих сегментов
могут пересечься.


***


Рис.3.2. Сегменты кода, данных и стека:
1-регистр сегмента; 2-указывает 64К памяти; 2-нам требуется; 3-16К кодовой
части; 4-32К данных; 5-8К стека; 6-мы выделяем для них место в памяти и