Программная архитектура i80х86

Одним из наиболее распространенных процессоров общего назначения на данный момент являются процессоры с архитектурой x86 (Intel IA-32). Родоначальником семейства этих процессоров явился ЦП i8086. И по сей день современные x86-совместимые процессоры могут исполнять код, который мог выполняться на ЦП i8086. Обеспечивается это за счёт обратной совместимости на ровне программной модели.

Совокупность архитектурных решений, архитектуру команд и правила написания программ на низкоуровневом языке принято называть программной моделью процессора. Поскольку, написание в машинных командах представляется крайне трудоёмкой задачей, вместо машинного языка при написании программ используют язык ассемблера. Команды языка ассемблера один в один соответствуют командам процессора и, фактически, представляют собой удобную символьную форму записи (мнемокод) команд и их аргументов. Также язык ассемблера обеспечивает базовые программные абстракции: связывание частей программы и данныx через метки с символьными именами (при ассемблировании для каждой метки высчитывается адрес, после чего каждое вхождение метки заменяется на этот адрес) и директивы. Каждая модель процессора, в принципе, имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера. В дальнейшем условимся язык ассемблера также рассматривать как часть программной модели ЦП.

При выполнении любой программы в любой момент времени можно выделить несколько участков памяти (сегментов), с которыми происходит работа микропроцессора. Использование сегментов является отличительной особенностью микропроцессоров семейства I80х86 и преследовало несколько целей. Во-первых, использование сегментов является попыткой защитить или, по крайней мере, изолировать несвязные участки памяти в самой программе или между программами. Во-вторых, программа будет выполняться, если изменить только адрес начала сегмента (перенося его в памяти в другое место) и не менять относительное смещение в нем. Это позволяет, при необходимости, переносить программу в памяти даже в процессе ее выполнения. Возможности сегментации памяти существенно превышают возможный размер физической памяти, используемой в микропроцессоре. В некоторых ситуациях использовать сегментацию памяти нецелесообразно, поэтому в старших моделях микропроцессора (начиная с I80386) можно работать с сегментами памяти длиной до 4 Гбайт, т.е. вся доступная физическая память рассматривается как один сегмент. В реальном режиме работы микропроцессора любая программа, оперирует с четырьмя сегментами:

1. Сегмент кода.

2. Сегмент данных.

3. Сегмент стека.

4. Сегмент дополнительных данных.

Эти сегменты могут располагаться в памяти по отношению друг к другу как угодно, никаких ограничений на их расположение не вводятся. Например, все сегменты могут начинаться с одного и того же адреса, и таким образом они перекрываются друг с другом. Сегменты могут располагаться непосредственно друг за другом в памяти без перекрытия или же между ними могут быть пустые промежутки.