АДРЕСАЦИЯ ДАННЫХ
Теперь, когда мы знаем практически все об операционной части команды, можно заняться адресной. Посмотрим, какими способами могут представляться операнды ОП1 иОП2.
Начнем с того, что под кодирование каждого операнда всегда отводится четыре двоичных разряда. Из них старшие два будут всегда задавать тип адресации данных. а младшие - его конкретизировать. В большинстве случаев два младших бита будут просто представлять собой номер регистра, с участием которого осуществляется адресация.
Старшая «половинка» модификатора операнда, соответствующая типу адресации, может содержать четыре неповторяющиеся двоичные комбинации:
00 - регистровый
метод адресации: операнд является содержимым указанного регистра;
01 - метод косвенной адресации: операндом является содержимое ячейки ОЗУ, адрес которой задан в указанном регистре;
10 - резерв; в будущей версии здесь будет реализован индексный метод адресации;
11 - адресация по счетчику адреса команд
PC: операнд извлекается с использованием информации, входящей в команду (более подробные объяснения приведены ниже).
Рассмотрим перечисленные способы адресации подробнее.
Наиболее простым является регистровый метод, который мы фактически уже использовали в примерах предыдущего раздела. Учитывая, что этому методу соответствуют нулевые значения старших битов, полный код операнда совпадает с номером регистра: двоичная комбинация 0000 соответствует R0, 0001 - R1 и т.д.
В качестве данных для операции используется информация, содержащаяся в указанном регистре. Например, если Rl = 3, а R2 = 5, то в результате выполнения команды
0212:R2+R1=>R2
получится R2 = 8.
При косвенной
адресации код операнда выглядит несколько сложнее: косвенное обращение по регистру R0 имеет вид 0100 (т.е. 4), по Rl - 0101 (5) и т.д. Содержимое указанного регистра при этом служит не операндом, а его адресом в ОЗУ. Рассмотрим команду
0263: R3 + (R2) => R3
где скобки у R2 символизируют косвенную адресацию. Пусть содержимое R2 в данный момент равно 30, а R3 = 6.
Примем также, что в ячейке памяти с адресом 30 хранится число 10. Тогда процессор «Е97», выполняя команду, к имеющемуся в R3 значению 6 прибавит число из ячейки 30, на которую указывает R2, и результат операции - 16 - занесет в R3.
И, наконец, рассмотрим способы адресации по программному счетчику PC. Поскольку в этом случае регистр, по которому производится адресация, уже однозначно определен, освобождаются два младших бита операнда, которые можно использовать для других целей. В связи с этим удается получить четыре различных способа адресации по счетчику:
11 00 - резерв;
11 01 - операндом служит константа, входящая в команду;
11 10 - операнд извлекается из ячейки ОЗУ, адрес которой входит в команду;
1111-резерв.
Итак, в «Е97» существует два метода адресации по PC, соответствующих шест-надцатеричным кодам D и Е в качестве операнда. Изучим их на примерах. Команда, состоящая из двух слов
02D1
0020
выполняет операцию Rl + 20 => Rl следующим образом: к текущему значению Rl прибавляется извлеченное из команды число 20 и результат помещается в Rl. Если первоначальное значение Rl было, скажем, F0, то в результате операции в Rl запишется 110.
Рассмотрим еще одну команду с адресацией по PC:
021Е
0020
выполняющую операцию (20) + Rl => (20) так: к числу, хранящемуся в ячейке памяти 20, прибавляется значение Rl. В случае, когда Rl = F0, a (20) = 40, ответ будет: (20)= 130.
На этом рассказ о методах адресации можно было бы и закончить, если бы не наличие в командах модификатора, хранящегося в первой цифре шестнадцатерич-ного представления команды. Его значение также может существенно влиять на извлечение данных и запись результата.
Во всех приведенных в данном пункте примерах МОД = 0 и, следовательно, не оказывает влияния на расшифровку и выполнение операции. Если же он имеет ненулевое значение, необходимо дополнительно учитывать и этот фактор.
Модификатор состоит из четырех битов, причем два старших отвечают за «переключением бант/слово, а два младших - за особый способ представления данных, называемый «короткой константой».