| Cпособы адресации  и формат командПроцессор выполняет обработку битов, байтов, 16-разрядных слов, 32-разрядных длинных
слов и двоично-десятичных  чисел (1 байт = 2 десятичных  разряда). Обрабатываемые данные - операнды могут располагаться в регистрах
(данных или адреса) или оперативной памяти. Для выборки слова (байты B1-0) или длинного слова (байты B3-0) команда задает адрес
старшего байта N, четный или кратный четырем. При этом слова и длинные слова размещаются таким образом, что младшие байты (разряды
D7-0 данных) располагаются в ячейках памяти с большими адресами: N+1 или N=3 (рис.3.3). Такое размещение байтов в памяти от старшего
к младшему соответствует естественному порядку их написания слева - направо. Этот порядок адресации байтов называется в зарубежной
литературе "big -endian". Он отличается от порядка "little-endian", принятого компанией INTEL и рядом других производителей, когда
размещение слова начинается с младшего байта, адрес которого служит адресом слова.
 
 
    |  | 
    | Старший байт И1 (разряды D15-8) |  
    | Младший байт В0 (разряды D7-0) |  | a) |  
    |  |  |  |  
    |  | 
    | Старший байт В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
 |  
    |  | 
    | косвенно-регистровая (КР) |  
    | КР с постинкрементом |  
    | КР с предекрементом |  
    | КР со смещением |  
    | КР с индексированием |  |  |  | 
    | (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 указаны символические обозначения адреса операнда на языке ассемблера в
соответствии со способом адресации, используемым для его формирования.
 
 
 
 
 
 
 
	
	| в) |  
	| 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 слов.
 
 |