MOV 15, 25 ;Скопировать содержимое 25-ой ячейки в 15-ю ячейку
Таблицы символов (кодов), записанные в ПЗУ программы, могут быть скопированы в аккумулятор с помощью команд передачи данных с косвенной адресацией, например:
MOVC A, @A+DPT ;Скопировать символ в аккумулятор
Ячейка адресного пространства 64-килобайтного внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адресации через регистр-указатель данных DPTR, например:
MOVX A, @DPTR ;Скопировать число из внешней ячейки памяти с адресом, хранящимся в DPTR, в аккумулятор
Содержимое аккумулятора может быть обменено с содержимым рабочих регистров выбранного банка, например:
ХСН A, R0.
Битовые команды
Каждый бит из битового пространства внутренней памяти может быть установлен в 1, сброшен в 0 или инвертирован.
Эти операции можно выполнить при помощи следующих команд:
- установить бит (записать логическую единицу) - SETB;
- сбросить бит (записать логический ноль) - CLR;
- проинвертировать значение бита (изменить на противоположное) - CPL;
- записать бит во флаг переноса или считать из флага переноса - MOV.
По значениям бита могут быть реализованы переходы:
- если бит установлен (содержит логическую 1) - JB;
- если бит не установлен (содержит логический 0) - JNB;
- переход, если бит установлен со сбросом этого бита после выполнения команды (запись в этот бит 0) - JBC.
Между любым битом из битового пространства внутренней памяти и флагом переноса могут быть произведены логические операции "И" или "ИЛИ".
- "И" - ANL
- "ИЛИ" - ORL
Команды ветвления и передачи управления
Команды ветвления позволяют реализовывать условные операторы и операторы циклов. В микроконтроллерах семейства MCS-51 доступны следующие команды:
- безусловный переход: LJMP, AJMP, SJMP;
- вызов и возврат из подпрограммы: LCALL, ACALL, RET, RETI;
- переход в зависимости от результата проверки содержимого аккумулятора: JZ, JNZ, CJNE, JMP;
- переход в зависимости от значения флага переноса С: JC, JNC;
- переход в зависимости от значения любого бита в битовом пространстве: JB, JNB, JBC.
Команды 16-разрядных безусловных переходов и вызовов подпрограмм позволяют осуществить переход в любую точку адресного пространства памяти программ объемом до 64 Кбайт. Примеры команд:
LJMP Metka ;Переход к команде, расположенной по адресу обозначенному меткой 'Metka'
LCALL Podprogramma ;Вызов подпрограммы по адресу, обозначенному меткой 'Podprogramma'
Команды II-разрядных переходов и вызовов подпрограмм позволяют сократить объем программы, но при этом обеспечивают переходы только внутри сегмента программной памяти размером 2 Кбайт. Эти команды принципиально могут приводить к необнаруживаемым транслятором ошибкам, когда программный модуль размещается на двух соседних двух килобайтовых сегментах памяти.
AJMP Metka ;Переход к команде, расположенной по адресу обозначенному меткой 'Metka'
ACALL Podprogramma ;Вызов подпрограммы по адресу, обозначенному меткой 'Podprogramma'
В системе команд микроконтроллеров семейства MCS-51 имеются команды условных и безусловных переходов относительно начального адреса следующей команды в пределах от (PC)-127 до (PC)+127. Примеры команд:
SJMP Metka ;Переход к команде, расположенной по адресу, обозначенному меткой 'Metka'
JB P3.5, TstNxtUsl ;Если на выводе 6 порта РЗ нулевой потенциал,
ACALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой 'Podprogramma'
CJNE A, #5, TstNxtUsl ;Если в аккумуляторе содержится число 5,
ACALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой 'Podprogramma'
Команды условного перехода в зависимости от результата анализа содержимого аккумулятора или значения флага переноса С могут быть использованы для реализации проверки различных условий. При этом содержимое не изменяется, т. е. если требуется произвести несколько проверок одной и той же переменной, то повторно заносить значение этой переменной в аккумулятор не нужно. Например:
MOV А, 34 ;Если в переменной, хранящейся в ячейке внутренней
JNB ACC_7, TstEQ5 ; памяти с адресом 34, число меньше нуля,
CALL Podprogramma ;то вызвать подпрограмму, обозначенную меткой 'Podprogramma'

Косвенный переход JMP @A+DPTR в системе команд микроконтроллеров семейства MCS-51 обеспечивает ветвление программы по содержимому аккумулятора А. Это позволяет реализовывать операцию перехода по заданному коду, эквивалентную оператору case в языке программирования Pascal, но намного быстрее (за два машинных цикла). Использование в этой команде указателя данных DPTR позволяет размещать таблицу переходов в любом месте памяти программ. Пример реализации команды выбора варианта:

Способы адресации операндов
При определении способа адресации операндов в команде необходимо учитывать, что виды адресации для каждого операнда команды (источника или приемника) могут не совпадать.
Неявная адресация. При неявной адресации регистр-источник или регистр-приемник подразумевается в самом коде операции. Например:
03 RR А ;Сдвинуть содержимое аккумулятора вправо
D4 DA А ;Произвести десятичную коррекцию результата суммирования
Е8 MOV A, R0 ;В первом операнде использована неявная адресация, а во втором - регистровая
Регистровая адресация используется для обращения к восьми рабочим регистрам выбранного банка рабочих регистров, а также для обращения к регистрам А, В, АВ (сдвоенному регистру), DPTR и к флагу переноса С. Номер регистра записывается в трех младших битах команды. Например:
F8 MOV R0,А ;в первом операнде использована регистровая адресация, а во втором - неявная
Прямая байтовая адресация используется для обращения к ячейкам внутренней памяти (ОЗУ) данных (адреса 0:127) и к регистрам специального назначения (адреса 128…256). Адрес ячейки памяти помещается во второй байт команды. Например:
Е520 MOV A,20h ;во втором операнде использована прямая байтовая адресация, а в первом - неявная
8D15 MOV 15h,R6 ;в первом операнде использована прямая байтовая адресация, а во втором - регистровая
Прямая битовая адресация используется для обращения к отдельно адресуемым 128 битам, расположенным в ячейках с адресами 20Н-2FH, и к отдельно адресуемым битам регистров специального назначения. Например:
D220 SETB 20h ;использована прямая битовая адресация
С215 CLR 15H ;использована прямая битовая адресация
Косвенно-регистровая адресация используется для обращения к ячейкам внутреннего ОЗУ данных. В качестве регистров-указателей используются регистры R0, R1 выбранного банка регистров. Например:
Е6 MOV A,@R0 ;B первом операнде использована неявная адресация, а во втором - косвенно-регистровая
F7 MOV @R1,A ;B первом операнде использована косвенно-регистровая адресация, а во втором - неявная
Косвенно-регистровая адресация используется также для обращения к внешней памяти данных. В этом случае с помощью регистров-указателей R0 и R1 (рабочего банка рабочих регистров) выбирается ячейка из блока 256 байт внешней памяти данных. Номер блока предварительно задается содержимым порта Р2.
Е2 MOVX A,@R0 ;B первом операнде использована неявная адресация, а во втором - косвенно-регистровая
F3 MOVX @R1,A ;B первом операнде использована косвенно-регистровая адресация, а во втором - неявная
Если в качестве регистра-указателя используется 16-разрядный указатель данных (DPTR), то можно выбрать любую ячейку внешней памяти данных объемом до 64 Кбайт. (В некоторых моделях микроконтроллеров семейства MSC-51 таким образом можно обращаться к внутренней памяти данных объемом более 256 байт).
Е0 MOVX A,DPTR ;B первом операнде использована неявная адресация, а во втором - косвенно-регистровая
F0 MOVX DPTR,A ;B первом операнде использована косвенно-регистровая адресация, а во втором - неявная