Программная модель ОМК

ОМК выполняет действия над 8-разрядными операндами. Программная модель центрального процессора 8051 (рисунок 6) содержит шесть регистров. Все регистры, кроме программного счетчика (счетчика команд) PC, являются частью объединенного адресного пространства ОЗУ данных. Для обращения к ним могут быть использованы как символьные имена регистров ‑ АСС, В, PSW, SP, DPH, DPL, так и их абсолютные адреса ‑ 0E0h, 0F0h, 0D0h, 81h, 82h, 83h соответственно.

                                 
                  Аккумулятор ACС
 
                                 
                  Регистр B
 
                                 
  Регистр косвенной адресации DPTR
 
                                 
  Программный счетчик PC
 
                                 
                  Указатель стека SP
 
                                 
                  Регистр признаков PSW
              C AC F0 RS1 RS0 OV   P
   
Рисунок 6.- Программная модель центрального процессора  

Аккумулятор (ACС) является источником операнда и местом фиксации результата при выполнении арифметических, логических операций и ряда операций передачи данных. Кроме того, только с использованием аккумулятора могут быть выполнены операции сдвигов, проверка на нуль, формирование флага паритета и т.п.

Регистр B ‑ дополнительный 8-разрядный регистр. Используется в операциях умножения и деления. В других командах может интерпретироваться как регистр общего назначения.

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

Программный счетчик PC ‑ 16-разрядный регистр, содержит адрес текущей команды либо адрес операнда, используемого в текущей команде. После сброса микроконтроллера (МК) программный счетчик автоматически устанавливается в «0». Поэтому в МК с процессорным ядром MCS-51 любая программа пользователя должна начинаться с адреса 0000h. Команды обращения к РС отсутствуют. Однако он программно доступен с помощью специальных процедур.

Указатель стека SP ‑ 8-разрядный регистр, содержит адрес вершины стека. Архитектура процессорного ядра MCS-51 предполагает размещение области стековой памяти только в области внутреннего ОЗУ данных. Глубина стека ограничена объемом резидентного ОЗУ. При сбросе ОМК указатель стека устанавливается в состояние 07h, назначая область стека в первый банк регистров. Поэтому при использовании стека после сброса необходимо задавать требуемое значение SP. Обычно вершина стека размещается в старших адресах свободной зоны.

При записи в стек (команда PUSH), содержимое указателя SP увеличивается на 1, а при чтении (команда POP) – уменьшается на 1. Указатель стека аппаратно увеличивается на 2 при выполнении команд вызова подпрограммы (CALL) и обращении к подпрограмме обработки прерываний и уменьшается на 2 при выполнении команд возврата RET, RETI. В стек при этом соответственно записывается или извлекается содержимое РС.

Слово состояния процессора ССП (PSW) При выполнении большинства команд в АЛУ формируется ряд признаков операции (флагов), которые фиксируются в регистре ССП. В таблице 2 приводится перечень флагов ССП, даются их символические имена и описываются условия их формирования.

Формат слова состояния процессора PSW

Таблица 2

Символ Позиция Имя и назначение
C PSW.7 Флаг переноса из старшего разряда. Устанавливается и сбрасывается при выполнении арифметических и логических операций аппаратно. Возможно изменение значения С программными средствами.
AC PSW.6 Флаг вспомогательного переноса из третьего разряда в четвертый. Устанавливается и сбрасывается только аппаратными средствами при выполнении команд сложения и вычитания.
F0 PSW.5 Флаг 0. Может быть установлен, сброшен или проверен программой как флаг, специфицируемый пользователем.
RS1 RS0 PSW.4 PSW.3 Выбор банка регистров. Устанавливается и сбрасывается программой для выбора рабочего банка регистров (см. примечание)
OV PSW.2 Флаг арифметического переполнения. Устанавливается и сбрасывается аппаратно при выполнении арифметических операций
PSW.1 Не используется
P PSW.0 Флаг паритета. Устанавливается и сбрасывается в каждом цикле команды только аппаратно. Принимает значение 1 при четном числе единичных бит в аккумуляторе.
Примечание. RS1 RS0 Банк Границы адресов
      00H-07H
      08H-0FH
      10H-17H
      18H-1FH

Наиболее «активным» флагом ССП является флаг переноса, который принимает участие и модифицируется в процессе выполнения многих операций, включая сложение, вычитание и сдвиги. Кроме того, флаг переноса (C) выполняет функции «булевого аккумулятора» в командах, манипулирующих с битами.

Флаг арифметического переполнения (OV) фиксирует превышение длины разрядной сетки при операциях над целыми числами со знаком.

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

Флаг паритета Р обеспечивает контроль передаваемой информации. Значение бита паритета изменяется при любой операции, в которой АСС является приемником результата. При приеме информации выполняется повторное формирование Р, а затем производится сравнение битов паритета, вычисленных при приеме и передаче информации.

АЛУ не управляет флагами селекции банка регистров (RS0, RS1) и F0. Их значения полностью определяются прикладной программой.

В регистре признаков отсутствуют флаги нулевого Z и отрицательного N результатов. Признак нулевого состояния аккумулятора формируется аппаратно во всех командах, в которых аккумулятор является приемником результата. В регистре признаков равенство нулю не отображается. Команды условного перехода по признаку Z (JZ и JNZ) следует использовать после выполнения команд, в которых результат операции записывается в аккумулятор.

Признак знака результата фиксируется в старшем бите АСС и доступен с помощью битовых команд условных переходов (JB, JNB).

Назначение и функции регистров специальных функций подробно рассмотрены в разделе 4.

РПД разделена на 3 зоны, каждая из которых имеет свои функциональные особенности:

Зона регистров общего назначения (РОН) состоит из 4-х банков, расположенных с адреса 00h по 1Fh. Каждый банк состоит из 8 ячеек РПД. После сброса, активным является нулевой банк. Номер банка устанавливается в слове состояния процессора. Достоинством этой зоны является возможность использования прямой регистровой адресации. Команды работы с регистрами однобайтовые и выполняются за минимальное время (1мкс). Обычно в этой зоне располагают регистры временного хранения информации. Исключение составляют регистры R0, R1 каждого банка, которые могут использоваться как регистры косвенной адресации при обращении к РПД или как индексные регистры при обращении к внешней памяти данных.

Зона регистров специальных функций (РСФ) расположена с адреса 80h по 0FFh. В ней находятся основные регистры данных и управления.

Обращение к РСФ возможно только с указанием прямого адреса. В 8051 используется только часть адресов зоны РСФ. Неиспользованные адреса зарезервированы для развития ОМК данной серии.

8051 предоставляет большие возможности для работы с битовыми переменными, которые должны быть расположены в битовой зоне. Битовое пространство начинается в битовой зоне РПД (адреса 20h-2Fh), а заканчивается в зоне регистров специальных функций. Обращение к битам возможно только с использованием команд прямой битовой адресации. Адресное пространство битовой зоны и РПД имеют различную метрику.

Cвободная зона ‑ особенностей по способам адресации не имеет.

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

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

        Адрес   Регистр
7Fh   30h   Ячейки резидентного ОЗУ (свободная зона)   0FFh    
2Fh 7F 7E 7D 7C 7B 7A     0F0h F7 F6 F5 F4 F3 F2 F1 F0 B
2Eh                      
2Dh 6F 6E 6D 6C 6B 6A     0E0h E7 E6 E5 E4 E3 E2 E1 E0 A
2Ch                      
2Bh 5F 5E 5D 5C 5B 5A     0D0h D7 D6 D5 D4 D3 D2 D1 D0 PSW
2Ah                      
29h 4F 4E 4D 4C 4B 4A     0B8h BC BB BA B9 B8 IP
28h                      
27h 3F 3E 3D 3C 3B 3A     0B0h B7 B6 B5 B4 B3 B2 B1 B0 P3
26h                      
25h 2F 2E 2D 2C 2B 2A     0A8h AF AC AB AA A9 A8 IE
24h                      
23h 1F 1E 1D 1C 1B 1A     0A7h A7 A6 A5 A4 A3 A2 A1 A0 P2
22h                 99h   SBUF
21h 0F 0E 0D 0C 0B 0A     98h 9F 9E 9D 9C 9B 9A     SCON
20h                      
1Fh Банк 3 (R7-R0) 90h                 P1
  8Dh   TH1
18h 8Ch   TH0
17h Банк 2 (R7-R0) 8Bh   TL1
  8Ah   TL0
10h 89h   TMOD
0Fh Банк 1 (R7-R0) 88h 8F 8E 8D 8C 8B 8A     TCON
  87h   PCON
08h 83h   DPH
07h Банк 0 (R7-R0) 82h   DPL
  81h   SP
00h 80h                 P0
  Рисунок 7.- Структура внутренней памяти данных

СИСТЕМА КОМАНД 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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: