Сравнительный анализ различных систем адресации, используемых в мини и микроЭВМ

2.1 РЕГИСТРОВЫЙ РЕЖИМ АДРЕСАЦИИ В этом режиме операндом является содержимое регистра. Рассмотрим инструкцию MOVL R2, R3. Для СМ ЭВМ характерно, что приемником всегда является второй операнд для двух- и третий для трех-операндных инструкций. Поэтому инструкция MOVL R2, R3 пересылает содержимое регистра R2 в регистр R3, а не наоборот, как было бы с аналогичной инструкцией MOV AX, BX из набора команд процессоров семейства 8086 фирмы Intel. Приведем пример использования этого способа адресации на примере инструкции MOVL R2, R3. Ее машинная запись будет выглядеть, как D0 52 53, где D0 — код инструкции, а 52 и 53 — прямая адресация, 2ой регистр и прямая адресация, 3ий регистр соответственно.

Пусть содержимое регистров до операции было: R2 = 10 R3 = 1 000 Тогда после они будут выглядеть так: R2 = 10 R3 = 10 Как видно из примера, содержимое регистра R2 было скопировано в R3.

2.2 КОСВЕННО-РЕГИСТРОВЫЙ РЕЖИМ В этом режиме содержимое регистра является адресом операнда. Мнемоника на ассемблере (Rn), где (Rn) является регистром содержащим либо адрес операнда источника {MOVL (R2), R3} либо адрес операнда приемника {MOVL R2, (R3) }. В качестве примера опять приведем инструкцию пересылки двойного слова MOVL R2, (R3). Код операции останется тот же, а операнды будут представлены как 52 63, где 63 — это уже косвенная адресация с использованием 3го регистра. При том же содержимом регистров, что и в предыдущем примере, будем иметь: До операции MOVL R2, (R3): R2 = 10 R3 = 1 000 (1 000) = 200 (R3) После…

R2 = 10 R3 = 1 000 (1 000) = 10 После операции пересылки значение ячейки памяти, адрес которой содержался в R3 (1 000) изменился с 200 на 10.

2.3 РЕЖИМ С АВТОУВЕЛИЧЕНИЕМ Специально для обработки массивов данных в CM1700 предусмотрена адресация с автоувеличением. В этом режиме содержимое выбранного регистра является адресом операнда, как и при косвенно-регистровой адресации, однако после выполнения операции содержимое регистра увеличивается на N, в зависимости от типа операнда: N = 1, если операндом является байт, N = 2, если операндом является слово, N = 4, если операндом является двойное слово, N = 8, если операндом является учетверенное слово или слово с плавающей запятой, N =16, если операндом является целое слово длиной 128 разрядов или двойное слово с плавающей запятой.

Рассмотрим этот режим адресации используя команду MOVL (R0), (R2) +. В памяти инструкция будет представлена как D0 60 82, где 60 — как уже говорилось косвенная адресация с регистром R0, а 82 — косвенная адресация с использованием регистра R2 и автоувеличение. Восьмерка в последнем случае как раз и означает данный режим адресации.

До операции MOVL (R0), (R2) + R0 = 1 000 R2 = 1 050 (1 000) = 00AC (R3) (1 050) = 0 (R2) После…

R0 = 1 000 R2 = 1 054 <-- Увеличилось на 4 (1 000) = 00AC (1 050) = 00AC Как видно произошла пересылка числа из ячейки 1 000 в 1 050 и значение регистра R2 увеличилось на 4. (Инструкция MOVL пересылает двойные слова. Об этом говорит суффикс 'L' - Long — длинное или двойное слово. Поэтому R2 увеличился на 4. Вообще предусмотрены операции работающие с байтами, словами, двойными словами и иногда с учетверенными словами и имеющие суффиксы B, W, L и Q соответственно.) 2.4 РЕЖИМ С АВТОУМЕНЬШЕНИЕМ Этот режим идентичен режиму с автоувеличением, однако здесь после выполнения операции следует не увеличение, а уменьшение операнда по тем же правилам. Для примера рассмотрим команду CLRB -(R5), которая в памяти будет выглядеть как 94 75. Здесь 94 — код операции, а 75 — значит: использовать регистр R5 (? 5) и произвести уменьшение после исполнения (7?).

До операции CLRB -(R5) R5 = 1 000 (00000FFF) = 01A (1 000) = 01A (R5) После…

R5 = 00000FFF <-- уменьшилось на 1 (00000FFF) = 01A (R5) (1 000) = 0 <-- 0 Изменения хорошо видны. Ячейка 1 000, на которую первоначально указывал регистр R5 очистилась (CLRB — CLeaR Byte — очистить байт), значение регистра R5 уменьшилось на 1 и теперь указывает на ячейку памяти расположенную перед ячейкой 1 000, т. е. 00000FFF.

2.5 КОСВЕННЫЙ РЕЖИМ С АВТОУВЕЛИЧЕНИЕМ В этом режиме содержимое выбранного регистра является адресом адреса операнда, а после выполнения операции производится увеличение содержимого этого регистра на 4, независимо от размера операнда. Это определяется тем, что регистр содержит адрес адреса (т.е. адрес ячейки, содержимое которой в свою очередь используется как адрес для получения действительного операнда), а адрес всегда представляется как двойное слово.

Для примера возьмем операцию очистки байта, мнемоника которой на ассемблере будет выглядеть как CLRB @(R5) +. Символ '@' (зюха) означает использование не просто режима с автоувеличением, а именно косвенного. Представление этой операции в памяти будет 94 95, где 94 — код операции, 95 — означает использование регистра R5 и косвенной адресации с автоувеличением (цифра 9).

До операции CLRB @(R5) + R5 = 1 000 (1 000) = 00AC (R5) (00AC) = 0A (1 000) После…