Курс лекций по программированию на языке ассемблера. Макурина Т.А. - 7 стр.

UptoLike

Составители: 

7
Смещение
+
Сегменты
Сегментный *4
Адрес
регистр
Память
В реальном режиме механизм адресации физической памяти имеет следующие характеристики:
диапазон изменения физического адреса от 0 до 1Мбайт. Эта величина определяется тем,
что шина адреса i8086 имела 20 линий.
максимальный размер сегмента 64 Кбайта. Это объясняется 16-разрядной архитектурой
I8086. Нетрудно подсчитать, что максимальное значение, которое могут содержать 16-
разрядные регистры, составляют 2
16
-1, что применительно к памяти и определяет величину
64 Кбайт.
для обращения к конкретному физическому адресу оперативной памяти необходимо
определить адрес начала сегмента (сегментную составляющую) и смещение внутри
сегмента. В сегментном регистре находятся только старшие 16 бит физического адреса
начала сегмента. недостающие 4 бита 20-битового адреса получаются путем сдвига
значения в сегментном регистре влево на 4 разряда. Получение 20-битового адреса
выполняется аппаратно и для программного обеспечения абсолютно прозрачна.
Полученный адрес соответствует адресу начала сегмента. Вторая составляющая адреса
смещение, которое представляет собой 16-битовое значение. Это значение может
присутствовать в команде в явном или косвенном виде. В результате получается
следующим образом физический адрес
физический адрес= смещение+2
4
*(регистр сегмента)
таким образом мы получаем доступ к 1Мбайту памяти. Получение адреса путем сложения
происходит на аппаратном уровне и опять же прозрачно для программного обеспечения.
Получение смещения зависит от способа адресации, используемой в команде.
Недостатками такой организации памяти являются:
1. сегменты бесконтрольно размещаются с любого адреса, кратного 16 (т.к.
содержимое сегментного регистра аппаратно смещается на 4 разряда). В результате
чего, программа может обращаться по любым адресам, в том числе и реально не
существующим.
2. сегменты имеют максимальный размер 64 Кбайт
3. сегменты могут перекрываться с другими сегментами.
Для устранения этих недостатков и было введено сегментирование памяти в защищенном
режиме.
Мы рассмотрели понятие сегментация и теперь определим сегментные регистры, которые
используются для доступа к соответствующему сегменту шесть основных сегментных
регистров: cs, ss, ds, es, gs, fs.
1. Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит
регистр cs (code segment register) – сегментный регистр кода. Он содержит адрес
сегмента с машинными командами, к которому имеет доступ МП.
2. Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к
этому сегменту служит регистр ds (date segment register
). сегментный регистр
данных, который хранит адрес сегмента данных текущей программы.
3. Сегмент стека. Этот сегмент представляет собой область памяти, называемую
стеком. Для доступа к этому сегменту служит регистр ss (stack segment register).
                 Смещение               +
                                                                             Сегменты
Сегментный                         *4
                 Адрес

регистр




                                                        …
                                                        …
                                                       Память
В реальном режиме механизм адресации физической памяти имеет следующие характеристики:
   • диапазон изменения физического адреса от 0 до 1Мбайт. Эта величина определяется тем,
      что шина адреса i8086 имела 20 линий.
   • максимальный размер сегмента 64 Кбайта. Это объясняется 16-разрядной архитектурой
      I8086. Нетрудно подсчитать, что максимальное значение, которое могут содержать 16-
      разрядные регистры, составляют 216-1, что применительно к памяти и определяет величину
      64 Кбайт.
   • для обращения к конкретному физическому адресу оперативной памяти необходимо
      определить адрес начала сегмента (сегментную составляющую) и смещение внутри
      сегмента. В сегментном регистре находятся только старшие 16 бит физического адреса
      начала сегмента. недостающие 4 бита 20-битового адреса получаются путем сдвига
      значения в сегментном регистре влево на 4 разряда. Получение 20-битового адреса
      выполняется аппаратно и для программного обеспечения абсолютно прозрачна.
      Полученный адрес соответствует адресу начала сегмента. Вторая составляющая адреса –
      смещение, которое представляет собой 16-битовое значение. Это значение может
      присутствовать в команде в явном или косвенном виде. В результате получается
      следующим образом физический адрес
      физический адрес= смещение+24*(регистр сегмента)
      таким образом мы получаем доступ к 1Мбайту памяти. Получение адреса путем сложения
происходит на аппаратном уровне и опять же прозрачно для программного обеспечения.
      Получение смещения зависит от способа адресации, используемой в команде.
      Недостатками такой организации памяти являются:
             1.      сегменты бесконтрольно размещаются с любого адреса, кратного 16 (т.к.
             содержимое сегментного регистра аппаратно смещается на 4 разряда). В результате
             чего, программа может обращаться по любым адресам, в том числе и реально не
             существующим.
             2.      сегменты имеют максимальный размер 64 Кбайт
             3.      сегменты могут перекрываться с другими сегментами.
      Для устранения этих недостатков и было введено сегментирование памяти в защищенном
      режиме.
      Мы рассмотрели понятие сегментация и теперь определим сегментные регистры, которые
      используются для доступа к соответствующему сегменту шесть основных сегментных
      регистров: cs, ss, ds, es, gs, fs.
         1. Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит
             регистр cs (code segment register) – сегментный регистр кода. Он содержит адрес
             сегмента с машинными командами, к которому имеет доступ МП.
         2. Сегмент данных. Содержит обрабатываемые программой данные. Для доступа к
             этому сегменту служит регистр ds (date segment register). – сегментный регистр
             данных, который хранит адрес сегмента данных текущей программы.
         3. Сегмент стека. Этот сегмент представляет собой область памяти, называемую
             стеком. Для доступа к этому сегменту служит регистр ss (stack segment register).

                                              7