Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Регистр состояния



Регистр состояния (Status register) предназначен для хранения отдельных признаков результата, полученного при выполнении различных арифметических и логических операций в арифметико-логическом устройстве. Регистр обычно рассматривается состоящим из отдельных бит (флагов), каждый из которых несет в себе определенную информацию о каком либо одном признаке результата. Типовыми флагами регистра состояния являются:

0 флаг переноса (Carry) - устанавливается при возникновении переноса из

старшего разряда результата;

0 флаг переполнения (Overflow) - устанавливается при переполнении разрядной сетки; при алгебраическом сложении двух двоичных чисел признаком переполнения является наличие переноса в знаковый разряд суммы при отсутствии переноса из её знакового разряда (положительное переполнение) или наличие переноса из знакового разряда суммы при отсутствии переноса в её знаковый разряд (отрицательное переполнение); если и в знаковый, и из знакового разряда суммы есть переносы или нет этих обоих переносов, то переполнение отсутствует.

0 флаг отрицательного результата (Negative) - устанавливается, когда результат операции является отрицательным числом; отрицательным обычно считается число, содержащее единицу в знаковом (старшем) разряде.

0 флаг нулевого результата (Zero) - устанавливается, когда результат операции равен нулю;

0 флаг полупереноса (Half Overflow) - устанавливается при возникновении переноса из младшей тетрады 8-битного числа в старшую (из третьего разряда в четвертый).

Разрядность регистра состояния обычно равна разрядности ядра, но некоторые его биты могут быть не задействованы или задействованы в работе других узлов ядра.

Например, 8-битный регистр состояния ядра AVR (SREG- Status register) размещен в пространстве регистров ввода/вывода (табл. 3.1) по адресу $3F ($5F) и его биты определяются в соответствии с рис. 3.4.

 
 


Рис. 3.4. Регистр состояния ядра AVR

0 Бит 7 - I (Global Interrupt Enable) - бит разрешения глобального прерывания. Для разрешения прерывания должен быть установлен в состояние 1. Работа бита будет рассмотрена позднее.

0 Бит 6 - T (Bit Copy Storage) - бит сохранения копии. Ряд инструкций копирования используют его как бит-источник или бит-приемник.

0 Бит 5 - H (Half Carry Flag) - флаг полупереноса.

0 Бит 4 - S (Sign Bit, S = N V) - флаг знака. Бит S всегда находится в

состоянии, определяемом операцией исключающего ИЛИ (exclusive OR)

между флагом отрицательного значения N и флагом переполнения V.

0 Бит 3 - V (Two's Complement Overflow Flag) - флаг переполнения

(дополнения до двух).

0 Бит 2 - N (Negative Flag) - флаг отрицательного значения..

0 Бит 1 - Z (Zero Flag) - флаг нулевого значения.

0 Бит 0 - C (Carry Flag) - флаг переноса.

Стек

Стек - память данных, организованная по принципу: последний зашел - первый вышел (LIFO - Last In - First Out). Такая память предназначается, обычно, для оперативного сохранения содержимого отдельных регистров при переходах к подпрограммам. Одним из таких регистров является программный счетчик. Извлечение из стека содержимого регистров производится в порядке, обратном порядку записи. Запись в стек и извлечение из стека не требует знания адреса ячеек памяти, в которые записываются данные.

Стек может быть организован либо в специально созданных в ядре ячейках памяти, либо в области SRAM. В последнем случае в ядре предусматривается специальный регистр - указатель стека (Stack Pointer). Указатель стека хранит адрес последней записанной ячейки памяти в области стека. Поскольку при последовательной записи адреса ячеек всегда изменяются последовательно в сторону уменьшения, а при изображении памяти SRAM ячейки с меньшими номерами рисуются сверху, то говорят, что стек при записи растет вверх.

Количество ячеек памяти (количество уровней стека), которые используются в стеке для хранения данных, именуется глубиной стека. Глубина стека в различных архитектурах ядра может быть различна: от 2-х ячеек до размера SRAM. Например, в ядре PIC12 фирмы Microchip заложен 2-х уровневый стек, разрядность ячеек которого равна разрядности памяти программ (12 бит), а в ядре PIC16 той же фирмы - 8 уровневый стек с разрядностью ячеек 13 бит.

В микроконтроллерах AVR стек организуется в памяти данных типа SRAM. Например, микроконтроллер АТтеgа163 оснащен 16-разрядным указателем стека, размещенным в двух регистрах SPH (Stack Pointer High) и SPL (Stack Pointer Low) пространства ввода/вывода по адресам $3E ($5E) и $3D ($5D). Поскольку рассматриваемый микроконтроллер имеет SRAM с адресами от $000 до $045F (рис. 2.2), то в нем используется только 11 бит указателя стека SP0...SP10 (рис. 3.5).

 
 


Рис. 3.5. Регистры указателя стека микроконтроллера ATmegal63

Указатель стека (SP) указывает на область в статической памяти данных, в которой размещаются стек. Начальное значение указателя стека должно задаваться в программе до первого вызова подпрограмм. Содержимое указателя стека уменьшается на единицу, при каждом занесении данных в стек, и на две единицы при занесении в стек содержимого программного счетчика. Указатель стека увеличивается на единицу, при извлечении данных из стека, и на две единицы при извлечении из стека содержимого программного счетчика. Для работы со стеком в системе команд микроконтроллера предусматриваются специальные инструкции.





Дата публикования: 2014-11-03; Прочитано: 1338 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...