Дата последнего обновления файла 23.10.2009

Описание машинных команд (продолжение 2)

MUL AB - умножение.

Описание: перемножает целые восьмибитовые беззнаковые числа, хранящиеся в аккумуляторе и регистре В. Старший байт 16-битового произведения помещается в регистр В, а младший байт - в регистр А.

Пример: MUL AB

Количество байт: 1

Количество циклов: 4

Действие команды: (PC) = (PC) + 1

(A) = Low((A)*(B))

(B) = High(A)*(B)

Машинный код:

1 0 1 0 0 1 0 0


NOP - нет операции

Описание: Кроме программного счетчика не изменяет ни одного регистра, на флаги не воздействует.

Пример: NOP

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

Машинный код:

0 0 0 0 0 0 0 0


ORL <байт приемник>,<байт источник> - "логическое ИЛИ" для байтовых переменных

Описание: выполняет операцию побитового "логического ИЛИ" между указанными переменными. Результат сохраняется в приемнике. Команда не воздействует на флаги.

Для команды ORL с аккумулятором в качестве байта назначения разрешены следующие режимы адресации байта - источника:

Пример: ORL A, R3

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

(A) = (A) V (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 1 0 0 1 r r r

Пример: ORL A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

(A) = (A) V ((Ri)), i=0,1

Машинный код:

0 1 0 0 0 1 1 i

Пример: ORL A, 30h

Количество байт: 2

Количество циклов: 1

Действие команды: (PC) = (PC) + 2

(A) = (A) V (direct)

Машинный код:

0 1 0 0 0 1 0 1

d d d d d d d d

Пример: ORL A, #100

Количество байт: 2

Количество циклов: 1

Действие команды: (PC) = (PC) + 2

(A) = (A) V (date 8)

Машинный код:

0 1 0 0 0 1 0 0

i i i i i i i i

Для команды ORL с произвольным адресом ячейки внутренней памяти данных в качестве байта назначения разрешены следующие режимы адресации байта - источника:

Пример: ORL 30h,A

Количество байт: 2

Количество циклов: 1

Действие команды: (PC) = (PC) + 2

(direct) = (A) V (direct)

Машинный код: 0 1 0 0 0 0 1 0

d d d d d d d d

Пример: ORL direct, #100

Количество байт: 3

Количество циклов: 2

Действие команды: (PC) = (PC) + 3

(direct) = (A) V (date 8)

Машинный код:

0 1 0 0 0 0 1 1

d d d d d d d d

i i i i i i i i

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


ORL C,<бит источника> - логическое ИЛИ битовых переменных.

Описание: Если бит источника равен 1, то происходит запись во флаг переноса единицы, в противном случае флаг переноса не изменяет текущего значения. На остальные флаги команда не воздействует.

Пример: ORL С, 20h

Количество байт: 2

Количество циклов: 2

Действие команды: (PC) = (PC) + 2

(C) = (C) V (bit)

Машинный код:

0 1 1 1 0 0 1 0

b b b b b b b b

Знак '/' перед операндом в языке ассемблера указывает на то, что в качестве значения используется логическое отрицание адресуемого бита, при этом сам бит источника не изменяется.

Пример: ORL С, /20h

Количество байт: 2

Количество циклов: 2

Действие команды: (PC) = (PC) + 2

(C) = (C) V not(bit)

Машинный код:

1 0 1 0 0 0 0 0

b b b b b b b b


РОР <direct> - чтение из стека.

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

Пример: POP 30h

Количество байт: 2

Количество циклов: 2

Действие команды: (PC) = (PC) + 2

(direct) = ((SP))

(SP) = (SP) - 1

Машинный код:

1 1 0 1 0 0 0 0

d d d d d d d d


PUSH <direct> - запись в стек.

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

Пример: PUSH 30h

Количество байт: 2

Количество циклов: 2

Действие команды: (PC) = (PC) + 2

((SP)) = (direct)

(SP) = (SP) + 1

Машинный код:

1 1 0 0 0 0 0 0

d d d d d d d d


RET - возврат из подпрограммы.

Описание: последовательно выгружает старший и младший байты счетчика команд из стека, уменьшая содержимое указателя стека на 2. Выполнение программы продолжается с нового, только что загруженного в счетчик команд адреса. Команда не воздействует на флаги.

Пример: RET

Количество байт: 1

Количество циклов: 2

Действие команды: (PC) = (PC) + 2

(PC15-8) = ((SP))

(SP) = (SP) - 1

(PC7-0) = ((SP))

SP) = (SP) - 1

Машинный код: 0 0 1 0 0 0 1 0=


RETI - возврат из подпрограммы обслуживания прерывания.

Описание: последовательно выгружает старший и младший байты счетчика команд из стека, уменьшая содержимое указателя стека на 2. Кроме того, команда восстанавливает состояние логики прерываний, разрешая обработку следующего прерывания того же уровня приоритета. Выполнение программы продолжается с того же адреса, что был в программном счетчике (PC) до начала обработки прерывания (следующий за командой, во время выполнения которой был обнаружен запрос на прерывание). Команда не воздействует на флаги и не восстанавливает состояние PSW, бывшее до обработки прерывания. Если к этому моменту обнаруживается новый запрос на прерывание, то до нового вызова подпрограммы обслуживания прерывания выполняется одна команда из основной программы.

Пример: RETI

Количество байт: 1

Количество циклов: 2

Действие команды: (PC) = (PC) + 2

(PC15-8) = ((SP))

(SP) = (SP) - 1

(PC7-0) = ((SP))

(SP) = (SP) - 1

Машинный код:

0 0 1 1 0 0 1 0


RL A - сдвиг содержимого аккумулятора влево.

Описание: сдвигает восемь бит аккумулятора на один бит влево, бит 7 засылается на место бита 0. Команда не воздействует на флаги.

Пример: RL A

Количество байт: 1

Количество циклов: 1

Действие команды: (An+1) = (An) n=0..6

(A0) = (A7)

Машинный код:

0 0 1 0 0 0 1 1


RLC A - сдвиг содержимого аккумулятора влево через флаг переноса.

Описание: сдвигает восемь бит аккумулятора и флаг переноса на один бит влево. Содержимое флага переноса помещается на место бита 0 аккумулятора, а содержимое бита 7 аккумулятора переписывается во флаг переноса. На остальные флаги команда не воздействует.

Пример: RLC A

Количество байт: 1

Количество циклов: 1

Действие команды: (An+1) = (An) n=0..6

(A0) = (C)

(C) = (A7)

Машинный код:

0 0 1 1 0 0 1 1


RR A - сдвиг содержимого аккумулятора вправо.

Описание: сдвигает восемь бит аккумулятора на один бит вправо, бит 0 засылается на место бита 7. Команда не воздействует на флаги.

Пример: RR A

Количество байт: 1

Количество циклов: 1

Действие команды: (An) = (An+1) n=0..6

(A7) = (A0)

Машинный код: 0 0 0 0 0 0 1 1


RRC A - сдвиг содержимого аккумулятора через флаг переноса.

Описание: сдвигает восемь бит аккумулятора и флаг переноса на один бит вправо. Содержимое флага переноса помещается на место бита 7 аккумулятора, а содержимое бита 0 аккумулятора переписывается во флаг переноса. На остальные флаги команда не воздействует.

Пример: RRC A

Количество байт: 1

Количество циклов: 1

Действие команды: (An) = (An+1) n=0..6

(A7) = (C)

(C) = (A0)

Машинный код:

0 0 0 1 0 0 1 1


SETB <bit> - установить бит.

Описание: устанавливает указанный бит в 1. Команда может воздействовать на флаг переноса или любой другой прямо адресуемый бит. На остальные флаги команда не воздействует.

Пример: SETB C

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

(C) = 1

Машинный код:

1 1 0 1 0 0 1 1

Пример: SETB 27

Количество байт: 2

Количество циклов: 1

Действие команды: (PC) = (PC) + 2

(bit) = 1

Машинный код:

1 1 0 1 0 0 1 0

b b b b b b b b


SJMP <rel8> - короткий переход

Описание: команда выполняет безусловный относительный короткий переход по указанному адресу. Адрес назначения вычисляется суммированием второго байта команды и программного счетчика предварительно увеличенного на два. Т.е. переход может осуществляться на метку, стоящую на 128 байт выше команды, следующей за SJMP и 127 байт ниже.

Пример: SJMP Label

Количество байт: 2

Количество циклов: 2

Действие команды: (PC) = + 2

(PC) = (PC) + rel8

Машинный код:

1 0 0 0 0 0 0 0

R e l A d r e s


SUBB A,<байт источник> - вычитание с заемом.

Описание: команда вычитает указанную переменную вместе с флагом переноса из содержимого аккумулятора, результат помещается в аккумулятор. SUBB устанавливает флаг переноса C, если требуется заем для 7 бита, и обнуляет его в противном случае. (Если флаг переноса C перед выполнением команды содержал 1, то перенос вычитается из аккумулятора, содержащего операнд источник). Флаг переноса C устанавливается, если требуется заем для 3 бита, и очищается в противном случае. Флаг переполнения OV устанавливается, если требуется заем для 7 бита, но не требуется для 6 или нужен заем для 6 бита, но не требуется для 7. Операнд источника допускает четыре режима адресации:

Пример: SUBB A, R7

Количество байт: 1

Количество циклов: 1

Действие команды: (PC)= (PC) + 1

(A) = (A) - (С) - (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

1 0 0 1 1 r r r

Пример: SUBB A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

(A) = (A) - (С) - ((Ri)) , i=0,1

Машинный код: 1 0 0 1 0 1 1 i

Пример: SUBB A, 30h

Количество байт: 2

Количество циклов: 1

Действие команды: (PC) = (PC) + 2

(A) = (A) - (C) - (direct)

Машинный код:

1 0 0 1 0 1 0 1

d d d d d d d d

Пример: SUBB A, #100

Количество байт: 2

Количество циклов: 1

Действие команды: (PC) = (PC) + 2

(A) = (A) - (C) - (date 8)

Машинный код:

1 0 0 1 0 1 0 0

i i i i i i i i


SWAP A - обмен тетрадами внутри аккумулятора.

Описание: команда осуществляет обмен между младшей (биты 0..3) и старшей (биты 4..7) тетрадами аккумулятора. (Тетрада это четырехбитная переменная). Команду можно интерпретировать как циклический сдвиг на четыре бита. Команда не воздействует на флаги.

Пример: SWAP A

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

(A3..A0) <=> (A7..A4)

Машинный код:

1 1 0 0 0 1 0 0


XCH A,<байт> - обмен содержимого аккумулятора с переменной байтом.

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

Допускается три режима адресации:

Пример: XCH A, R7

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

(A) <=> (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

1 1 0 0 1 r r r

Пример: XCH A, 30h

Количество байт: 2

Количество циклов: 1

Действие команды: (PC) = (PC) + 2

(A) <=> (direct)

Машинный код:

1 1 0 0 0 1 0 1

d d d d d d d d

Пример: XCH A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды: (PC)= (PC) + 1

(A) <=> ((Ri)) , i=0,1

Машинный код:

1 1 0 0 0 1 1 i


XCHD A, @Ri - обмен цифры.

Описание: команда осуществляет обмен между младшей (биты 0..3) тетрадой (тетрада это четырехбитная переменная) аккумулятора, где обычно хранится двоично-десятичная цифра с тетрадой ячейки внутреннего ОЗУ. Используется косвенно регистровая адресация. Старшие тетрады (биты 4..7) обоих операндов не изменяются. Команда не воздействует на флаги.

Пример: XCHD A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

(A3..A0) <=> ((Ri3..Ri0)) , i=0,1

Машинный код: 1 1 0 1 0 1 1 i


XRL <байт приемник>,<байт источник> - исключающее ИЛИ для переменных байтов.

Описание: выполняет операцию побитового "исключающее логического ИЛИ" между указанными переменными. Результат сохраняется в приемнике. Команда не воздействует на флаги.

Для команды XRL с аккумулятором в качестве байта назначения разрешены следующие режимы адресации байта - источника:

Пример: XRL A, R3

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

(A) = (A) xor (Rn) , n=0,1,2,3,4,5,6,7

Машинный код:

0 1 1 0 1 r r r

Пример: XRL A, @R0

Количество байт: 1

Количество циклов: 1

Действие команды: (PC) = (PC) + 1

(A) = (A) xor ((Ri)) , i=0,1

Машинный код: 0 1 1 0 0 1 1 i

Пример: XRL A, 30h

Количество байт: 2

Количество циклов: 1

Действие команды: (PC) = (PC) + 2

(A) = (A) xor (direct)

Машинный код:

0 1 1 0 0 1 0 1

d d d d d d d d

Пример: XRL A, #100

Количество байт: 2

Количество циклов: 1

Действие команды: (PC)= (PC) + 2

(A) = (A) xor (date 8)

Машинный код:

0 1 1 0 0 1 0 0

i i i i i i i i

Для команды XRL с произвольным адресом ячейки внутренней памяти данных в качестве байта назначения разрешены следующие режимы адресации байта - источника:

Пример: XRL 30h,A

Количество байт: 2

Количество циклов: 1

Действие команды: (PC) = (PC) + 2

(direct) = (A) xor (direct)

Машинный код:

0 1 1 0 0 0 1 0

d d d d d d d d

Пример: XRL direct, #100

Количество байт: 3

Количество циклов: 2

Действие команды: (PC) = (PC) + 3

(direct) = (A) xor (date 8)

Машинный код:

0 1 1 0 0 0 1 1

d d d d d d d d

i i i i i i i i

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


Понравился материал? Поделись с друзьями!


Литература:

  1. Боборыкин А.В., Липовецкий Г.П., и др. Однокристальные микроЭВМ М.: Бином 1994
  2. В.В. Сташин, А.В. Урусов, О.Ф. Мологонцева Проектирование цифровых устройств на однокристальных микроконтроллерах М.: Энергоатомиздат 1990
  3. Карасев Однокристальный микропроцессор семейства MCS-51 М.: 1995
  4. Бродин В.Б., Калинин А.В. Системы на микроконтроллерах и БИС программируемой логики М.: ЭКОМ 2001
  5. Микушин А.В. Сединин В.И. Однокристальный микроконтроллер семейства MCS-51 фирмы INTEL 8xC51GB Новосибирск: СибГУТИ, 2001
  6. Микушин А.В. Занимательно о микроконтроллерах. СПб, БХВ-Петербург, 2006.
  7. Микушин А.В., Сажнев А.М., Сединин В.И. Цифровые устройства и микропроцессоры. СПб, БХВ-Петербург, 2010.

Вместе со статьей "Архитектура микроконтроллеров MCS-51" читают:

Состав семейства MCS-51
http://digteh.ru/MCS51/tablms.php

Архитектура микроконтроллеров MCS-51
http://digteh.ru/MCS51/MCS_51.php

Система команд микроконтроллеров MCS-51
http://digteh.ru/MCS51/SysInstr.php

Устройство параллельных портов микроконтроллеров MCS-51
http://digteh.ru/MCS51/port.php

Построение памяти микроконтроллеров семейства MCS-51
http://digteh.ru/MCS51/pam_cntr.php

Устройство таймеров микроконтроллеров MCS-51
http://digteh.ru/MCS51/timers.php

Последовательный порт микроконтроллера 8051
http://digteh.ru/MCS51/PoslPort.php


Автор Микушин А. В. All rights reserved. 2001 ... 2023

Предыдущие версии сайта:
http://neic.nsk.su/~mavr
http://digital.sibsutis.ru/

Поиск по сайту сервисом Яндекс
Поиск по сайту сервисом ГУГЛ
Об авторе:
к.т.н., доц., Александр Владимирович Микушин

Кандидат технических наук, доцент кафедры САПР СибГУТИ. Выпускник факультета радиосвязи и радиовещания (1982) Новосибирского электротехнического института связи (НЭИС).

А.В.Микушин длительное время проработал ведущим инженером в научно исследовательском секторе НЭИС, конструкторско технологическом центре "Сигнал", Научно производственной фирме "Булат". В процессе этой деятельности он внёс вклад в разработку систем радионавигации, радиосвязи и транкинговой связи.

Научные исследования внедрены в аппаратуре радинавигационной системы Loran-C, комплексов мобильной и транкинговой связи "Сигнал-201", авиационной системы передачи данных "Орлан-СТД", отечественном развитии системы SmarTrunkII и радиостанций специального назначения.

А.В.Микушин является автором 130 научных и научно-методических работ, в том числе 21 монография и 26 учебников и учебных пособий.

Top.Mail.Ru

Яндекс.Метрика