Способы адресации операндов.

При определении способа адресации операндов в команде необходимо учитывать, что адресация для каждого операнда команды своя. В общем случае адресация источника и приёмника могут не совпадать.

Неявная адресация При неявной адресации регистр источник или регистр приёмник подразумевается в самом коде операции. Например:

03 RR A ;Сдвинуть содержимое аккумулятора вправо

D4 DA A ;Произвести десятичную коррекцию результата суммирования

E8 MOV A, R0 ;В первом операнде использована неявная адресация, а во втором - регистровая

Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров, а также для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR, и к флагу переноса С. Номер регистра записывается в трех младших битах команды. Например:

F8 MOV R5, A ;в первом операнде использована регистровая адресация, а во втором - неявная

Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (адреса 0:127) и к регистрам специального назначения (адреса 128:256). Адрес ячейки памяти помещается во второй байт команды. Например:

E520 MOV A, 20h ;во втором операнде использована прямая байтовая адресация, а в первом – неявная

8D15 MOV 15h,R6 ;в первом операнде использована прямая байтовая адресация, а во втором – регистровая

Прямая битовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20Н-2FH, и к отдельно адресуемым битам регистров специального назначения. Например:

D220 SETB 20h ;использована прямая битовая адресация

C215 CLR 15h ;использована прямая битовая адресация

Косвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных. В качестве регистров-указателей адреса используются регистры R0, R1 выбранного банка регистров. Например:

E6 MOV A,@R0 ;В первом операнде использована неявная адресация, а во втором - косвенно-регистровая

F7 MOV @R1,A ;В первом операнде использована косвенно-регистровая адресация, а во втором - неявная

Косвенно - регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров- указателей R0 и R1 (рабочего банка рабочих регистров) выбирается ячейка из блока 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2. Например:

E2 MOVX A,@R0 ;В первом операнде использована неявная адресация, а во втором - косвенно-регистровая

F3 MOVX @R1,A ;В первом операнде использована косвенно-регистровая адресация, а во втором - неявная

Если в качестве регистра - указателя используется 16 - разрядный указатель данных (DPTR), то можно выбрать любую ячейку внешней памяти данных объемом до 64 Кбайт. (В некоторых моделях микроконтроллеров семейства MSC-51 таким образом можно обращаться к внутренней памяти данных объемом более 256 байт).

E0 MOVX A,DPTR;В первом операнде использована неявная адресация, а во втором - косвенно-регистровая

F0 MOVX DPTR,A;В первом операнде использована косвенно-регистровая адресация, а во втором - неявная

Косвенно-регистровая адресация по сумме базового и индексного регистра (содержимое аккумулятора А) упрощает просмотр таблиц, записанных в памяти программ. Любой байт из таблицы может быть выбран по адресу, определяемому суммой содержимого DPTRили РС и содержимого А, например:

83 MOV A, @A+PC ;В первом операнде использована неявная адресация, а во втором - косвенно-регистровая

93 MOV A, @A+DPTR ;В первом операнде использована неявная адресация, а во втором - косвенно-регистровая.

Непосредственная адресация позволяет выбрать из адресного пространства памяти программ константы, явно указанные в команде, например:

7414 MOV A, #14h ;В первом операнде использована неявная адресация, а во втором - непосредственная

902048 MOV DPTR, #2048h ;В первом операнде использована неявная адресация, а во втором - непосредственная