МПС

Директивы ассемблера (Лекция)

 

ПЛАН ЛЕКЦИИ

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

2. Регистры специальных функций i8051

3. Регистр флагов (PSW)

4. Команды арифметических операций 8051

5. Команды операций с битами микроконтроллера 8051

6. Команды операций с битами микроконтроллера 8051

 

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

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

Все директивы предваряются точкой.

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

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

RED    .EQU   13

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

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

ALFA    .SET 3

...

ALFA    .SET ALFA+1

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

ERROR-FLAG    .BIT 25Н.З

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

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

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

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

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

 

2.                  Регистры специальных функций i8051

К адресному пространству памяти данных примыкает адресное пространство регистров специальных функций SFR (Special Function Register).

 

Таблица. Размещение регистров специальных функций в пространстве SFR

Адрес

Символ

Наименование

0Е0Н

*АСС

Аккумулятор (Accumulator)

0F0H

Регистр расширитель аккумулятора (Multiplication Register)

0D0H

*PSW

Слово состояния программы (Program Status Word)

080Н

*P0

Порт 0 (SFR P0)

090Н

*Р1

Порт 1 (SFR P1)

0А0Н

*P2

Порт 2 (SFR P2)

0В0Н

*P3

Порт 3 (SFR РЗ)

081Н

SP

Регистр указатель стека (Stack Pointer)

083Н

DPH

Старший байт регистра указателя данных DPTR (Data Pointer High)

082Н

DPL

Младший байт регистра указателя данных DPTR (Data Pointer Low)

08СН

ТН0

Старший байт таймера 0 ()

08АН

TL0

Младший байт таймера 0 ()

08DH

TH1

Старший байт таймера 1 ()

08ВН

TL1

Младший байт таймера 1 ()

089Н

TMOD

Регистр режимов таймеров счетчиков (Timer/Counter Mode Control Register)

088Н

*TCON

Регистр управления статуса таймеров (Timer/Counter Control Register)

0В8Н

*IP

Регистр приоритетов (Interrupt Priority Control Register)

0А8Н

*IЕ

Регистр маски прерывания (Interrupt Enable Register)

087Н

PCON

Регистр управления мощностью (Power Control Register)

098Н

*SCON

Регистр управления приемопередатчиком (Serial Port Control Register)

099Н

SВUF

Буфер приемопередатчика (Serial Data Buffer)

 

Примечание. Регистры, символ которых отмечен знаком (*), допускают адресацию своих отдельных бит при использовании команд из группы команд операций над битами.

Адреса, по которым расположены эти регистры, приведены в таблице.

Отметим, что регистры занимают только часть 128-байтового адресного пространства. Т.е. ячейки памяти с адресами 80H-0FFH, которые не заняты регистрами, физически отсутствуют, на кристаллах микроконтроллеров семейства 8051 при обращении к ним можно прочитать лишь код команды возврата.

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

-     Регистры-защелки SFR параллельных портов Р0...Р3 - служат для ввода-вывода информации.

-     Две регистровые пары с именами TH0, TL0 и ТН1, TL1 представляют собой регистры, двух программно-управляемых 16-битных таймеров-счетчиков.

-     Режимы таймеров-счетчиков задаются с использованием регистра TMOD, а управление ими осуществляется с помощью регистра TCON.

-     Для управления режимами энергопотребления микро-ЭВМ используется регистр PCON.

-     Регистры IP и IE управляют работой системы прерываний микро-ЭВМ,

-     регистры SBUF и SCON – работой приемопередатчика последовательного порта.

-     Регистр-указатель стека SP в микро-ЭВМ рассматриваемого семейства – восьми битный. Он может адресовать любую область внутренней памяти данных. У микро-ЭВМ семейства 8051 стек «растет вверх», т.е. перед выполнением команды PUSH или CALL содержимое SP инкрементируется, после чего производится запись информации в стек. Соответственно при извлечении информации из стека регистр SP декрементируется после извлечения информации. В процессе инициализации микро-ЭВМ после сигнала сброса или при включении питающего напряжения в SP заносится код 07Н. Это означает, что первый элемент стека будет располагаться в ячейке памяти с адресом 08Н.

-     Регистр-указатель данных DPTR чаще всего используют для фиксации 16-битного адреса в операциях обращения к внешней памяти программ и данных. С точки зрения программиста он может выступать как в виде одного 16-битного регистра, так и в виде двух независимых регистров DPL и DPH

-     Аккумулятор (АСС) является источником операнда и местом фиксации результата при выполнении арифметических, логических операций и ряда операций передачи данных. Кроме того, только с использованием аккумулятора могут быть выполнены операции сдвигов, проверка на нуль, формирование флага паритета и т.п. В распоряжении пользователя имеются 8 регистров общего назначения R0-R7 одного из четырёх возможных банков. При выполнении многих команд в АЛУ формируется ряд признаков операции (флагов), которые фиксируются в регистре PSW.

-     Регистр В используется как источник и как приемник при операциях умножения и деления, обращение к нему, как к регистру SFR, производится аналогично аккумулятору.

-     При выполнении ряда команд в арифметико-логическом устройстве (АЛУ) формируются признаки операций – флаги, которые фиксируются в регистре PSW.

 

3.                  Регистр флагов (PSW)

Символ

Позиция

Имя и назначение

P

PSW.0

Флаг паритета (четности). Устанавливается и сбрасывается аппаратурно в каждом цикле команды и фиксирует нечетное/четное число единичных бит в аккумуляторе

-

PSW.1

Не используется

OV

PSW.2

Флаг переполнения. Устанавливается и сбрасывается аппаратурно при выполнении арифметических операций

RS0-

RS1

PSW.3 - PSW.4

Биты выбора используемого банка регистров. Могут быть изменены программным путем

 

RS0

RS1

Банк

Границы адресов ОЗУ

 

0

0

0

00Н - 07Н

1

0

1

08Н - 0FH

0

1

2

10Н - 17Н

1

1

3

18Н – 1FН

F0

PSW.5

Флаг пользователя. Может быть установлен, сброшен или проверен программой пользователя

АС

PSW.6

Флаг вспомогательного переноса. Устанавливается и сбрасывается только аппаратными средствами при выполнении команд сложения и вычитания и сигнализирует о переносе или заёме в бите 3 аккумулятора

С

PSW.7

Флаг переноса. Устанавливается и сбрасывается как аппаратурно, так и программным путем

 

4.                  Команды арифметических операций 8051

В данную группу входят 24 команды, краткое описание которых приведено в таблице. Из нее следует, что микро-ЭВМ выполняет достаточно широкий набор команд для организации обработки целочисленных данных, включая команды умножения и деления.

По результату выполнения команд ADD, ADDC, SUBB, MUL и DIV устанавливаются флаги PSW, структура которых приведена в таблице.

Флаг С устанавливается при переносе из разряда D7, т. е. в случае, если результат не помещается в восемь разрядов; флаг АС устанавливается при переносе из разряда D3 в командах сложения и вычитания и служит для реализации десятичной арифметики. Этот признак используется командой DA A.

Флаг OV устанавливается при переносе из разряда D6, т. е. в случае, если результат не помещается в семь разрядов и восьмой не может быть интерпретирован как знаковый. Этот признак служит для организации обработки чисел со знаком.

Наконец, флаг Р устанавливается и сбрасывается аппаратно. Если число единичных бит в аккумуляторе нечетно, то Р = 1, в противном случае Р = 0.

 

5.                  Команды логических операций микроконтроллера 8051

В этой группе 25 команд, их краткое описание приведено в таблице. Нетрудно видеть, что эти команды позволяют выполнять операции над байтами: логическое И (^), логическое ИЛИ (V), исключающее ИЛИ ((+)), инверсию (NOT), сброс в нулевое значение и сдвиг.

6.                  Команды операций с битами микроконтроллера 8051

Группа состоит из 12 команд, краткое описание которых приведено в таблице. Эти команды позволяют выполнять операции над отдельными битами: сброс, установку, инверсию бита, а также логические И (^) и ИЛИ (V). В качестве "логического" аккумулятора, участвующего во всех операциях с двумя операндами, выступает признак переноса C (разряд D7 PSW), в качестве операндов могут использоваться 128 бит из резидентной памяти данных и регистры специальных функций, допускающие адресацию отдельных бит.

 

Примеры решения задач

1)      Представленный код выполняет арифметическую функцию …

 

            MOV   A, #X3              ; А = х3

            SUBB  A, #X2              ; А = А – х2 = х3 – х2

            MOV   B, A                   ; В = А

            MOV   A, #X1              ; А = х1

            MUL    AB                     ; А = А*В = х1*(х3 – х2)

            MOV   R0, A                 ;R0 = А = х1*(х3 – х2)

 

Ответ: R0 = х1*(х3 – х2).

 

2)      После выполнения приведенного кода аккумулятор содержит...

            MOV   A, #XXXXXXXXb

            AND    A, #11111010b          ; A = XXXXX0X0b

            OR       A, #00010010b          ; A = XXX1X010b

            XRL     A, #01010000b          ; A = XX0X010b

Ответ: A = XX0X010b.

 

3)      Приведенный код выполняет булеву функцию Y=…

Y         .BIT     P1.0

X         .BIT     P2.0

W        .BIT     P2.1

            MOV   C,W    ; C = W

            ANL    C,X     ; C = CX = WX

            CPL     C         ; C = =

            ORL     C,/W   ; C = C + = +

            MOV   Y,C     ; Y = C = +

 

Ответ: Y = + .