1.2. Организация памяти с точки зрения МП 8086
Память для МП 8086 представляется в виде линейной последовательности байт. МП 8086 может адресовать 1 Мб памяти. Адреса начинаются с 0 – если требуется обратиться к 10-му по счету байту его адрес будет равен 9. Процессор может адресовать не только байты, но и слова (два байта). Так как адресация 1 Мб памяти требуется, чтобы адрес был 20-разрядным числом (1 Мб = 1048576 байта = 220), а все регистры МП 8086 являются 16-разрядными, применяется так называемая сегментная адресация памяти. Идея этого метода адресации графически представлена на рис. 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 или BP и непосредственного значения, скажем BX + 10 или BP + 12. Более того, непосредственно задаваемое значение может быть и отрицательным, например SI – 2 или BX + DI – 6. Косвенная адресация обозначается в программе на языке ассемблера квадратными скобками, например, [BX + SI]. В табл. 2 представлены все методы косвенной адресации памяти, используемые МП 8086 и их характеристики. Комбинации регистров и непосредственных значений, не указанные в табл. 2, использовать нельзя – МП 8086 не поддерживает такие способы адресации. Например, нельзя использовать способ адресации, в котором смещение вычисляется как сумма значений регистров BX и BP. Следует отметить, что существует еще так называемая непосредственная адресация. Однако такая адресация определяет не смещение ячейки памяти, а непосредственное числовое значение, указываемое в команде.
Таблица 2 Методы косвенной адресации памяти
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|