Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

1.2. Организация памяти с точки зрения МП 8086




Память для МП 8086 представляется в виде линейной последовательности байт. МП 8086 может адресовать 1 Мб памяти. Адреса начинаются с 0 – если требуется обратиться к 10-му по счету байту его адрес будет равен 9. Процессор может адресовать не только байты, но и слова (два байта). Так как адресация 1 Мб памяти требуется, чтобы адрес был 20-разрядным числом (1 Мб = 1048576 байта = 220), а все регистры МП 8086 являются 16-разрядными, применяется так называемая сегментная адресация памяти. Идея этого метода адресации графически представлена на рис. 2.

 

 
   
Сегмент 1
  Смещение 1
 
   
Сегмент 2
  Смещение 2
 
   
  .
  .
  .
 

 

Рис. 2. Сегментная адресация памяти

 

Все адресное пространство 1 Мб разбивается на сегменты – участки памяти объемом 64 Кб. Начало каждого следующего сегмента смещено относительно начала предыдущего на 16 байт – таким образом, все адресное пространство разбивается на 65536 перекрывающихся сегментов объемом 64 Кб каждый. При обращении к какому-либо байту или слову указывается номер сегмента (от 0 до 65535), в котором находится этот байт, и смещение – номер байта (от 0 до 65535) относительно начала указанного сегмента. Операцию обращения к ячейке памяти можно записать в виде формулы: адрес_памяти = сегмент * 16 + смещение. По адресу, вычисленному в этой формуле, и происходит обращение процессора к памяти. Система команд МП 8086 определяет, что номер сегмента хранится в сегментном регистре (CS, DS, SS или ES), а смещение – в регистрах BX, BP, SI или DI, которые называются регистрами-модификаторами. Смещение может указываться в команде и явно. Таким образом, адрес в модели сегментной адресации памяти представляется в виде пары значений сегмент: смещение. Следует отметить, что адресу одной и той же ячейки памяти могут соответствовать несколько пар сегмент: смещение. При обращении к данным используются сегментные регистры DS, SS или ES, причем регистр SS используется для обращения к данным, хранящимся в стеке. Для обращения к командам (это делает сам процессор) используется сегментный регистр CS и регистр IP.

Пример 1: вычислить значение адреса, по которому процессор обращается к памяти, если имеется пара сегмент: смещение 0015h: 0319h (адреса обычно указываются в 16-ричной системе счисления, что в языке ассемблера обозначается буквой h).

Решение: адрес_памяти = 0015h * 10h + 0319h = 0150h + 0319h = 0469h.

Пример 2: выписать все пары сегмент: смещение, которые соответствуют адресу 0023h.

Решение: данному адресу соответствует три пары сегмент: смещение:

0000h: 0023h: 0023h = 0000h * 10h + 0023h;

0001h: 0013h: 0023h = 0001h * 10h + 0013h;

0002h: 0003h: 0023h = 0002h * 10h + 0003h.

 

 

 

1. 3. Методы адресации памяти

 

Методы адресации памяти применительно к МП 8086 определяют правила, по которым вычисляется смещение в командах, использующих обращение к ячейкам памяти. Эти правила, в свою очередь, определяют, какие регистры используются для вычисления смещения и какие сегментные регистры используются по умолчанию в том или ином методе адресации. Все методы адресации памяти можно разбить на две группы:

1. Прямая адресация;

2. Косвенная адресация.

При использовании прямой адресации смещение в команде задается явным образом. При этом по умолчанию используется сегментный регистр DS. Это означает, что если в команде происходит обращение к памяти, явным образом указано смещение и не указан используемый сегментный регистр, то номер сегмента берется из сегментного регистра DS.

Косвенная адресация может быть следующих типов:

1. Базовая;

2. Индексная;

3. Базово-индексная.

При использовании базовой адресации смещение находится в регистре BX или BP – в зависимости от того, какой конкретно регистр указывается в команде. При использовании регистра BX номер сегмента по умолчанию находится в сегментном регистре DS. При использовании регистра BP номер сегмента по умолчанию находится в сегментном регистре SS.

При использовании индексной адресации смещение находится в регистре SI или DI. При этом по умолчанию также используется сегментный регистр DS.

Базово-индексная адресация является комбинацией базовой и индексной адресации. Это означает, что смещение вычисляется как сумма значений указанных регистров из базовой и индексной адресации. Например, смещение может вычисляться как сумма значений регистров BP и SI или BX и DI. В табл. 1 перечислены все возможные комбинации регистров, используемых в базово-индексной адресации и те сегментные регистры, которые используются по умолчанию в том или ином случае.

Таблица 1

Базово-индексная адресация

Регистр базовой адресации Регистр индексной адресации Вычисление смещения Используемый по умолчанию сегментный регистр
BX SI BX + SI DS
BX DI BX + DI DS
BP SI BP + SI SS
BP DI BP + DI SS

Особенностью всех методов косвенной адресации является то, что смещение может вычисляться как сумма значений указанных регистров и непосредственно заданного значения. Например, «базовая адресация со смещением» означает, что смещение вычисляется как сумма значений регистра BX или BP и непосредственного значения, скажем BX + 10 или BP + 12. Более того, непосредственно задаваемое значение может быть и отрицательным, например SI – 2 или BX + DI – 6. Косвенная адресация обозначается в программе на языке ассемблера квадратными скобками, например, [BX + SI].

В табл. 2 представлены все методы косвенной адресации памяти, используемые МП 8086 и их характеристики.

Комбинации регистров и непосредственных значений, не указанные в табл. 2, использовать нельзя – МП 8086 не поддерживает такие способы адресации. Например, нельзя использовать способ адресации, в котором смещение вычисляется как сумма значений регистров BX и BP.

Следует отметить, что существует еще так называемая непосредственная адресация. Однако такая адресация определяет не смещение ячейки памяти, а непосредственное числовое значение, указываемое в команде.

 

Таблица 2

Методы косвенной адресации памяти

Базовая адресация Индексная адресация Базово-индексная адресация Используемый по умолчанию сегментный регистр
[BX] [SI] [BX + SI] DS
  [DI] [BX + DI] DS
[BX + значение] [SI + значение] [BX + SI + значение] DS
  [DI + значение] [BX + DI + значение] DS
[BP]   [BP + SI] SS
    [BP + DI] SS
[BP + значение]   [BP + SI + значение] SS
    [BP + DI + значение] SS

   

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...