Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
0_МПиИСТС_Все главы.doc
Скачиваний:
518
Добавлен:
27.03.2016
Размер:
10.5 Mб
Скачать

7.1.6 Методы адресации

В микропроцессоре 1801 ВМ1 используется 4 метода прямой адресации, номера которых четные, и 4 метода косвенной адресации с нечетными номерами.

Дополнительно, в качестве регистра общего назначения можно использовать регистр R7, но эффективно он работает лишь с 4-мя методами. Здесь каждый метод имеет особое название и собственную мнемонику.

Рассмотрим небольшой набор команд, необходимый для пояснения работы методов адресации.

Здесь S - источник ; D – приемник.

Таблица 7.1

Примеры команд

Мнемоника

Описание

8-ричный код команды

CLR... (CLR R0)

Очистка указанной ячейки или регистра

0050DD (005000)

CLR B...

Очистка байта (обнуляется старший и младший байт указанной ячейки)

1050DD

INC...

Увеличение на единицу указанной ячейки

0052DD

INC B...

Прибавление единицы к байту

1052DD

COM...

Инвертирование (всех битов операнда)

0051DD

COM B...

Инвертирование байта

1051DD

ADD...

Сложение операндов. Результат - по адресу 2-го операнда

06SSDD

Как видно из табл. 7.1, команды могут оперировать как словами, так и байтами, что находит отражение в мнемонике и в крайнем левом бите кода операции.

На рис.7.6 показаны последовательности операций выполнения команды с каждым из четырех методов прямой адресации. При регистровом методе адресации любой из восьми регистров общего назначения может быть использован как накопитель. Следовательно, операнд будет находиться в выбранном регистре. Так как РОНы аппаратно реализованы в БИС МП, они обладают более высоким быстродействием, чем любая память, работающая под управлением процессора. Это преимущество особенно проявляется при операциях с переменными, к которым необходимо обращаться.

Рис.7.6 Методы прямой адресации

№ метода адресации

Метод адресации

0

Регистровый

2

Автоинкрементный

4

Автодекрементный

6

Индексный

Прямая регистровая адресация (№0).

Правило: содержимое регистра, указанного в команде, используется как операнд. Байтовые команды всегда оперируют содержимым младшего байта регистра. При пересылке байта в регистр происходит расширение знака, при котором старший бит пересылаемого байта восемь раз копируется в старшем байте регистра-приемника.

Примеры регистровой адресации:

Символическое обозначение

Восьмеричный код команды

Наименование команды

1. INC R3

005203

Прибавление единицы

Действие: Прибавляет единицу к содержимому третьего РОН.

2. ADD R2, R4

060204

Сложение

Действие: Складывается содержимое R2 с содержимым R4.

До выполнения операции

После выполнения операции

R2) 000002

R2) 000002

R4) 000004

R4) 000006

3. COMB R4

105104

Инвертирование байта

Действие: Заменяется содержимое разрядов 07÷00 в R4 их обратным кодом. (Байтовые команды, использующие регистры общего назначения, оперируют только с младшим байтом информации, содержащейся в РОН).

До выполнения операции:

После выполнения операции:

R4) 022222

R4) 022155

Прямая автоинкрементная адресация (№2)

Правило: содержимое регистра, указанного в команде, используется как адрес операнда. Операнд извлекается, обрабатывается и возвращается по старому адресу. После извлечения операнда содержимое регистра увеличивается на 2 для словных команд и на 1 для байтных команд. Но если байтовая команда работает с R6 или с R7, то их содержимое всегда увеличивается на 2.

Автоинкрементный метод адресации используется при автоматическом обращении с заданным шагом к последовательным элементам таблицы операндов. Содержимое выбранного регистра автоматически увеличивается для возможности обращения в дальнейшем к последующей ячейке. При байтовых операциях увеличение происходит на единицу, при операциях с полными словами – на 2, а содержимое R6, R7 всегда увеличивается на 2.

Автоинкрементный метод адресации особенно удобен при операциях с массивами и стеками. С помощью этого метода можно выбрать элемент таблицы, а затем увеличить указатель для обращения к следующему операнду в таблице. Хотя этот метод наиболее удобен при работе с таблицами, он может быть использован как общий метод для различных целей.

Примеры автоинкрементной адресации:

Символическое обозначение

Восьмеричный код

Наименование команды

1. CLR (R5)+

005025

Очистка

Действие: Содержимое ячейки, адрес которой содержится в R5, очищается, после чего адрес (содержимое R5) увеличивается на 2.

До выполнения операции

После выполнения операции

20000) 005025

20000) 005025

R5) 030000

R5) 030002

30000) 111116

30000) 000000

2. CLRB (R5)+

105025

Очистка байта

Действие: Очищается выбранный байт, адрес которого содержится в R5, после чего адрес (содержимое R5) увеличивается на единицу.

До выполнения операции

После выполнения операции:

20000) 105025

R5) 030000

20000) 105025

R5) 030001

30000) 111616

30000) 111400

3. ADD (R2)+,R4

062204

Сложение

Действие: Операнд, адрес которого содержится в R2, складывается с содержимым R4. Результат заносится в R4, а содержимое R2 (адрес операнда источника) увеличивается на 2.

До выполнения операции:

После выполнения операции:

100) 062204

R2) 000204

100) 062204

R2) 000206

R4) 001000

R4) 003000

204) 002000

204) 002000

Прямая автодекрементная адресация (№4)

Правило: содержимое регистра, указанного в команде, вначале уменьшается на 2 для словных команд и на 1 для байтных команд и затем используется как адрес операнда. Операнд извлекается, обрабатывается и возвращается по старому адресу. Но если байтовая (байтная) команда работает с R6 или с R7, то их содержимое всегда уменьшается на 2.

Автодекрементный метод адресации также используется для обработки табулированных данных. Однако, в отличие от автоинкрементного метода, адресация к ячейкам массива идет в противоположном направлении. При этом методе адресации содержимое выбранного РОН уменьшается (для байтовых команд на единицу, для команд с полными словами на 2), а затем используется как исполнительный адрес.

Сочетание автоинкрементного и автодекрементного методов адресации может быть эффективно использовано для обработки стека.

Примеры автодекрементной адресации:

Символическое обозначение

Восьмеричный код

Наименование команды

1. INC -(R0)

005240

Прибавление единицы

Действие: Содержимое R0 уменьшается на два и используется как исполнительный адрес. К содержимому, выбранному из ячейки по этому адресу, прибавляется единица.

До выполнения операции

После выполнения операции:

100) 005240

R0) 017776

100) 005240

R0) 017774

17774) 000000

17774) 000001

2. INCВ -(R0)

105240

Прибавление единицы к байту

Действие: Содержимое R0 уменьшается на единицу и используется как адрес операнда. К выбранному байту прибавляется единица.

До выполнения операции

После выполнения операции:

100) 105240

R0) 017776

100) 105240

R0) 017775

17774) 000000

17774) 000400

3. ADD -(R3), R0

064300

Сложение

Действие: Содержимое R3 уменьшается на два и используется как адрес операнда источника, который складывается с содержимым R0 (операнд приемника). Результат записывается в R0.

До выполнения операции:

После выполнения операции:

120) 064300

R0) 000020

120) 064300

R0) 000070

R3) 001776

R3) 001774

1774) 000050

1774) 000050

Прямая индексная адресация (№6)

Правило: содержимое регистра, указанного в команде, вначале складывается с индексным словом, которое, как правило, записывается в ячейке памяти, непосредственно следующей за командным словом, и полученная сумма используется как адрес операнда (исполнительный адрес).

Индексный метод адресации, при котором исполнительный адрес определяется как сумма содержимого выбранного РОН с индексным словом, позволяет осуществлять произвольный доступ к элементам структуры данных. При индексном методе адресации содержимое выбранного регистра может быть использовано в качестве базы для вычисления серии адресов.

Примеры индексной адресации:

Символическое обозначение

Восьмеричный код

Наименование команды

I. CLR 200(R4)

005064

Очистка

000200

Действие: Адрес операнда определяется прибавлением к содержимому R4 кода 200, после чего ячейка с вычисленным адресом очищается.

До выполнения операции:

После выполнения операции:

1020) 005064

R4) 001000

1022) 000200

1200) 177777

1020) 005064

R4) 001000

1022) 000200

1200) 000000

2. COMB 200 (R1)

105161

000200

Инвертирование

байта

Действие: Адрес операнда определяется прибавлением к содержимому R1 кода 200. После этого содержимое ячейки с вычисленным адресом заменяется его обратным кодом

До выполнения операции:

После выполнения операции:

1020) 105161

R1) 017777

1020) 105161

R1) 017777

1022) 000200

1022) 000200

20176) 011000

20176) 166400

Адрес операнда был вычислен прибавлением к содержимому R1 кода 200, в результате чего команда COMB произвела свое действие над старшим байтом ячейки с адресом 20176.

3. ADD 30(R2), 20(R5)

066265

Сложение

000030

000020

Действие: Содержимое ячейки, адрес которой вычисляется сложением кода 30 с содержимым R2 (операнд источника), складывается с содержимым ячейки, адрес которой вычисляется сложением кода 20 с содержимым R5 (операнд приемника). Результат записывается по адресу операнда приемника.

До выполнения операции:

После выполнения операции:

1020) 066265

1020) 066265

1022) 000030

1022) 000030

1024) 000020

R2) 001100

R5) 002000

1024) 000020

R2) 001100

R5) 002000

1130) 000001

1130) 000001

2020) 000001

2020) 000002

Косвенные методы адресации

Четыре основных метода могут быть использованы с косвенной адресацией. Если в регистровом методе операндом является содержимое выбранного регистра, в косвенно-регистровом методе содержимое выбранного регистра является адресом операнда. В трех других косвенных методах содержимое регистра позволяет выбрать адрес операнда, а не сам операнд. Эти методы используются, когда таблица состоит из адресов, а не из операндов. На рис. 7.7 показаны последовательности операции выполнения команды с каждым из четырех методов косвенной адресации.

Рис.7.7 Методы косвенной адресации

№ метода адресации

Метод адресации

1

Косвенно-регистровый

3

Косвенно-автоинкрементный

5

Косвенно-автодекрементный

7

Косвенно-индексный

Косвенно - регистровая адресация (№1)

Правило: содержимое регистра, указанного в команде, используется как адрес операнда.

Пример косвенно-регистрового метода адресации:

Символическое обозначение

Восьмеричный код

Наименование команды

CLR @R5

005015

Очистка

Действие: Содержимое ячейки, адрес которой содержится в R5, очищается.

До выполнения операции:

После выполнения операции:

1020) 005015

R5) 001700

1020) 005015

R5) 001700

1700) 177777

1700) 000000

Косвенно - автоинкрементная адресация (№3)

Правило: содержимое регистра, указанного в команде, используется как адрес адреса операнда. Операнд извлекается, обрабатывается и возвращается по старому адресу. После извлечения операнда содержимое регистра всегда увеличивается на 2. Исходное содержимое регистра обязательно должно быть четным.

Пример косвенно-автоинкрементного метода адресации:

Символическое обозначение

Восьмеричный код

Наименование команды

INC @(R2)+

005232

Прибавление единицы

Действие: Содержимое ячейки, адрес которой содержится в R2, используется как адрес операнда. Операнд увеличивается на единицу, а содержимое R2 на два.

До выполнения операции:

После выполнения операции:

1000) 005232

R2) 010300

1000) 0005232

R2) 010302

10300) 001010

1010) 000000

10300) 001010

1010) 000001

Косвенно - автодекрементная адресация (№5)

Правило: содержимое регистра, указанного в команде, вначале всегда уменьшается на 2 и затем используется как адрес адреса операнда. Операнд извлекается, обрабатывается и возвращается по старому адресу. Исходное содержимое регистра обязательно должно быть четным.

Пример косвенно-автодекрементной адресации:

Символическое обозначение

Восьмеричный код

Наименование команды

COM @-(R0)

005150

Инвертирование

Действие: Содержимое R0 уменьшается на два и используется как адрес ячейки, в которой находится адрес операнда. Операнд заменяется его обратным кодом.

До выполнения операции:

После выполнения операции:

1000) 005150

R0) 010776

1000) 005150

R0) 010774

10774) 010100

10100) 012345

10774) 010100

10100) 165432

Косвенно - индексная адресация (№7)

Правило: содержимое регистра, указанного в команде, вначале складывается с индексным словом, которое, как правило, записывается в ячейке памяти, непосредственно следующей за командным словом, и полученная сумма используется как адрес адреса операнда.

Пример косвенно-индексной адресации

Символическое обозначение

Восьмеричный код

Наименование команды

ADD @1000 (R2), R1

067201

Сложение

001000

Действие: Содержимое ячейки, адрес адреса которой определяется сложением кода 1000 с содержимым R2, складывается с операндом, хранящимся в R1. Результат записывается в R1.

До выполнения операции:

После выполнения операции:

1020) 067201

1020) 067201

1022) 001000

R1) 001234

R2) 000100

1022) 001000

RI) 001236

R2) 000100

1050) 000002

1050) 000002

1100) 001050

1100) 001050

Методы адресации, использующие в качестве РОН R7

R7 можно использовать в любом методе адресации из рассмотренных 8, но эффективно это только в 4 из них.

Непосредственный метод адресации (№ 2)

Частный случай прямой автоинкрементной адресации с R7, когда операнд находится непосредственно в команде, а именно в ячейке памяти, следующей за командным словом.

Пример:

100) INC (R7)+ = INC #0.

До выполнения операции:

После выполнения операции:

100) 005227

100) 005227

Как только “прочитали” 100), то сразу в R7 получится 102) и далее выполняется сама команда.

R7) 100

R7) (102) 104

102) 000000

102) 000001

Абсолютный метод адресации (№ 3)

Частный случай косвенно – автоинкрементной адресации с R7, когда в самой команде содержится адрес операнда.

Пример:

100) CLR @ (R7)+ = CLR @ #700

до после

100) 005037 005037

102) 700 700

700) 16 0

R7) 100 104

В ячейке, следующей за командным словом, находится адрес операнда.

Относительный метод адресации (№ 6)

Частный случай прямой индексной адресации с R7, когда в мнемонике команды сразу указывается исполнительный адрес.

Пример:

100) COM 600(R7) = COM 704

до после ( разновидность индексного метода )

100) 005167 005167

102) 600 600

R7) 100 104

704) 120603 057174

206) COM 1000

до после

206) 005167 005167

210) 566 566 ( 566 + 212 = 1000 )

R7) 206 212 ( 206 + 4 = 212 )

1000) 16 177761

206) COM 100

до после ( 100 - 212 = -112 )

206) 005167 005167 0 0 0 1 1 2

210) 177666 177666 0.000.000.001.001.010

R7) 206 212 1.111. 111.110 .110.101

100) 16 177761 + 1

1.111.111.110.110.110

1 7 7 6 6 6

Косвенно-относительный метод адресации (№ 7)

Частный случай косвенно – индексной адресации с R7, когда в мнемонике команды вслед за знаком «@» указывается исполнительный адрес, например, 2100) COM @600(R7) = COM @2704.

Сумма содержимого ячейки, следующей за командным словом (индексное слово), и содержимого R7 после извлечения индексного слова является адресом адреса операнда.