Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МАВЦ.464319.001ТУ 20140414 Семенов.doc
Скачиваний:
9
Добавлен:
01.07.2025
Размер:
2.98 Mб
Скачать

3.2 Адресация регистров и ячеек памяти в пк

Адресация операндов в командах программы может быть:

  • непосредственной;

  • прямой;

  • косвенной;

  • ассоциативной;

  • неявной.

Непосредственная адресация заключается в указании в команде самого значения операнда, а не его адреса.

Прямая адресация состоит в указании в команде непосредственно абсолютного или исполнительного адреса операнда.

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

Ассоциативная адресация — указание в команде не адреса, а идентифицирующего содержательного признака операнда, подлежащего выборке (используется в ассо­циативных запоминающих устройствах).

Неявная адресация — адреса операнда в команде не указанно, но он подразумева­ется кодом операции.

Адресация ячеек основной памяти ПК имеет две важные разновидности: относи­тельную и стековую.

3.3 Относительная адресация

Абсолютный (Аинд) адрес формируется как сумма адресов исполнительного (Аисп) и сегментного (Асегм):

Аабс = Асегм + Аисп

где Асегм — 20-битовый начальный адрес сегмента, который является увеличенным в 16 раз (сдвинутым на четыре бита влево) 16-битовым адресом сегмента А’сегм хранящемся в одном из 16-битных сегментных регистров. Начальный адрес сег­мента в таком варианте всегда кратен 16, и он может быть полностью идентифици­рован значением А’сегм (сегмент всегда состоит из целого числа параграфов, а пара­граф равен 16 битам), то есть:

Асегм = 16*А’сегм = А’сегм 0000.

16-битовый исполнительный адрес может в ПК представлять собой сумму трех адресов:

Аисп = Асмещ + Абазы + Аинд.

где Асмещ — 16-битовый адрес смещения относительно начала сегмента (или отно­сительно базы, если есть Абазы);

Абазы — 16-битовый адрес смещения базы адреса операнда относительно начала сег­мента;

Аинд — адрес индекса (или просто индекс) — дополнительная составляющая адре­са операнда,

использующаяся часто при программировании циклических процес­сов с массивами и таблицами. Индекс должен быть непосредственно задан в соот­ветствующем регистре МПП.

При адресации данных могут использоваться все составляющие адреса:

Аабс = Асегм + Аисп = Асегм + Асмещ[+Абазы][+Aинд],

где Асегм = 16 * А’сегм , А’сегм берется из регистра DS по умолчанию или из регистра DS, если это указано в программе. Абазы и Аинд берутся соответственно из регистров ВХ и индексных (SI или DI), а Асмещ в явном или неявном виде указываются в программе.

При адресации команд программы могут использоваться только две составляющие адреса:

Аабс = Асегм + Аисп = Асегм + Асмещ = А’сегм * Асмещ.

А’сегм берется из регистра CS, а Асмещ — из регистра IP.

II.Стековая адресация

В стековой памяти (стеке) доступ к ячейкам памяти не произвольный, а по прин­ципу «последний записанный операнд первым считывается» (FILO).

Аабс = Асегм + [Абазы] + Асмещ.

16-битный адрес сегмента А'сегм берется из регистра SS, смещения относительно начала сегмента стека автоматически считываются из регистров ВР (смещение базы стека — Абазы) и SP (смещение активной ячейки стека, в которую записывается или из которой считывается информация, — «вершины стека» относительно базы – Асмещ).

В защищенном (многопрограммном) режиме работы микропроцессора начальные адреса сегментов хранятся в дескрипторных таблицах и имеют длину 24 или 32 бит (в зависимости от типа МП). В сегментных регистрах в этом режиме хранятся се­лекторы, содержащие адресные ссылки на соответствующие дескрипторные таб­лицы.