Булевы операции
Микросхемы MCS-51 содержат в своем составе “булевый” процессор (табл. 3).
Таблица 3 – Булевы операции
|
Описание
|
CLR С
|
(С) <- 0
|
CLR bit
|
(bit) <- 0
|
|
(С) <- 1
|
SETB bit
|
(bit) <- 1
|
CPL С
|
(С) <- NOT(С)
|
CPL bit
|
(bit) <- NOT (bit)
|
ANL С, bit
|
(С )<- (C) /\ (bit)
|
ANL С, /bit
|
(С) <- (C) /\ NOT(bit)
|
ORL С, bit
|
(С) <- (C) \/ (bit)
|
ORL С, /bit
|
(С) <- (C) \/ NOT(bit)
|
MOV С, bit
|
(С) <- (bit)
|
MOV bit, C
|
(bit) <- (C)
|
“ИЛИ”. Все указанные биты доступны в режиме прямой адресации.
Бит переноса CF в PSW используется как 1-битный аккумулятор булевого процессора.
байт, прибавляемый к программному счетчику PC в случае выполнения условия перехода. Границы таких переходов лежат в пределах между -128 и +127 относительно первого байта, следующего за инструкцией. В PSW отсутствует флажок нуля, поэтому инструкции JZ и JNZ проверяют условие “равно нулю” тестированием данных в аккумуляторе.
Мнемокод
|
Описание
|
|
Длинный безусловный переход по всей памяти
|
AJMP ad11
|
Безусловный переход в пределах страницы 2 кбайт
|
SJMP rel
|
Безусловный переход в пределах страницы 256 байт
|
|
Безусловный переход по косвенному адресу
|
JZ rel
|
Переход, если нуль
|
|
Переход, если не нуль
|
JC rel
|
Переход, если бит переноса установлен
|
|
|
JB bit, rel
|
Переход, если бит установлен
|
JNB bit, rel
|
|
JBC bit, rel
|
|
DJMZ Rn, rel
|
Команда цикла
|
DJNZ ad, rel
|
Команда цикла
|
|
Сравнение аккумулятора с байтом и переход,
если не равно
|
|
Сравнение аккумулятора с константой и переход, если не равно
|
CJNE: Rn, #d, rel
|
Сравнение регистра с константой и переход,
если не равно
|
CJNE: @Ri, #d, rel
|
Сравнение байта памяти с константой и переход, если не равно
|
|
Длинный вызов подпрограммы во всей памяти
|
ACALL ad11
|
Вызов подпрограммы в пределах страницы 2 кбайт
|
RET
|
Возврат подпрограммы
|
RETI
|
|
NOP
|
Пустая операция
|
Существует три вида команды безусловного перехода – SJMP, LJMP, AJMP, различающиеся форматом адреса назначения. Инструкция SJMP кодирует адрес как относительное смещение и занимает 2 байта. Дальность перехода ограничена диапазоном от -128 до +127 байт относительно инструкции, следующей за SJMP. В инструкции LJMP используется адрес назначения в виде 16-битной константы. Длина команды составляет 3 байта. Адрес назначения может располагаться в любом месте памяти программ. Команда AJMP использует 11-битную константу адреса. Команда состоит из 2 байт. При выполнении этой инструкции младшие 11 бит адресного счетчика замещаются 11-битным адресом из команды. 5 старших бит PC остаются неизменными. Т. е., переход может производиться внутри двухкилобайтного блока, в котором располагается инструкция, следующая за командой AJMP.
Существует два вида команды вызовы подпрограммы – LCALL и ACALL. Инструкция LCALL использует 16-битный адрес вызываемой подпрограммы. В данном случае подпрограмма может быть расположена в любом месте памяти программ. Инструкция ACALL использует 11-битный адрес подпрограммы. В этом случае вызываемая подпрограмма должна быть расположена в одном двухкилобайтном блоке с инструкцией, следующей за ACALL. Оба варианта команды кладут на стек адрес следующей команды и загружают в PC соответствующее новое значение.
Подпрограмма завершается инструкцией RET, позволяющей вернуться на инструкцию, следующую за командой CALL. Эта инструкция снимает со стека адрес возврата и загружает его в PC. Инструкция RETI используется для возврата из подпрограмм обработки прерываний. Единственное отличие RETI от RET состоит в том, что RETI информирует систему о том, что обработка прерывания завершилась. Если в момент выполнения RETI нет других прерываний, то она идентична RET.
Инструкция DJNZ предназначена для управления циклами. Для выполнения цикла N раз надо загрузить в счетчик байт со значением N и закрыть тело цикла командой DJNZ, указывающей на начало цикла.
CF устанавливается в “1”.
|