ществляется передача «в», а при d=0 - передача «из» МП. Направление передачи относится ко второму операнду (регистру), определяемому полем reg второго байта команды. Поле w задает формат операнда: при w=0 МП оперирует с байтом, а при w=l производится обработка 16-битного слова.
Второй байт команды, называемый постбайтом адресации, определяет работающий регистр или ячейку памяти и состоит из трех полей: режима mod, регистра reg и селектора регистр/память r/m.
В поле reg в соответствии с таблицей 19.1 задается один из регистров, содержащий второй операнд команды.
Таблица 19.1
reg (r/m) |
w=0 |
w=1 |
reg (r/m) |
w=0 |
w=l |
0 0 0 0 0 1 0 1 0 0 1 1 |
AL CL DL ВL |
AX CX DX BX |
1 0 0 1 0 1 1 1 0 1 1 1 |
АН СН DH ВН |
SP ВР SI DI |
Поле mod задает используемый режим адресации и предназначено для определения первого операнда команды. Если mod=11, то операнд содержится в регистре, адресуемом полем reg в соответствии с таблицей 19.1. Во всех остальных случаях (mod11) первый операнд располагается в памяти. При этом код поля mod задает способ использования смещений disp в соответствии с таблицей 19.2.
Таблица 19.2
mod |
Режим |
Пояснения |
00 01 10 |
Disp=0 Disp=dispL Disp=dispH, dispL |
Смещения нет 8-битное смещение 16-битное смещение |
11 |
Регистровая адресация в соответствии с таблицей 19.1 |
Во всех случаях, связанных с обращением к памяти (mod11), в поле r/m команды кодируется способ вычисления эффективного адреса ЕА (смещения) операнда. В операционном устройстве МП этот эффективный адрес формируется в соответствии с таблицей 19.3.
Имеется только одно исключение: при mod=00 и r/m=110 смещение отсутствует и код команды содержит прямой (физический) адрес EA=dispH, dispL.
Таким образом, операнд в памяти можно адресовать 24 различными способами (3 кода поля mod в таблице 10.2 и 8 кодов поля r/m в таблице 19.3).
Таблица 19.3
r/m |
Смещение (ЕА) |
000 001 010 011 100 101 110 111 |
ЕА=(ВХ)+(SI)+disp ЕА=(ВХ)+(DI)+disp ЕА=(ВР)+(SI)+disp EA=(BP)+(DI)+disp ЕА=(SI)+disp EA=(DI)+disp ЕА=(ВР)+disp ЕА=(ВХ)+disp |
Формат двухоперандной команды с непосредственным операндом показан на рис.19.2.
З
Рис.19.2.
Двухоперандная команда с непосредственным
операндом
Таблица 19.4
S, w |
Формат операнда |
Пояснения |
Х0 01 11 |
data L data H, data L data L* |
байт данных 2байта данных байт данных с расширением знака до 16бит |
Назначение полей mod и r/m сохраняется таким же, как и в предыдущем формате команд.
Н
Рис.19.3.
Однооперандная команда
Микропроцессор К1810 имеет в своем составе команды специального формата, которые позволяют сокращать на один байт формат часто используемых команд. Это команды операции с регистрами и, в частности, с аккумулятором.
19.2. Способы адресации
В таблице 19.5 приведены сведения о способах формирования эффективных адресов в МП К1810. В МП К1810 реализуются следующие способы адресации: регистровая непосредственная, прямая, косвенная, базовая, индексная, индексно - базовая, относительная и некоторые их комбинации.
Таблица 19.5
r/m |
mod |
Регистр | |||
00 |
01 |
10 |
w=0 |
w=l | |
000 |
(ВХ)+(SI) |
(BX)+(SI)+dispL |
(BX)+(SI)+dispH, L |
AL |
AX |
001 |
(BX)+(DI) |
(BX)+(DI)+dispL |
(BX)+(DI)+dispH, L |
CL |
CX |
010 |
(BP)+(SI) |
(BP)+(SI)+dispL |
(BP)+(SI)+dispH, L |
DL |
DX |
011 |
(BP)+(DI) |
(BP)+(DI)+dispL |
(BP)+(DI)+dispH, L |
BL |
BX |
100 |
(SI) |
(SI)+dispL |
(SI)+dispH, L |
AH |
SP |
101 |
(DI) |
(DI)+dispL |
(DI)+dispH, L |
CH |
BP |
110 |
dispH, L |
(BP)+dispL |
(BP)+dispH, L |
DH |
SI |
111 |
(BX) |
(BX)+dispL |
(BX)+dispH, L |
BH |
DI |
Регистровая адресация. Этот способ адресации кодируется в поле КОП или в постбайте и определяет, что операнд находится в одном из регистров блока РОН. В двухоперандных командах определяются два регистра так, как это показано в таблице 19.5.
Непосредственная адресация. Операнд содержится в теле команды и обычно имеет формат 16 бит. В двухоперандных командах с помощью постбайта режима адресации имеется возможность определять операции над непосредственным операндом и содержимым регистра или ячейки памяти. МП К1810 не имеет команд загрузки непосредственного операнда в сегментные регистры или в стек.
Прямая адресация (mod=00, r/m=110). Команды с прямой адресацией содержат двухбайтный эффективный адрес (смещение) операнда вслед за постбайтом режима адресации. В командах безусловной передачи управления и вызова подпрограмм имеется возможность задавать двухбайтный сегментный адрес и двухбайтное смещение (длинная прямая адресация), что позволяет адресовать любой элемент памяти. В командах преобразования данных длинная прямая адресация не предусмотрена.
Регистровая косвенная адресация. Двухбайтный эффективный адрес (смещение) содержатся в регистрах ВХ, SI и DL Регистровая косвенная адресация через регистр ВР моделируется использованием базовой адресации с нулевым смещением. Регистр, используемый в команде с косвенно-регистровой адресацией, определяется постбайтом режима (mod=00; r/m=100, 101, 111).
Относительная адресация с использованием базовых регистров. Эффективный адрес операнда определяется как сумма содержимого указанного базового регистра (ВХ, ВР, SI, DI) и одно - или двухбайтного смещения (dispL, dispH, L), содержащегося в теле команды сразу вслед за постбайтом режима адресации. При этом все смещения представляются в дополнительном коде как целое со знаком. Базовый способ адресации используется для обращения к элементам различных структур данных, когда величина смещения известна во время ассемблирования, а базовый адрес структуры определяется в процессе исполнения программы.
Индексная адресация (mod=10: r/m=100, 101, 110, 111). В МП К1810 данный способ адресации операнда реализуется с использованием команд с базовой адресацией и двухбайтным смещением. При этом в теле команды содержится двухбайтный «базовый адрес», а в «базовом регистре» - индекс. Базовые регистры ВХ, ВР, SI и DI могут использоваться командами с базовой и индексной адресацией, однако чаще всего регистры ВХ и ВР выступают в качестве базовых, а регистры SI и DI - индексных.
Комбинированная относительная и индексная адресация (mod=00; r/m=100, 101, 110, 111). В командах, использующих данный способ адресации, эффективный адрес операнда равен сумме базового адреса и смещения, содержащихся в регистрах. Базовый адрес представляется в регистрах ВХ, ВР, а индекс - в регистрах SI и DI. По командам с индексно-базовой адресацией обеспечивается эффективный доступ к элементам памяти, так как этот метод адресации позволяет вычислять в процессе выполнения команды не только базовый (начальный) адрес структуры данных, но и индекс (смещение) элемента внутри структуры.
Относительная адресация с использованием счетчика команд. При этом способе адресации эффективный адрес вычисляется как сумма содержимого счетчика команд и одно- или двухбайтного смещения, содержащегося в теле команды. Данный способ адресации используется только в командах условных и безусловных переходов, командах вызова подпрограмм и командах управления циклом.