Регистр статуса

Микроконтроллеры / Для начинающих / Архитектура /

Микроконтроллеры для начинающих Что нужно для того, чтобы стать профессиональным разработчиком программ для микроконтроллеров и выйти на такой уровень мастерства, который позволит с лёгкостью найти и устроиться на работу с высокой зарплатой (средняя зарплата программиста микроконтроллеров по России на начало 2017 года составляет 80 000 рублей). Подробнее...

Регистр статуса (регистр состояния или регистр флагов) - это специальный регистр, который есть в любом процессоре, микропроцессоре или микроконтроллере.

Регистр состояния (Status Register) содержит данные об итоге выполнения последней арифметической или логической операции. Эти данные можно использовать для управления ходом программы с инструкциями условного перехода.

Обратите внимание, что регистр состояния обновляется после всех операций ALU, как указано в справочнике по набору команд. Это во многих случаях устраняет необходимость использования инструкций сравнения, что позволяет создавать менее объёмный и более быстрый код.

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

Регистр SREG

SREG - это регистр состояния в AVR. Это 8-разрядный регистр, в котором каждый бит (разряд) отображает состояние какой-либо операции (или результата операции).

Каждый бит (флаг) доступен как для чтения, так и для записи. При инициализации все биты равны нулю.

Адрес регистра SREG - 0x3F (в шестнадцатеричной системе).

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

Флаги регистра SREG

Флаги регистра SREG

Флаг I (бит 7): Global Interrupt Enable (Флаг глобального разрешения прерываний)

Для включения прерываний флаг I должен быть установлен. Затем управление включением отдельных прерываний выполняется в отдельных регистрах управления. Если флаг I сброшен, ни одно из прерываний не включено, независимо от настроек отдельного прерывания. Флаг I очищается аппаратным обеспечением после завершения прерывания (автоматически сбрасывается), а устанавливается инструкцией RETI для включения последующих прерываний. Флаг I также может быть установлен и очищен инструкциями SEI и CLI, как описано в документации.

Благодаря автоматическому сбросу этого флага во время выполнения подпрограммы обработки прерывания запрещается (и исключается) возникновение других прерываний. Если бы это не делалось, то могло бы возникнуть очень большое количество рекурсивных вызовов (что в итоге привело бы к зависанию).

Разрешаются прерывания обычно вручную при возврате из обработчика прерываний.

Флаг T (бит 6): Bit Copy Storage (Хранение Копируемого Бита)

Инструкции копирования бита (Bit Copy), то есть инструкции BLD (Bit LoaD) и BST (Bit STore), используют флаг T как источник или приёмник при операциях с битом. Бит из регистра в Регистре Файла (Register File) можно скопировать в бит Т с помощью инструкции BST, а состояние флага Т можно скопировать в бит регистра Регистра Файла при помощи команды BLD.

Флаг H (бит 5): Half Carry Flag (Флаг половинного переноса)

Флаг полупереноса H указывает на полуперенос в некоторых арифметических операциях. Полуперенос полезен в арифметике BCD.

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

  01011010 = 90
+
  00001111 = 15
=
  01101001 = 105

При выполнении этой операции будет установлен флаг полупереноса, так как произошёл перенос из третьего бита (старшего бита младшей тетрады).

Более подробно об этом в описании набора команд процессора.

Флаг S (бит 4): Sign Bit (Флаг знака)

S = N (+) V (исключающее или между флагами N и V)

Флаг S равен итогу операции исключающего или между флагом отрицательного результата N и флагом переполнения V. Более подробно об этом в описании набора команд процессора.

Флаг V (бит 3): Two’s Complement Overflow Flag (Флаг переполнения дополнительного кода)

Флаг V поддерживает арифметику дополнения до двух. Более подробно об этом в описании набора команд процессора.

Флаг N (бит 2): Negative Flag (Флаг отрицательного значения)

Флаг N указывает на то, что результат арифметической или логической операции был отрицательным. Более подробно об этом в описании набора команд процессора.

Флаг Z (бит 1): Zero Flag (Флаг нуля)

Флаг Z указывает на то, что результат арифметической или логической операции равен нулю. Более подробно об этом в описании набора команд процессора.

Флаг C (бит 0): Carry Flag (Флаг переноса)

Флаг C указывает на перенос при арифметической или логической операции. Более подробно об этом в описании набора команд процессора.


Подписаться на канал в YouTube

Вступить в группу "Основы программирования"

Подписаться на рассылки по программированию

Микроконтроллеры для ЧАЙНИКОВ Микроконтроллеры для ЧАЙНИКОВ

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

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика