Программный Счетчик
2.13.1. Одним из наиболее важных регистров процессора является программный счетчик (PC – Program Counter), который следит за ходом выполнения программы процессором и содержит адрес команды, расположенной в программной памяти вслед за выполняемой командой [ 1 ].
2.13.2. Блок-схема алгоритма реализации программы процессором МК приведена на рис. 2.13. При аппаратном сбросе МК происходит обнуление программного счетчика, вследствие чего первой командой, выполняемой процессором, будет команда, код которой хранится в программной памяти по адресу 0000H. После выборки каждого байта команды из программной памяти МК процессор автоматически инкрементирует программный счетчик (см. п. 2.9.4). Таким образом, в тот момент, когда процессор начинает выполнение команды, в программном счетчике уже находится адрес команды, которая будет выполняться следующей, если текущая команда не изменит ход выполнения программы или не произойдет прерывание программы.
2.13.3. Для того, чтобы изменить ход выполнения программы, используются команды передачи управления (см. табл. 2.4), которые можно разделить на три подгруппы: условные команды, безусловные команды и команды обслуживания подпрограмм.
Команды безусловной передачи управления (LJMP, AJMP и SJMP) приводят к загрузке в программный счетчик нового содержимого, вследствие чего происходит ветвление программы. При программировании на языке ассемблера А8051 (см. подраздел 3.2) допускается использование обобщенного имени команды безусловной передачи управления JMP. В процессе трансляции программы (см. подраздел 3.3) команда JMP в зависимости от длины перехода в программе заменяется командой LJMP, AJMP или SJMP.
В командах условной передачи управления сначала проверяется истинность какого-либо условия, а затем, если условие выполняется, происходит загрузка нового содержимого в программный счетчик, а если нет – выполняется следующая команда. Проверке условия может предшествовать выполнение арифметической операции, например, уменьшение на 1 содержимого регистра (команда DJNZ).
Рис. 2.13. Алгоритм реализации программы процессором МК
2.13.4. Поскольку область программной памяти, начиная с адреса 03Н, зарезервирована для векторов прерываний (см. подраздел 2.16), по адресу 00Н в программной памяти обычно располагается команда безусловного перехода на начало программы.
Стек
2.14.1. Стек(stack) – последовательная динамическая структура данных, организованная по принципу LIFO(last-in, first-out) – “последним пришел, первым вышел”. При записи данных в стек каждый новый элемент данных помещается на вершину стека. Элемент, записанный в стек последним, будет первым считан с вершины стека. На дне стека находится элемент, записанный в стек первым.
2.14.2. В микропроцессорных системах под стек отводится часть оперативной памяти. Данные, записанные в стек, доступны для выборки произвольным путем, т.е. по адресу. Для того, чтобы область памяти стала стеком, в системе должен быть указатель вершины стека (регистр-указатель стека), в котором содержится адрес последнего записанного в стек элемента. При обращении к стеку используют регистровую адресацию через регистр-указатель стека. Таким образом, регистр-указатель стека освобождает программиста от необходимости следить за тем, по какому абсолютному адресу записываются в память или выбираются из памяти данные. В качестве регистра-указателя системного стека (т.е. стека, к которому автоматически обращается центральный процессор микропроцессорной системы при выполнении ряда команд) обычно используется один из регистров общего назначения. Выбор конкретного регистра определяется архитектурой системы. В качестве регистра-указателя пользовательского стека, который организуется программистом для временного хранения данных своей программы, может быть использован любой регистр общего назначения по усмотрению самого программиста. Организация пользовательского стека не является обязательной, поскольку для своих целей программист может использовать системный стек.
2.14.3. В МК 80С51 системный стек размещается во внутренней памяти данных, а в качестве регистра-указателя стека используется регистр специальных функций SP(Stack Pointer). При аппаратном сбросе МК (по сигналу RST) в регистр SP автоматически заносится значение 07H. По мере поступления новых данных стек распространяется в сторону увеличения адресов.
Для обращения к системному стеку в системе команд МК есть две специальные команды: PUSH (загрузка в стек) и POP (извлечение из стека).
При выполнении команды PUSH addr сначала автоматически увеличивается на единицу содержимое регистра SP, а затем производится пересылка байта, расположенного во внутренней памяти данных или в регистре специальных функций по адресу addr, в ячейку памяти с адресом (SP). По команде POP addr операции выполняются в обратном порядке: сначала производится пересылка байта из ячейки внутренней памяти данных с адресом (SP) по адресу addr, а затем уменьшение на единицу содержимого SP.
Системный стек автоматически используется процессором микроконтроллера при обращении к подпрограммам (см. подраздел 2.15) и обслуживании прерываний (см. подраздел 2.16).
Дата добавления: 2015-10-09; просмотров: 4615;