Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Основные биты регистра признаков.

Структура стековой памяти

Основные биты регистра признаков.

 

Под стековой памятью мы понимаем область ОЗУ или Data со старшими адресами. Если рассматривать ОЗУ как набор ячеек, где ячейки с младшими адресами расположены наверху, а со старшими – внизу, то при включении данных в стек (стопка бумаг) эти данные как бы кладутся сверху ранее занятых ячеек стека, а при извлечении данных из стека, они берутся из верхних ячеек стековой памяти (Режим LIFO – Last Input First Output).

Существует и другой режим работы стека: FIFO – First Input First Output.

Контролирует стековую память специальный регистр SP (Stack-Pointer), который содержит адрес ячейки памяти соответствующей верхушке стека. Этот регистр автоматически изменяет свое содержимое на два (увеличивает или уменьшает) при выполнении команд обращения к стековой памяти (Push, Pop, Call, Ret).

Push – записывает данные в стек,

Pop – считывает данные из стека,

Call – вызов подпрограммы, при этом адрес возврата (следующий за командой Call адрес) записывается в стек.

Ret (IRET) возврат из подпрограммы, при этом адрес возврата считывается из стека.

Сам стек расположен в «нижней» части ОЗУ и «растет» в верх. Для работы процессора со стеком предусмотрен указатель в виде регистров ввода вывода SPH: SPL. Это указатель на вершину стека. То есть на байт следующий за «загнанным» в стек последним. Изначально он должен указывать на самый последний байт памяти (константа RAMEND)

ldi temp, Low(RamEnd)

out SPL, temp

ldi temp, HIGH(RamEnd)

out SPH, temp

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

Кроме того, что стек позволяет временно хранить данные, он может быть использован для передачи данных в подпрограммы и из них.

Программы на языке Ассемблер, также как и на других языках программирования, используют команды вызова подпрограмм и возврата из подпрограмм, это команды: Call и Ret. Команда Call, также как и любая другая команда ветвления, в качестве операнда использует адрес или метку точки перехода.

Команда Call вызывает выполнение последовательно двух действий:

1. Содержимое программного счетчика, равное адресу ячейки памяти ПЗУ с командой, которая будет выполняться на последующем шаге, запоминается в стековой памяти, чтобы использовать ее при возврате из подпрограммы.

2. В регистр «программный счетчик» загружается операнд команды Call, равный численному адресу первой команды вызываемой подпрограммы.

При возврате из подпрограммы по команде Ret происходит только одно действие: в программный счетчик загружается число из стековой памяти, которое было ранее туда загружено по команде Call. Соответственно после команды Ret будет выполняться команда, следующая в программе за командой Call.

Если в подпрограмме происходит обращение к другой подпрограмме (вложенные подпрограммы), то сохранение точек возврата происходит аналогичным образом.

Разряд С называется флагом переноса и становится равным единице после выполнения арифметической команды, если результат операции не умещается в восьми битном регистре приемника. Пример: 250+50=44, С=1; 250+1=251, С=0.

 
 

 

 


Рис.5 Структура РП для AVR контроллера.

Z – флаг нуля. Принимает значение 1, если по окончании арифметической операции во всех разрядах регистра получателя или регистра приемника содержатся нули. Пример: 250+6=0, Z=1; 250+1=251, Z=0.

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

Пример: 120+7=127, N=0; 120+8=-128, N=1

V – флаг переполнения, указывает на верность (V=0) или ошибочность (V=1) результатов арифметической операции со знаковыми числами.

Пример: 100+20=120, V=0; 100+29=-127, V=1.

S – флаг знака, S=N xor V, где xor-логическая операция «исключающая ИЛИ»

Н – флаг дополнительного переноса, указывает на наличие переноса из младшей тетрады в старшую при выполнении арифметической команды.

Пример: 10+1=11, H=0; 15+1=16, H=1.

Т – флаг трассировки.

I – флаг прерывания.

Содержимое регистра PП или регистра статуса SREG можно наблюдать в окне Workspace\IO\CPU\SREG.

 

<== предыдущая лекция | следующая лекция ==>
Состав регистрового файла на примере AVR-контроллера. | Методы адресации операндов в командах Ассемблера AVR-контроллера
Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.007 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал