Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование и отладка программных модулей для ОМК INTEL 8051 (К1816 ВЕ51).doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.2 Mб
Скачать

3.Система команд 8051

8051 обладает гибкой системой команд, ориентированной, главным образом, на реализацию контроллерных функций. Характеристики системы команд определяются форматами данных и команд.

Форматы данных. Тип представления данных: числовые, логические, битовые. Числовые данные могут быть представлены в двоичном и двоично-десятичном кодах в целочисленном формате. Обработка двоичных данных может выполняться в дополнительном коде. Длина формата байт, два байта, бит. В операциях обмена тетрадами используется дополнительное представление информации ‑ полубайтами (4 бита).

Форматы команд. Команды одноадресные, двухадресные, безадресные. Длина команды – байт, два байта, три байта. При обращении к РПД могут использоваться прямой регистровый, прямой, косвенный, непосредственный, стековый способы адресации. Внешняя память данных допускает применение только косвенной и индексной адресации. При работе с памятью команд возможно применение косвенного, индексного и относительного способов адресации.

Система команд МК51 содержит 111 базовых команд, которые удобно разделить по функциональному признаку на пять групп: команды передачи данных, арифметических операций, логических операций, передачи управления, операций с битами. Система команд приведена в приложении , где используются следующие обозначения:

#d ‑ непосредственный операнд;

ad ‑ адрес РПД;

аd16 ‑ адрес памяти команд или внешней памяти данных;

Rn ‑ регистр текущего банка;

Ri ‑ нулевой или первый регистр текущего банка

bit – прямой адрес бита,

rel ‑ 8-разрядное смещение в дополнительном коде для выполнения относительных переходов. Величина смещения позволяет передавать управление в пределах –128 - +127 байт относительно адреса следующей команды;

@ ‑ признак косвенной адресации;

Рассмотрим обобщенные характеристики основных команд.

К командам передачи данных (пересылок) относятся:

MOV – пересылка при работе с РПД;

MOVX – пересылка c внешней памятью данных (ВПД);

MOVC – пересылка c памятью команд;

MOV A, (Rn, ad, @Ri, #d);

MOV Rn, (A, ad, #d);

MOV ad, (Rn, А, @Ri, #d);

MOV (A, Rn, ad), #d;

MOV @Ri, (ad, Rn, #d);

MOV ad1, ad2;

MOV DPTR,#d16

Команды этой группы не модифицируют признаки результата за исключением команды загрузки PSW и пересылок, в которых приемником результата является аккумулятор А. В этом случае устанавливается бит паритета и аппаратно формируется признак равенства «0» – Z=1, который можно использовать для выполнения команд условного перехода JZ (JNZ).

XCH А, (Rn, ad, @Ri) ‑ обмен содержимым А и (Rn, @Ri, ad);

XCHD A, @Ri ‑ обмен содержимым младших тетрад байтовых операндов;

SWAP ‑ обмен содержимым тетрад в аккумуляторе;

PUSH ad – запись в стек;

POP ad – чтение из стека;

Недостатком этой группы является отсутствие команд типа MOV Rn1, Rn2 и MOV Rn, @Ri;

Обращение к внешней памяти команд ВПК и ВПД осуществляется через регистр-указатель DPTR. Обращение к регистру возможно с помощью команды MOV DPTR, #d16, старший (DPH) и младший (DPL) байты этого регистра доступны через зону РСФ.

MOVX A, @DPTR;

MOVX @DPTR, A;

MOVX @Ri, A;

MOVX A, @Ri ‑ странично-косвенный метод доступа: Смещение внутри страниц задает содержимое Ri, а номер страницы формируется на выходе порта P2. На основе этого способа можно организовать индексную адресацию.

Для чтения памяти команд используется:

MOVC A, @A+DPTR; (A):=@(A+DPTR), где в А находится целое без знаковое смещение.

Для верификации памяти команда предусмотрена:

MOVC A, @A+PC; {PC:=PC+1; (A):=((A+PC))}, где РС – программный счетчик.

Арифметические операции:

ADD A, (Rn, ad, @Ri, #d) – сложение;

ADDC A, (Rn, ad, @Ri, #d) ‑ сложение с переносом;

DA А ‑ команда двоично-десятичной коррекции при сложении;

SUBB A, (Rn, ad, @Ri, #d) ‑ вычитание с заёмом. Это единственная команда вычитания. Перед её использованием необходимо контролировать значение бита С.

Команды сложения, вычитания формируют флаги С, АС, OV, P.

INC(DEC) (A, Rn, @Ri, ad) ‑ инкремент (декремент);

INC DPTR.

Если необходим декремент, то его реализация возможна только с использованием команд декремента регистров DPL(младший байт DPTR), и DPH (старший байт DPTR).

Команды инкремента и декремента флаги не устанавливают.

MUL AB – беззнаковое умножение 8x8 (B)(A):=(A)*(B);

DIV AB – беззнаковое деление 8/8 (A)(B):=A/B.

При умножении старший байт результата записывается в регистр-расширитель В, а младший ‑ в А. Если содержимое А>256, то формируется флаг арифметического переполнения OV. Бит С всегда сбрасывается.

При делении частное записывается в А, а остаток ‑ в В. Флаги переноса C и арифметического переполнения OV сбрасываются. При делении на 0 устанавливается флаг OV.

Логические команды:

ANL A, (Rn, @Ri, #d, ad); ‑ конъюнкция;

ANL ad, (A, #d);

Структура команд ORL (дизъюнкция), XRL (сумма по модулю 2) аналогична предыдущей.

CLR A ‑ очистка аккумулятора;

CPL A ‑ инвертирование аккумулятора;

В этих логических командах признаки не формируются, за исключением бита паритета P, если результат операции записывается в аккумулятор.

RR(RL) A ‑ правый(левый) циклический сдвиг;

RRC(RLC) A ‑ правый(левый) циклический сдвиг через бит С;

При сдвигах формируются признаки P и C.

Битовые команды:

При выполнении битовых команд бит С выполняет функции аккумулятора.

Команды пересылки бит:

MOV C, bit;

MOV bit, C;

SETB bit(C) ‑ установка бита С (или прямоадресуемого бита);

CLR bit (C) ‑ очистка бита С (или прямоадресуемого бита);

CPL C(bit) ‑ инверсия бита С (или прямоадресуемого бита);

ANL C, bit ‑ конъюнкция;

ORL C, bit – дизъюнкция;

ANL C, /bit

ORL C, /bit

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

При работе с битами используется только прямая адресация.

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

Переход по всему адресному пространству обеспечивает длинный безусловный переход LJMP ad16 и обращение к подпрограмме LCALL ad16.

Переход в пределах памяти программ размером 2048 байт выполняется с помощью безусловного абсолютного перехода AJMP ad11 и обращения к подпрограмме ACALL ad11. Такие команды содержат только 11 младших бит адреса перехода и имеют длину два байта.

Команда JMP @A+DPTR использует косвенную адресацию, при которой адрес перехода определяется суммированием содержимого DPTR и беззнакового смещения, находящегося в А. Эта команда позволяет выполнять множественное ветвление по адресу неизвестному в момент написания программы, модифицируя содержимое А или DPTR.

Команда SJMP rel выполняет безусловный, короткий, относительный переход.

При программировании на ассемблере достаточно указать только тип перехода JMP или CALL. В зависимости от длины перехода конкретная команда безусловного перехода выбирается компилятором автоматически.

RET ‑ возврат из подпрограммы;

RETI ‑ возврат из подпрограммы обработки прерывания.

Условные переходы представлены двумя группами команд байтовыми и битовыми. К байтовым командам относятся:

JZ(JNZ) rel – переход при нулевом (ненулевом) результате в А. Может быть реализован после любой операции, результат которой записывается в аккумулятор;

JC(JNC) rel – переход по значению бита С;

DJNZ Rn(ad), rel. Выполняется декремент содержимого регистра или ячейки РПД. Если результат операции не равен «0» ‑ выполняется переход, иначе ‑ следующая команда.

CJNE A, (ad, #d), rel;

CJNE (Rn, @Ri), #d, rel ‑ Выполняется вычитание из первого операнда второго; если результат операции не равен нулю ‑ выполняется переход, иначе ‑ следующая команда. Содержимое регистров, участвующих в операциях, не изменяется.

При сравнении формируется бит С = 0, если первый операнд больше второго и С = 1 при противоположном результате.

Битовые переходы выполняются по значению бита, адрес которого указан в формате команды JB(JNB) bit, rel.

В команде JBC bit, rel переход выполняется при единичном значении бита, адрес которого указан в команде, после чего бит сбрасывается в «0». Эта команда удобна при реализации семафоров.

Семафор представляет собой флаг, информирующий о состоянии связанного с ним ресурса: «1» – свободен, «0» – занят. Захват ресурса допускается только в том случае, если он свободен. Затем семафор должен быть переведен в состояние «Занято». Под ресурсом понимается всякий объект, распределяемый системой.

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

WAIT:

JBC bit, OK; Проверка флага

SJMP WAIT; Ресурс занят

OK:

;Ресурс свободен

При программировании в объектном коде адрес перехода вычисляется как:

rel := адрес перехода ‑ адрес команды перехода + длина команды перехода;

В ОМК отсутствуют команды ввода-вывода. Обращение к внешним устройствам осуществляется как к ячейкам внешней памяти данных. Возможные форматы команд приведены на рисунке 8.