Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст мет_ КУРСОВОЕ_стр.doc
Скачиваний:
8
Добавлен:
20.08.2019
Размер:
390.14 Кб
Скачать

Директивы (псевдокоманды ассемблера)

Ассемблирующая программа транслирует исходную программу в объектные коды. Хотя транслирующая программа берет на себя многие рутинные задачи программиста, такие как присвоение действительных адресов, преобразование чисел, присвоение действительных значений символьным переменным и т.п., программист все же должен указать ей некоторые параметры: начальный адрес прикладной программы, конец ассемблирующей программы, форматы данных и т.д. Всю эту информацию программист вставляет в исходный текст своей прикладной программы в виде директив ассемблера, которые только управляют процессом трансляции и не преобразуются в коды объектной программы.

Псевдокоманда ORG 10H задает ассемблеру адрес ячейки памяти (10H), в которой должна быть расположена следующая за ней команда прикладной программы.

Псевдокомандой EGU можно любому символическому имени, используемому в программе, поставить в соответствие определенный операнд. Например запись:

MOD EGU 20

приводит к тому, что в процессе ассемблирования всюду, где встретится символическое имя MOD, оно будет заменено числом 20.

Символические имена операндов, переопределяемых в процессе исполнения программы, определяются псевдокомандой SET:

ALFA SET 3

…..

…..

ALFA SET ALFA+1

Ассемблер MSC 51 позволяет определить символическое имя как адрес внутренних (псевдокоманда DATA), внешних (XDATA) данных или адрес бита (псевдокоманда BIT). Например, директива

FLAG BIT 25H.3

определяет символическое имя FLAG как третий вит ячейки ОЗУ с адресом 25H.

Псевдокоманда DB обеспечивает занесение в память программ микроконтроллера константы, представляющей собой байт.

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

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

В соответствии с форматом команд для представления их объектных кодов отводятся одна, две или три ячейки памяти программ. В первой ячейке располагается код операции, во второй и третьей – непосредственный операнд, адрес прямоадресуемого операнда или смещение (для команд передачи управления). Для команд LCALL и LJMP во втором и третьем байтах объектного кода указывается адрес передачи управления (во втором старшая часть, в третьем – младшая).

Общие сведения о системе команд микроконтроллера msc 51

Система команд микроконтроллера MSC 51 содержит 111 базовых команд, которые по функциональному признаку разделяются на пять групп: команды передачи данных, арифметических операций, логических операций, передачи управления и операций с битами. Большинство команд (94) имеет формат один или два байта и выполняются за один или два машинных цикла (при тактовой частоте 12 МГц длительность машинного цикла составляет 1 мкс).

Команды передачи данных представлены в табл. 9.

Таблица 9

НАЗВАНИЕ КОМАНДЫ

МНЕМОНИКА

ОПЕРАЦИЯ

Пересылка в аккумулятор из регистра (n=0...7)

MOV А,Rn

(А) ← (Rn)

Пересылка в аккумулятор прямоадресуемого байта

MOV A,ad

(А) ← (ad)

Пересылка в аккумулятор байта из внут. ОЗУ (i=0, 1)

MOV A,@Ri

(A) ← (( Ri ))

Загрузка в аккумулятор константы

MOV A,#data8

(А) ← #data8

Пересылка в регистр из аккумулятора

MOV Rn,А

(Rn) ← (А)

Пересылка в регистр прямоадресуемого байта

MOV Rn,аd

(Rn) ← (ad)

Загрузка в регистр константы

MOV Rn,#dаtа8

(Rn) ← #data8

Пересылка по прямому адресу аккумулятора

MOV ad,A

(ad) ← (А)

Пересылка по прямому адресу регистра

MOV аd,Rn

(ad) ← (Rn)

Пересылка прямоадресуемого байта по прямому адресу

MOV add,ads

(add) ← (ads)

Пересылка байта из внут. ОЗУ по прямому адресу

MOV ad,@Ri

(ad) ← (( Ri ))

Пересылка по прямому адресу константы

MOV ad,#data8

(ad) ← #data8

Пересылка во внут. ОЗУ из аккумулятора

MOV @Ri,A

(( Ri )) ← (А)

Пересылка во внут. ОЗУ прямоадресуемого байта

MOV @Ri,ad

(( Ri )) ← (ad)

Пересылка во внут. ОЗУ константы

MOV @Ri,#data8

(( Ri )) ← #data8

Загрузка указателя данных

MOV DPТR,#data16

(DPТR) ← #data16

Пересылка в аккумулятор байта из памяти программ

MOVC A,@A+DPТR

(А) ← ((А) + (DPТR))

Пересылка в аккумулятор байта из памяти программ

MOVC А,@А+РС

(РС)←(РС) + 1; (А)←((А) +(РС))

Пересылка в аккумулятор байта из внеш. ОЗУ

MOVX A,@Ri

(А) ← (( Ri ))

Пересылка в аккумулятор байта из расширенного внеш.ОЗУ

MOVX A,@DPТR

(А) ← ((DPТR))

Пересылка во внеш. ОЗУ из аккумулятора

MOVX @Ri,A

(( Ri )) ← (А)

Пересылка в расширенное внеш. ОЗУ из аккумулятора

MOVX @DPТR,A

((DPТR)) ← (А)

Загрузка в стек

PUSH ad

(SP) ← (SP) + 1;

((SP)) ← (ad)

Извлечение из стека

РОР ad

(ad) ← ((SP));

(SP) ← (SP) - 1

Обмен аккумулятора с регистром

ХСН A,Rn

(А) ↔ (Rn)

Обмен аккумулятора с прямоадресуемым байтом

ХСН ,ad

(А) ↔ (ad)

Обмен аккумулятора с байтом из внут. ОЗУ

ХСН A,@Ri

(А) ↔ (( Ri ))

Обмен мл. тетрады аккумулятора с мл. тетрадой байта внут. ОЗУ

ХСНD A,@Ri

(А0...3) ↔ ((Ri0...3))

В табл.9 используются следующие обозначения:

А – аккумулятор;

Ri – адресный регистр текущего банка (i = 0 или 1);

Rn – регистр общего назначения (РОН) текущего банка; n = 0 ÷ 7;

PC – счетчик команд;

DPTR – регистр-указатель данных;

ad – адрес или мнемоническое обозначение 8-битного операнда (ячейка ОЗУ, регистры специальных функций);

add – адрес или мнемоническое обозначение 8-битного операнда-приемника данных (ячейка ОЗУ, регистры специальных функций);

ads – адрес или мнемоническое обозначении 8-битного операнда-источника данных (ячейка ОЗУ, регистры специальных функций);

#data8 – 8-битное число (константа);

#data16 – 16-битное число (константа);

SP – указатель стека;

@ – префикс косвенной адресации;

Примечание к табл. 9. Регистры специальных функций (в том числе и порты ввода-вывода) адресуются только прямым способом. Байты памяти (ОЗУ и ПЗУ) адресуются также и косвенным способом через адресные регистры R0, R1, DPTR и PC.

В табл. 9 не приведены сведения о кодах операций, количестве байтов и циклов каждой команды.

Символическое описание выполняемой команды приведено в 3 столбце табл.9. Обозначение операнда в одинарных скобках указывает на содержимое ячейки, адрес которой указан в скобках, а стрелка – направление пересылки данных. Обозначение операнда в двойных скобках указывает на ячейку, в которой в свою очередь содержится адрес ячейки с данными, подлежащими пересылке (косвенная адресация).

Арифметические команды представлены в табл. 10.

Таблица 10

НАЗВАНИЕ КОМАНДЫ

МНЕМОНИКА

ОПЕРАЦИЯ

Сложение аккумулятора с регистром (n=0...7)

АDD A,Rn

(А) ← (А) + (Rn)

Сложение аккумулятора с прямо адресуемым байтом

АDD A,ad

(А) ← (А) + (ad)

Сложение аккумулятора с байтом из внут. ОЗУ (i = 0, 1)

АDD A,@Ri

(А) ← (А) + (( Ri ))

Сложение аккумулятора с константой

АDD A,#data8

(А) ← (А) + #data8

Сложение аккумулятора с регистром и переносом

АDDC A,Rn

(А) ← (А) + (Rn) + (C)

Сложение аккумулятора с прямоадресуемым байтом и переносом

АDDC A,ad

(А) ← (А) + (ad) + (C)

Сложение аккумулятора с байтом из внут. ОЗУ и переносом

АDDC A,@Ri

(А) ← (А) + (( Ri )) + (C)

Сложение аккумулятора с константой и переносом

АDDC A,#data8

(А) ← (А) + #data8 + (C)

Десятичная коррекция аккумулятора

DА А

Если (А0 -3)>9 V ((C) = 1), то (А0-3) ← (А0-3)+6. Затем

если (А4-7)>9 V ((C) = 1), то (А4-7) ← (А4-7)+6

Вычитание из аккумулятора регистра и заёма

SUBB A,Rn

(А) ← (А) - (Rn) - (C)

Вычитание из аккумулятора прямоадресуемого байта и заёма

SUBB A,ad

(А) ← (А) - (ad) - (C)

Вычитание из аккумулятора байта из внут. ОЗУ и заёма

SUBB A,@Ri

(А) ← (А) - (( Ri )) - (C)

Вычитание из аккумулятора константы и заёма

SUBB A,#data8

(А) ← (А) - #data8 - (C)

Инкремент аккумулятора

INC А

(А) ← (А) + 1

Инкремент регистра

INC Rn

(Rn) ← (Rn) + 1

Инкремент прямоадресуемого байта

INC ad

(ad) ← (ad) + 1

Инкремент байта из внут. ОЗУ

INC @Ri

(( Ri )) ← (( Ri )) + 1

Инкремент указателя данных

INC DPTR

(DPTR) ← (DPTR) + 1

Декремент аккумулятора

DЕС А

(А) ← (А) - 1

Декремент регистра

DЕС Rn

(Rn) ← (Rn) - 1

Декремент прямоадресуемого байта

DЕС ad

(ad) ← (ad) - 1

Декремент байта из внут. ОЗУ

DЕС @Ri

(( Ri )) ← (( Ri )) - 1

Умножение аккумулятора и регистра В

MUL AB

(В)(А) ← (А) * (В)

Деление аккумулятора на регистр В

DIV AB

(А),(В) ← (А) / (В)

Обозначения в табл.10: V – логическое ИЛИ.

Приведенные команды не требуют пояснения за исключением одной – команды десятичной коррекции аккумулятора (DА А). Эта команда используется только при сложении двух двоично-десятичных[ чисел, хранящихся в аккумуляторе и другой ячейке памяти. Команда корректирует предшествующую ей операцию сложения ADD или ADDC.

Логические команды представлены в табл. 11.

Таблица 11

НАЗВАНИЕ КОМАНДЫ

МНЕМОНИКА

ОПЕРАЦИЯ

Логическое И аккумулятора и регистра (n=0...7)

ANL A,Rn

(А) ← (А) ^ (Rn)

Логическое И аккумулятора и прямоадресуемого байта

ANL A,ad

(А) ← (А) ^ (ad)

Логическое И аккумулятора c байтoм из внут. ОЗУ (i = 0,1)

ANL A,@Ri

(А) ← (А) ^ (( Ri ))

Логическое И аккумулятора и константы

ANL A,#data8

(А) ← (А) ^ #data8

Логическое И прямоадресуемого байта и аккумулятора

ANL ad,A

(ad) ← (ad) ^ (А)

Логическое И прямоадресуемого байта и константы

ANL ad,#data8

(ad) ← (ad) ^ #data8

Логическое ИЛИ аккумулятора и регистра (n = 0...7)

ORL A,Rn

(А) ← (А) V (Rn)

Логическое ИЛИ аккумулятора и прямоадресуемого байта

ORL A,ad

(А) ← (А) V. (ad)

Логическое ИЛИ аккумулятора с байтом из внут. ОЗУ (i = 0, 1)

ORL A,@Ri

(А) ← (А) V. (( Ri ))

Логическое ИЛИ аккумулятора и константы

ORL A,#data8

(А) ← (А) V #data8

Логическое ИЛИ прямоадресуемого байта и аккумулятора

ORL ad,A

(ad) ← (ad) V (А)

Логическое ИЛИ прямоадресуемого байта и константы

ORL ad,#data8

(ad) ← (ad) V #data8

Исключающее ИЛИ аккумулятора и регистра (n = 0...7)

XRL A,Rn

(А) ← (А) ИЛИ искл. (Rn)

Исключающее ИЛИ аккумулятора и прямоадресуемого байта

XRL A,ad

(А) ← (А) ИЛИ искл. (ad)

Исключающее ИЛИ аккумулятoра c байтoм из внут. ОЗУ (i = 0,1)

XRL A,@Ri

(А) ← (А) ИЛИ искл. (( Ri ))

Исключающее ИЛИ аккумулятора и константы

XRL A,#data8

(А) ← (А) ИЛИ искл. #data8

Исключающее ИЛИ прямоадресуемого байта и аккумулятора

XRL ad,A

(ad) ← (ad) ИЛИ искл. (А)

Исключающее ИЛИ прямоадресуемого байта и константы

XRL ad,#data8

(ad) ← (ad) ИЛИ искл. #data8

Сброс аккумулятoра

CLR A

(А) ← 0

Инверсия аккумулятора

CPL A

(А) ← (инв. А)

Сдвиг аккумулятора влево циклический

RL A

(А.n+1) ← (А.n), n=0-6;

(А.0) ← (А.7)

Сдвиг аккумулятора влево через перенос

RLC A

(А.n+1)← (А.n), n=0-6; (А.0)←(С); (С)←(А.7)

Сдвиг аккумулятора вправо циклический

RR A

(А.n) ← (А.n+1), n=0-6;

(А.7) ← (А.0)

Сдвиг аккумулятора вправо через перенос

RRC A

(А.n)←(А.n+1), n=0-6; (А.7)←(С); (С) ←(А.0)

Обмен местами тетрад в аккумуляторе

SWAP A

(А.1, А.1, А.2, А.З) ↔ (А.4, А.5, А:6, А.7)

Обозначения в табл.11: V – логическое ИЛИ; ^ – логическое И;

Команды с битами представлены в табл. 12

Таблица 12

НАЗВАНИЕ КОМАНДЫ

МНЕМОНИКА

ОПЕРАЦИЯ

Сброс переноса

CLR C

(С) ← 0

Сброс бита

CLR bit

(bit) ← 0

Установка переноса

SEТВ С

(С) ← 1

Установка бита

SEТВ bit

(bit) ← 1

Инверсия переноса

CPL C

(С) ← инв. (С)

Инверсия бита

CPL bit

(bit) ← инв. (bit)

Логическое И бита и переноса

ANL C,bit

(С) ← (С) ^ (bit)

Логическое И инверсии бита и переноса

ANL C,/bit

(С) ← (С) ^ инв.(bit)

Логическое ИЛИ бита и переноса

ORL C,bit

(С) ← (С) V (bit)

Логическое ИЛИ инверсии бита и переноса

ORL C,/bit

(С) ← (С) V инв.(bit)

Пересылка бита в перенос

MOV C,bit

(С) ← (bit)

Пересылка переноса в бит

MOV bit,С

(bit) ← (С)

Примечание к табл. 12. Если в качестве операнда bit используется бит аккумулятора, то его мнемоническое обозначение следует представлять в виде ACC.n (n=0÷7).

Группа команд передачи управления указана в табл. 13

Таблица 13

НАЗВАНИЕ КОМАНДЫ

МНЕМОНИКА

ОПЕРАЦИЯ

Длинный абсолютный переход в полном объеме памяти программ

LJMP ad16

(РС) ← ad16

Абсолютный переход внутри двухкилобайтной страницы

АJMP ad11

(РС) ← (РС)+2,

затем (РС 0-10) ← ad11

короткий относительный переход внутри страницы 256 байт

SJMP rel

(РС) ← (РС)+2,

затем (РС) ← (РС)+геl

Косвенный относительный переход

JMP @A+DPТR

(РС) ← (A)+(DP1R)

Переход, если аккумулятор равен 0

JZ rel

(РС) ← (РС)+2, затем если (А)=0, то (РС)←(РС)+геl

Переход, если аккумулятор не равен 0

JNZ rel

(РС)← (РС)+2,затем если (А)<>0,то (РС)←(РС)+rеl

Переход, если перенос равен единице

JC rel

(РС)← (РС)+2, затем если (C)=1,то (РС)←(РС)+rеl

Переход, если перенос равен нулю

JNC rel

(РС)← (РС)+2, затем если (C)=0,то (РС)←(РС)+rеl

Переход, если бит равен единице

JB bit,rel

(РС)← (РС)+3, затем если bit=1,то (РС)←(РС)+rеl

Переход, если бит равен нулю

JNB bit,rel

(РС)← (РС)+3, затем если bit=0,то (РС)←(РС)+rеl

Переход, если бит установлен, с последующим сбросом бита

JBC bit,rel

(РС)← (РС)+3, затем если bit=1, то (РС)←(РС)+rеl, (bit) ← 0

Декремент регистра и переход, если не нуль

DJNZ Rn,rel

(РС) ← (РС)+2, (Rn) ← (Rn) -1, затем если (Rn)<>0, то

(РС) ← (РС)+геl

Декремент прямоадресуемого байта и переход, если не нуль

DJNZ ad,rel

(РС) ← (РС)+2, (ad) ← (ad) -1, затем если (ad)<>0, то (РС) ← (РС)+геl

Сравнение аккумулятора с прямоадресуемым байтом и переход, если не равно

CJNE A,ad,rel

(РС) ← (РС)+3, если (А)<> (ad), то (РС) ← (PC)+rel, при этом если (A) < (ad), то (С) ← 1, иначе (С) ← 0

Сравнение аккумулятора с константой и переход, если не равно

CJNE A,#data8,rel

(РС)←(РС)+З, если (A)<>#data8, то (РС) ←(PC)+rel,при этом

если (A)<#data8. то (С) ← 1, иначе (С) ←0

Сравнение регистра с константой

и переход, если не равно

CJNE Rn,#dаtа8,геl

(РС)←(РС)+З, если (Rn)<>#data8, то (РС) ←(PC)+rel, при этом если (Rn)<#data8. то (С) ← 1,

иначе (С) ←0

Сравнение байта во внутреннем ОЗУ с константой и переход,

если не равно

CJNE @Ri,#data8,rel

(РС)←(РС)+З, если ((Ri))<>#data8, то (РС) ←(PC)+rel, при этом если ((Ri))<#data8. то (С) ← 1,

иначе (С) ←0

Длинный абсолютный вызов подпрограммы

LCALL ad16

(РС) ← (РС)+3; (SP) ← (SP)+1 и ((SP)) ← (РС 0-7); затем

(SP) ← (SP)+1 и ((SP)) ← (РС 8-15);

затем (РС) ← ad16

Абсолютный вызов подпрограммы внутри двухкилобайтной страницы

ACALL ad11

(РС) ← (РС)+3; (SP) ← (SP)+1 и ((SP)) ← (РС 0-7);затем

(SP) ← (SP)+1 и ((SP)) ← (РС 8-15); затем (РС 0-10) ← ad11

Возврат из подпрограммы

RET

(РС 8-15) ← ((SP)); (SP) ← (SP)-1;

затем (РС 0-7) ← ((SP));

(SP) ← (SP)-1

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

RETI

(РС 8-15) ← ((SP)); (SP) ← (SP)-1;

затем (РС 0-7) ← ((SP));

(SP) ← (SP)-1

Холостая команда

NOP

(PC) ← (PC)+1

Примечание к табл. 13. Под символическим обозначением операнда ad16, ad11, rel в командах прикладной программы, как правило, используется имя метки. Некоторые ассемблеры MCS 51 позволяют использовать вместо команд безусловных переходов LJMP, AJMP, SJMP обобщенную команду JMP. В противном случае можно для все случаев рекомендовать к применению команду LJMP.

Команды, модифицирующие флаги результата.

Регистр состояния микроконтроллера PSW содержит 4 флага:CY – переноса, АС – вспомогательного переноса, ОV – переполнения, и Р – флаг паритета.

Флаг АС устанавливается в случае, если при выполнении операций сложения или вычитания между тетрадами байта аккумулятора возник перенос или заем.

Флаг CY устанавливается, если перенос или заем возникает в старшем бите результата. При выполнении операций умножения и деления флаг CY сбрасывается.

Флаг OV устанавливается, если результат операции сложения или вычитания не укладывается в семи младших битах аккумулятора, и содержимое старшего бита изменяется в сравнении с исходным. Флаг устанавливается также если результат умножения больше 255 или в случае деления на 0. Если делитель не равен нулю, то независимо от результата деления флаг OV сбрасывается.

Флаг паритета Р зависит от текущего значения аккумулятора. Если число единичных бит аккумулятора нечетное, то флаг Р устанавливается в 1, а если нечетное – то сбрасывается.

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

– команды, в которых местом назначения результата является регистр состояния PSW или его отдельные биты;

– команды операций над битами регистра PSW.

Таблица 14

КОМАНДЫ

МОДИФИЦИРУЕМЫЕ ФЛАГИ

ADD

CY,OV,AC

ADDC

CY,OV,AC

SUBB

CY,OV,AC

MUL

CY=0, OV

DIV

CY=0, OV

DA A

CY

RRC

CY

RLC

CY

SETB C

CY=1

CLR C

CY=0

CPL C

CY = /CY

ANL C,bit

CY

ANL C,/bit

CY

ORL C,bit

CY

ORL C,/bit

CY

MOV C,bit

CY

CJNE

CY