Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Микропроцессорные системы управления.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
7.35 Mб
Скачать

4.3.3 Способы адресации

Под адресацией понимается обращение к памяти (регистрам РОН, ОЗУ или ПЗУ) для произведения над их содержимым (операндами) каких-либо операций. Адресация производится с помо­щью команд, в которых кодируются как вид операции, так и способ обращения к операндам.

Различают четыре основных способа адресации: непосредствен­ную, регистровую, прямую и косвенную. При непосредственной адре­сации адрес ячейки, в которой находится операнд, содержится в са­мой команде. Команда состоит из двух машинных слов.

В мнемокоде команда с непосредственной адресацией имеет конструкцию КО # К, RM (где КО - код операции, # - символ, озна­чающий «номер», «число»; К - регистр памяти с операндом, указы­ваемый во втором слове команды; R - регистр РОН; М - номер R), восьмеричном коде записывается как КО 27 D К, где 27 - восьмеричный код непосредственной адресации.

Пример.

MOV # 425, RO или 012700 000425. Команда в мнемокоде читается как «передать» (MOV) содержимое регистра ОЗУ или ПЗУ номер д25 в регистр RO, или в восьмеричном коде для первого машинного слова: 01 - код операции MOV (табл. 9), 27 - код непосредственной адресации первого операнда (S), 00 - код регистра 0; для второго ма­шинного слова: 000425 - восьмеричный код регистра памяти номер 425, в котором записан операнд.

Регистровая адресация используется только для операций меж­ду регистрами РОН.

Команда с регистровой адресацией имеет конструкцию КЛ RM, RM, где операнд-источник S и операнд-приемник D строятся одина­ково в виде RM, или в кодах КО: ОМ ОМ.

Пример.

СМР R5, RQ или 02 0500, т.е. сравнить содержимое реги­стров общего назначения R5 и RO (02 - код операции СМР из табл. 9, 05 и 00 - адреса РОН R5 и R0).

Рисунок 30 – Структурная схема CAP привода станка с ЧПУ

Команда занимает одно машинное слово.

Рисунок 31 – Алгоритм расчета CAP

Рассмотрим программу расчета управляющего воздей­ствия системы автоматического регулирования (CAP) приводом одной из координат станка с ЧПУ (рис. 30). Он производится по формуле

,

где

П - заданное перемещение координат станка;

U - фактическое переме­щение;

ДОС - датчик обратной связи.

Алгоритм расчета приведен на рисунке 31.

Распределение памяти:

П - ячейка номер 400;

U - ячейка номер 401;

U - РОН R0.

Счетчик команд организует с ячейки ОЗУ номер 500, т.е. на­чальное значение СК=500. В левой части программы (табл. 11) приве­дено мнемоническое описание команд, в правой - в восьмеричных ко­дах. В первой и второй командах (блоки 2 и 3 алгоритма) производит­ся подача содержимого ячеек ОЗУ номеров 400 и 401 (т.е. П и U) в регистры РОН RO и R1. Команды используют непосредственную адре­сацию.

Программа представлена в табл. 11.

Таблица 11 – Команды адресации

Метки

КО

Операнды

PC

Команда

1 слово

2 слово

МО

MOV

#400, RO

500

012700

000400

MOV

#401, R1

504

012701

000401

SUB

R1, R0

508

160100

BNE

МО

510

000722

(т.е. Е=-6)

HALT

512

000000

Третья команда SUB и блок 4 определяют разность П-U с запи­сью результата в RO. Команда использует регистровую адресацию.

Четвертая команда BNE - условный переход, если результат (содержимое RO) не равен 0. Если условие выполнено, программа пе­реходит на начало, к метке МО, т.е. на шесть слов назад (в кодах ко­манды BNE: 001000-000006=000772). Величина перехода определяется как сумма машинных слов от кода команды перехода (включая его) по начальное слово команды, к которой производится переход, или по формуле Рснач=Рскон+2байтаЕ), где РСнач и РСкон - начальное и ко­нечное содержимое PC, т.е. 500=510+2Е, откуда Е=12 байт или шесть слов.

Если условие не выполнено (1=0), выполняется следующая ко­манда HALT - останов, конец программы. Счетчик команд PC получа­ет приращение в два байта, если команда занимает одно машинное слово, и в четыре байта - если два машинных слова.

Прямая адресация используется, если все данные (операнды) расположены в ячейках памяти. Ассемблер микроЭВМ «Электроника-60» располагает развитой системой способов прямой, а также косвен­ной адресации. Способы отличаются как объемом используемой памя­ти, так и скоростью обмена данными. Прямая адресация в Ассемблере реализуется пятью способами: абсолютной, относительной, автоин­крементной, автодекрементной и индексной адресациями.

При абсолютной прямой адресации команда имеет вид:

КО @#К, @#К, где К - номера ячеек в памяти, или в кодах:

1-е слово 2-е слово 3-е слово

КО 37 37 , К К

где 37 - код абсолютной адресации.

Пример.

1-е слово 2-е слово 3-е слово

MOV @ # 676, @ # 672 или 013737 000676 000672

т.е. переслать операнд ячейки ОЗУ номер 676 в ячейку номер 672, или в кодах: первое слово - КО = 01, S = 37, D = 37 (т.е. адреса­ция абсолютная), второе слово - 000676 - номер абсолютного адреса первого операнда, третье слово - 000672 номер абсолютного адреса второго операнда. Таким образом, команда занимает в памяти ЭВМ три машинных слова.

Составим программу (табл.12) суммирования импульсов, посту­пающих от датчика перемещения стола фрезерного станка с ЧПУ по какой-либо координате. Переход каждого импульса соответствует пе­ремещению стола на один элементарный шаг (дискрету). При этом используем абсолютную адресацию. Алгоритм приведен на рисунке 32.

Рисунок 32. Алгоритм расчета перемещения стола станка с ЧПУ

Распределение памяти:

№ 500=П - заданное переме­щение стола станка;

№ 501=AL - ячейка памяти, в которую поступают от датчика им­пульсы перемещения;

№ 502=L - текущее переме­щение стола, , начальное значение ячейки - 0;

№ 503=0 - служебная ячейка, в которую записывается ноль;

№ 400=РС - начальный ад­рес.

В первой и второй командах (блок 2 алгоритма) сравнивается состояние ячейки 501 с нулем ячейки 503. Если импульс перемещения пришел, программа переходит к третьей команде, если нет - опять проверяет поступление импульса от датчика. По третьей команде им­пульсы складываются и накапливаются в ячейке 502 (блок 3), по чет­вертой (блок 4) - их сумма L сравнивается с конечным значением пе­ремещения П, если ПL (команда 5), счет продолжается (возврат к метке Ml), если нет - останов.

Таблица 12

Метки

КО

Операнды

PC

Команда

1-е слово

2-е слово

3-е слово

Ml:

СМР

@#501, @#503

400

023737

000501

000503

BEQ

Ml

406

001375

(т.е. E=-38)

ADD

@#501, @#502

408

063737

000501

000502

СМР

@#500, @#502

414

023737

000500

000502

BGT

Ml

420

002765

(т.е. Е=-1110 = -138)

HALT

422

000000

В команде 5 величина Е должна вычисляться в восьмеричной системе счисления, так как необходимо вернуться на 11 слов назад к метке Ml, а в восьмеричной системе 1110=138, тогда для кода команды BGT (исходный код 003000) получим 0030008 - 0000138 = 002765.

Относительная адресация названа так потому, что в ней вместо абсолютных адресов используются их приращения относительно зна­чения PC, т.е. адрес операнда формируется сложением значения PC и приращения адреса. Команда с относительной адресацией имеет вид

КО К, К, где К - обозначения операндов (в кодах - приращения их адресов или в кодах)

1-е слово 2-е слово 3-е слово

КО 67 67 К К

Приращения указываются в команде на месте второго и третьего слов (S и D), причем для определения их значений необхо­димо учесть, что после считывания очередного слова команды содер­жимое PC автоматически увеличивается на 2 (указывает, какое слово считывается следующим).

Пример.

Первые три команды программы (рис. 32) в относительной адре­сации запишутся как (табл. 13):

Таблица 13

Метки

Операнды

Команда

1-е слово

2-е слово

3-е слово

Ml:

CMP

L, Ф

400

026767

000097

000097

BEQ

Ml

406

001375

ADD

L, L

408

636767

000089

000088

Первая команда сформирована следующим образом:

- в 1-м слове 026767 код 02 означает операцию сравнения (см. табл. 10), коды 67 на позициях операндов S и D указывают на относи­тельную адресацию в команде;

- 2-е слово (операнд S), т.е. приращение, рассчитывается по правилу: текущее значение РС==400 после считывания первого слова PC станет равным 402, после считывания приращения операнда AL значение PC будет равным 404. Так как операнд L записан по адре­су 501, то величина приращения должна быть 501 - 404 = 97, т.е. 2-е слово имеет вид 000097;

- 3-е слово (операнд D) формируется аналогично: значение PC после его считывания составит 406, следовательно, приращение равно 503 - 406 = 97.

Для третьей команды получим: приращение L = 501 - 412 = 89, приращение L = 502 - 414 = 88.

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

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

КО (RM)+, или в кодах: КО 2М.

После считывания операнда (RM)+ содержимое регистра R с номером М (т.е. RM) автоматически наращивается на 1 при операциях с байтами и на 2 при операциях со словами.

Пример.

MOV (R5)+, R1 или в кодах: 012501, т.е. выбрать адрес операнда из R5, затем содержимое R1 увеличивается на 2, или в кодах: 01 = КО MOV, 25 = 2М, 01 + R1.

Команда с автодекрементной адресацией имеет вид КО - (RM), Или в кодах: КО 4М, при ее выполнении сначала уменьшается содер­жимое РОН RM (на 1 при операциях с байтами и на 2 при операциях go словами), а затем считывается операнд.

Пример.

СМР R5, - (R1) или 020541, т.е. сравнить содержимое РОН R5 содержимым РОН R1 после его уменьшения на 2 байта.

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

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

КО К (RM), S или в кодах: К06МК, применяется для обработки массивов, при этом содержимое RM является индексом, т.е. изменяе­мой частью адреса, константа К - базовым адресом, исполнительный адрес равен сумме содержимого R1 и константы К. S является опе­рандом-источником. Индексная адресация удобна при обращении к массивам и таблицам. Они объединяют функции ряда команд с ко­мандами INC (прибавление 1) и DEC (вычитание 1), повышая тем са­мым быстродействие работы программы и уменьшая объем занимае­мой ею памяти. Вместе с командами INC и DEC в циклических про­граммах часто применяется команда SOB (счет циклов в РОН), кото­рая должна быть последней в программе. Если число циклов РОН равно 0, счет прекращается, если нет - происходит возврат к началу цикла (не более чем на 63 слова назад).

Косвенная адресация характерна тем, что в команде указывает­ся не операнд или адрес памяти с операндом, а код регистра, в кото­рый помещен адрес операнда. Косвенную адресацию можно разделить на косвенно-регистровую, косвенно-автоинкрементную, косвенно-автодекрементную, косвенно-индексную и косвенно-относительную.

Косвенно-регистровая адресация в командах записывается как:

КО @ RM или КО (RM), в кодах: КО 1М.

Пример.

MOV @ Rl, @RO или 011110

СМР (RO), (R1) или 021011

Таблица 14 – Адресация в командах

Метки

КО

Операнды

PC

Команда

1-е слово.

2-е слово

MOV

#540, RO

400

012700

000540

MOV

#538, Rl

404

012701

000539

MOV

#40, R2

408

012702

000040

BR

МО

412

000402

М2:

СМР

@RO, -(Rl)

414

021041

BGT

Ml

416

003001

М0:

MOV

@R1, @R2

418

011110

Ml:

SOB

R2, M2

420

077204

HALT

422

000000

Рисунок 33 – Алгоритм поиска наибольшего элемента массива

Рассмотрим программу (табл. 14) поиска наибольшего элемента массива с использованием авто­декрементной, косвенно-регистровой адресации и команды SOB. Алгоритм показан на рисунке 33. Распределение памяти:

Массив А (40) занимает ячейки с номера 500 по номер 539;

540 - ячейка памяти резуль­тата;

RO - РОН результата;

R1 = 539 - адрес ячейки по­следнего элемента массива А (40);

R2 = 40 - размерность мас­сива (количество элементов);

PC = 400 - начальное значе­ние PC.

В программе Команда 7 напи­сана с косвенно-регистровой ад­ресацией, команда 5 сочетает кос­венно-регистровую и автодекре­ментную адресации. В ней срав­ниваются значения ячеек теку­щего массива с адресом, меньшим на 2 байта.