Общие вопросы адресации в микропроцессорах

 адресации в микропроцессорах Начальные сведения.

Работу процессора можно представить как непрерыв­ную последовательность исполняемых им команд. Для выполнения каждой ко­манды процессор должен знать:

? какие данные потребуются (и потребуются ли) для исполнения команды, где находятся нужные данные и как их вызвать;

? где искать следующую команду.

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

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

CALL

,

JMP

,

RET

и др.), предназначенный специально для управления про­граммой.

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

RSEG

(

Register

Segment

), память данных

DSEG

(

Date

Segment

) или порты ввода–вывода

IOSEG

(

Input

/

Out

Segment

).

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

Executive

Address

— ЕА), а способ формирования исполнительного адреса — способом адресации. Извест­ны различные способы адресации, позволяющие:

? обеспечить не только эффективный доступ к структурированным данным (массивам, стекам, спискам, таблицам), но и перемещение программ при загрузке и выполнении;

? сократить длину программного кода и число обращений к магистрали;

? адресовать большой объем памяти при малой разрядности процессора.

Для формирования исполнительного адреса используются сведения, заложен­ные в команде. Сведения об адресе операнда могут быть представлены в двух формах: явной и неявной.

При явной форме сведения содержатся в адресном поле команды. Эта фор­ма является более гибкой и эффективной, так как позволяет связывать с одной командой множество адресов. Однако ее использование приводит к увеличению длины кода команды.

При неявной форме сведений об адресе операнда исполнительный адрес заложен в именной части команды, т. е. место расположения одного или всех операндов определяется мнемоникой команды или кодом операции (

OPeration

Code

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

На практике применяются обе формы представления адресной информации. Например, в команде

LDA addr

процессора

Z80,

выполняющей операцию загрузки аккумулятора содержимым ячейки памяти по указанному адресу, адрес операн­да–источника

(addr)

задан в явной форме, а адрес приемника (аккумулятора) — в неявной.

Размещение данных в памяти.

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

Расположение сегмента в памяти определяется:

? базовым адресом (базой), задающим начало сегмента;

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

Когда операнд занимает несколько смежных байт, его адресом считается смещение байте с наименьшим адресом. Слова (16–битные операн­ды) в линейной памяти занимают два любых со­седних байта, причем:

? адрес слова может быть как четным, так и не­четным;

? в байте с младшим адресом хранится младшая часть слова;

? младший адрес является адресом всего слова.

Двойные слова (32–битные операнды) разме­щаются как два соседних слова. Младшее слово располагается по младшему адресу, его адрес служит адресом двойного слова (рис. 2.5.1). рис. 2.5.1

Задание адреса операнда.

Программист оперирует не физическими, а ло­гическими адресами, состоящими из 16–разрядного селектора сегмента (

sot

) и 16–разрядного смещения внутри сегмента (

offset

). Логический адрес записыва­ется в виде

sel

:

offset

, например,

08AFh:0023h, C033h:940Bh, 0000h:0000h.

Селек­тор

можно рассматривать как указатель сегмента, обладающий возможностью вызова 216 логических сегментов. Для хранения селектора используются сегмент­ные регистры.

Смещение,

определяющее позицию адресуемого байта в сегменте, позволяет адресовать все 64К байт сегмента. Смещение может быть задано в команде или быть содержимым указательных (в том числе программного счетчика) и индекс­ных регистров. Полный объем логического пространства адресов (32 разряда) составляет 4 Г байт (1Г = 230).

Линейный адрес требуемого элемента памяти формируется из логического как сумма базы сегмента и смещения объекта в нем:

addr

20 =

base

20 +

offset

= 16 .

set

+

offset

Один и тот же линейный адрес можно представить множеством логических адресов.

Для организации доступа к основной памяти используются специальные ре­гистры, позволяющие выделить в памяти объемом 1М байт четыре сегмента до 64К байт каждый: кодовый сегмент

CS

, стековый сегмент

SS

, основной

DS

и до­полнительный

ES

сегменты данных. Сегменты выровнены по границе 16 байт и могут перекрываться друг с другом.

Функциональная специализация сегментов. Позволяет использовать неявный способ задания селектора адреса операнда, при котором указывается мнемоника регистра и задается смещение, например,

ES

:383

D

,

CS

:05

F

,

DS

:2375 и

SS

:65

D

. При таком способе определения адреса операнда уменьшается разрядность ко­манды, так как селектор задан не 16 битами, всего лишь двумя битами (кодом со­ответствующего сегментного регистра).

Сегментирование памяти позволяет:

? создавать позиционно независимые и динамически перемещаемые программные модули;

? осуществлять все смешения и переходы в программе относительно неизвест­ных, но строго фиксированных значений, задаваемых селекторами сегмент­ных регистров.

Средства адресации.

Ниже приведены (стандартные) средства обеспечения

доступа к адресуемому байту:

? для указания кодового сегмента, в котором хранится объектный код, служит регистр

CS

. При выборке объектного кода содержимое

CS

используется для определения начала сегмента

(sel

=

CS),

смещением в сегменте служит зна­чение (содержимое) программного счетчика

(offset =

PC

или

IP

);

? для извлечения стекового сегмента, предназначенного для сохранения со­стояния процессора при выполнении подпрограмм, используется регистр

SS

(sel

=

SS).

Смещение задается указателем стека

SP

(

offset

=

SP

);

? для доступа к сегменту

DS,

в котором обычно располагаются данные, ис­пользуется регистр

DS (sel

=

DS).

Смещение в сегменте определяется одним из рассмотренных ниже способов формирования исполнительного адреса

(offset

= ЕА).

Отметим некоторые особенности использования средств:

? при передаче параметров через текущий кадр системного стека указателем сегмента служит

SS,

а в качестве указателя кадра

(FP)

используется адресный регистр

BP

;

? при обработке строк задействованы два регистра

DS

и

ES:

• при обращении к исходной строке регистр данных

DS

служит указателем сегмента

DS

исходной строки» смещение в сегменте извлекается из индексного регистра–источника

SI;

• при размещении результирующей строки в дополнительном сегменте дан­ных

(ES)

регистр

ES

служит указателем. Смещение строки–результата оп­ределяется по содержимому индексного регистра–назначения

DI

.

Одновременное применение двух регистров позволяет реализовать эффек­тивную передачу данных между сегментами.табл 2.5.1

В табл. 2.5.1 приведены используемые по умолчанию средства выбора сегментных регистров. В ряде случаев возможна замена сегментного регистра данных и стека, которая реализуется явным указанием сегментного регистра с помощью специального байта–префикса, предшествующего команде.

Выборка команды, обращение к стеку и размещение результирующей строки всегда выполняется с помощью регистров

CS,

SS

и

ES

соответственно.

В универсальных процессорах достигается компромисс в выборе средств ад­ресации:

? наиболее часто требуемые и используемые способы адресации реализуются аппаратными средствами. Обычно для реализации базового способа адреса­ции требуется один такт синхронизации;

? способы адресации, которые требуются редко или являются сложными, моде­лируются несколькими командами.

Понравилась статья? Поделиться с друзьями:
Все об энергетике, электротехнике и электронике
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: