В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > 68300 > Архитектура
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Cпособы адресации и формат команд

Процессор выполняет обработку битов, байтов, 16-разрядных слов, 32-разрядных длинных слов и двоично-десятичных чисел (1 байт = 2 десятичных разряда). Обрабатываемые данные - операнды могут располагаться в регистрах (данных или адреса) или оперативной памяти. Для выборки слова (байты B1-0) или длинного слова (байты B3-0) команда задает адрес старшего байта N, четный или кратный четырем. При этом слова и длинные слова размещаются таким образом, что младшие байты (разряды D7-0 данных) располагаются в ячейках памяти с большими адресами: N+1 или N=3 (рис.3.3). Такое размещение байтов в памяти от старшего к младшему соответствует естественному порядку их написания слева - направо. Этот порядок адресации байтов называется в зарубежной литературе "big -endian". Он отличается от порядка "little-endian", принятого компанией INTEL и рядом других производителей, когда размещение слова начинается с младшего байта, адрес которого служит адресом слова.

N
N+1
Старший байт И1 (разряды D15-8)
Младший байт В0 (разряды D7-0)
a)
N
N+1
N+2
N+3
Старший байт В3 (разряды D31-24)
Байт В2 (разряды D23-16)
Байт В1 (разряды D15-8)
Младший байт В0 (разряды D7-0)
б)

Рис.3.3. Адресация байтов в слове (а) и длинном слове (б)

Процессор CPU32 реализует следующие способы адресации операндов:

  • регистровая (операнд в регистре данных или адреса),
  • косвенно-регистровая (операнд в ячейке памяти, адресуемой содержимым регистра адреса),
  • косвенно-регистровая с постинкрементом (операнд в ячейке памяти, адресуемой содержимым регистра адреса, которое автоматически увеличивается после выборки операнда для адресации следующей ячейки),
  • косвенно-регистровая с предекрементом (операнд в ячейке памяти, адресуемой содержимым регистра адреса, которое автоматически уменьшается перед выборкой операнда для адресации предыдущей ячейки),
  • косвенно-регистровая со смещением (операнд в ячейке памяти, адрес которой является суммой содержимого регистра адреса и 16-разрядного смещения d16, заданного в команде),
  • косвенно-регистровая с индексированием (операнд в ячейке памяти, адрес которой является суммой содержимого регистра адреса, индексного регистра и данного в команде 8-разрядного смещения d8),
  • прямая (операнд в ячейке памяти, адрес которой задается числом Abs, указанным в команде),
  • относительная (операнд в ячейке памяти, адрес которой является суммой текущего содержимого программного счетчика PC и данного в команде 16-разрядного смещения d16 или базового смещения bd),
  • относительная с индексированием (операнд в ячейке памяти, адрес которой является суммой содержимого программного счетчика PC, индексного регистра и данного в команде 16-разрядного смещения d16 или 32-разрядного базового смещения bd),
  • непосредственная (значение операнда Im дано в команде).

Таблица 3.1. Способы адресации CPU32, их представление в формате команды и на языке ассемблера

N Способ адресации MODE REG Синтаксис
ассемблера
1
2
регистры данных
регистры адреса
000
001
n
n
Dn
An
3
4
5
6
7
косвенно-регистровая (КР)
КР с постинкрементом
КР с предекрементом
КР со смещением
КР с индексированием
010
011
100
101
110
n
n
n
n
n
(An)
(An) +
- (An)
(d16,An)
(d8,An,Xn.sz*scale)
8
9
прямая (короткая)
прямая (длинная)
111
111
000
001
Abs. W
Abs. L
10
11
относительная
относительная с индексированием
111
111
101
011
(d16,PC)
(d8,PC,Xn.sz*scale)
12 непосредственная 111 100 # Im
13 КР с базовым смещением и индексированием 110 n (bd, An, Xn.sz*scale)
14 относительная с базовым смещением и индексированием 111 011 (bd, PC, Xn.sz*scale)

Смещение d16 или d8 может быть как положительным, так и отрицательным. В формате команды (рис.3.4) это смещение представляется двоичным числом в дополнительном коде, которое при формировании адреса расширяется знаковым разрядом до 32 разрядов. В качестве индексного регистра Xn при адресации с индексированием может использоваться любой из регистров данных Dn или адреса An. При прямой адресации абсолютный адрес может задаваться словом Abs.W или длинным словом Abs.L в зависимости от его разрядности. При непосредственной адресации используются 8-разрядные (Im8), 16-разрядные (Im16) или 32-разрядные (Im32) операнды.
    При адресации с индексированием возможно масштабирование индекса, которое осуществляется умножением содержимого индексного регистра Xn на масштабный множитель scale, который может иметь значения 1,2,4 или 8. В зависимости от значения символа разрядности sz, указываемого после имени индексного регистра, для формирования адреса операнда используется 16 или 32 разряда его содержимого. Если после имени регистра Xn указан символ W (слово), то индексом служат 16 младших разрядов содержимого Xn, которые расширяются знаком до 32 разрядов; если указан символ L (длинное слово), то индексом служит 32-разрядное содержимое Xn, используемое как число со знаком. При scale=1 содержимое Xn остается без изменения, при значениях scale=2,4 или 8 производится его сдвиг, соответственно, на 1,2 или 3 разряда влево. При программировании на языке Ассемблера значение индекса задается в поле операнда записью Xn.sz*scale (табл.3.1), где X имеет значение A (регистра адреса) или D (регистр данных), sz - значение W или L, scale - значение 1,2,4 или 8. Например, запись A3.W*2 означает, что индексом служит содержимое 16 младших разрядов регистра адреса A3, сдвинутое на один разряд влево и расширенное знаком до 32 разрядов.
    Для косвенно-регистровой и относительной адресации с индексацией возможно использование 32-разрядного базового смещения bd (номера 13,14 в табл.3.1). В этом случае эффективный адрес операнда формируется также, как при использовании 8-разрядного смещения d8 (номера 7,11 в табл.3.1), однако формат команды расширяется для введения 32-разрядного значения bd (рис.3.4,в)

EA = ( An или PC ) + ( Xn )*scale+ bd.

    Отметим, что текущее содержимое PC, используемое для вычисления относительного адреса, равно адресу первого слова выполняемой команды, увеличенному на 2. Для формирования адреса используется 32-разрядное содержимое регистров, однако в качестве физического адреса на шину адреса A23-0 выводятся только 24 младших разряда. Значение адреса, полученное одним из указанных способов, называется эффективным адресом [EA].
    Процессор CPU32 не имеет специальных команд ввода-вывода данных. При обращении к внешним устройствам их адрес формируется так же, как при обращении к ячейкам памяти, с использованием перечисленных выше способов адресации. Если сформированный адрес оказывается адресом внешнего устройства, то оно является источником или приемником данных (операндов).
    Выполняемые процессором команды могут быть двухадресными, одноадресными и безадресными. На рис.3.4,а показан формат типовой двухадресной команды, где поле COP определяет вид операции, поле OPM - разрядность операндов и размещение результата, поле Rn содержит номер регистра n, в котором находится один операнд, поля MODE и REG задают способ адресации второго операнда (табл.3.1). Таким образом, один операнд всегда выбирается из регистра, второй - из регистра или памяти, результат операции размещается на месте одного из операндов. В табл.3.1 указаны символические обозначения адреса операнда на языке ассемблера в соответствии со способом адресации, используемым для его формирования.

а)
15 12
11 10
9 7
6 4
2 0
COP Rn OPM MODE REG


б)
15 14
12 11
10 9 8
7 0
 
D/A Xn W/L
scale 0
d8


в)
Im8, 16 или Im32
d16 для или Abs. W, L или bd
d16 для или Abs. W, L или bd

Рис.3.4. Формат типовой команды

При адресации с индексированием команда содержит второе слово, формат которого показан на рис.3.4,б. Бит D/A этого слова указывает тип регистра, который используется в качестве индексного: при D/A=0 - регистр данных (Xn=Dn), при D/A=1 - регистр адреса (Xn=An); поле Xn содержит номер регистра n; бит W/L определяет разрядность индекса: при W/L=0 индексом служит содержимое 16 младших разрядов индексного регистра, которые расширяются знаковым разрядом до 32-разрядного числа, при W/L=1 индексом служит 32-разрядное содержимое регистра. На языке ассемблера разрядность индекса определяется символами W или L, указываемыми после имени регистра Xn (.sz в табл.3.1). Поле d8 содержит 8-разрядное смещение в дополнительном коде.
    Ряд способов адресации требует введения в команду дополнительных слов (рис.3.4,в). При непосредственной адресации после первых слов (одного или двух), определяющих вид операции и способы адресации, следует одно или два слова, содержащих операнды Im8, Im16 или Im32. Если при адресации первого (< src >) или второго (< dst >) операнда используется 16-разрядное смещение d16, либо абсолютный адрес, имеющий разрядность слова (Abs.W) или двойного слова (Abs.L), то они также указываются в отдельных словах команды. Поэтому команды имеют длину от 1 до 5 слов.