Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_po_Arkht_EVM_i_Yazyk_assemblera.docx
Скачиваний:
44
Добавлен:
01.04.2022
Размер:
5.16 Mб
Скачать

Регистры специального назначения. Регистр Программный счетчик.

Счетчик команд — один из наиболее главных регистров микропроцессора. Программа — это последовательность команд, которые хранятся в памяти микропроцессорной системы и которые предназначены для инструктирования микропроцессора, что необходимо делать для решения поставленной задачи. Счетчик команд (программный счетчик) следит за тем, какая команда выполняется в данный момент, а какая команда будет выполняться в следующей. Разрядность счетчика команд определяется разрядностью шины адреса. Чтобы обратиться к любому из этих адресов, счетчик команд должен располагать 16 двоичными разрядами. Где бы команды не располагались, они следуют друг за другом в определенном порядке.

Счетчик команд – представляет собой регистр, в котором содержится адрес следующей исполняемой команды.

Размер счетчика команд может быть от нескольких разрядов до шестнадцати (двухбайтовый). Размерность счетчика зависит от объема памяти программ. Счетчик команд не доступен для программиста, в него мы не можем ничего записать и не можем из него ничего считать. Работой счетчика команд руководит единолично МК.

При включении питания устройства или сброса микроконтроллера, счетчик команд устанавливается в ноль, т.е. указывает на нулевой адрес памяти программ. По этому адресу начинается наша программа (если мы не используем прерывания) или адрес, по которому начинается наша программа (если мы используем прерывания).  При нормальном ходе программы содержимое счетчика команд автоматически увеличивается на 1 или 2 (в зависимости от выполняемой команды) в каждом машинном цикле. Т.е., после выполнения команды, счетчик будет указывать адрес следующей команды. Этот порядок будет нарушен, если на пути МК при выполнении программы встретится команда перехода, команда вызова подпрограммы (или возврата из подпрограммы), а также при возникновении прерывания. В этом случае содержимое счетчика – адрес следующей команды, записывается в стек, а в счетчик записывается адрес по которому надо перейти по команде перехода или по прерыванию. По команде возвращения из подпрограммы, в счетчик записывается адрес команды сохраненный в стеке, программа продолжается дальше. Все это проделывается автоматически, без нашего участия.

Регистры специального назначения. Регистр указатель Стека.

Указатель стека — регистр-счетчик, содержимым которого всегда является адрес. Назначение стека в том, чтобы сохранять текущее содержание всех регистров, если происходит прерывание основной программы. Образно стек можно представить в виде записи значений на отдельных листах бумаги и складывании их стопкой. Извлечение всегда происходит в обратном порядке, т.е. только с верхушки стека. Иными словами, соблюдается принцип «последним вошел — первым вышел» (ЕО). В любой момент времени в стек можно включить дополнительную информацию, но при извлечении первой будет та, которая включена последней. С помощью стека можно организовать вложенные подпрограммы. При этом основная программа вызывает подпрограмму, которая может вызвать новую подпрограмму и т.д. При вызове первой подпрограммы адрес возврата к основной программе заносится в стек. При обращении ко второй подпрограмме адрес возврата к первой снова заносится в стек и т.д. По мере выполнения подпрограмм адреса возврата постепенно извлекаются из стека до тех пор, пока не произойдет возврат к основной программе.

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

Стек состоит из двух частей: указатель стека и стековая память. Можно сказать, что стековая память – это туннель с тупиком в конце, состоящий из ячеек памяти. По мере заполнения ячеек памяти первые данные уходят в глубь стека, и добраться до них можно, только вытащив сначала последние введенные данные. Допустим, если мы запишем в стек последовательно три числа: 10,20 и 30, то для того, чтобы затем извлечь из стековой памяти число 10, предварительно придется извлечь числа 30 и 20. Т.е., значение записанное последним всегда будет прочитано первым.

Стек широко используются не только МК в своих целях, но и программистами.

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

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

Для организации процесса записи данных в стек и их чтения предназначен указатель стека.

В указателе стека содержится адрес ячейки памяти, в которую будут записаны или считаны данные.

Для программиста в системе команд МК есть две специальные команды:

– PUSH – команда записи в стек

– POP – команда чтения из стека

Давайте рассмотрим как происходит запись в стек и чтение из него.

Запись данных в стек:

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

По команде PUSH МК записывает данные из указанного нами РОН в память данных по адресу, на который указывает указатель стека, а затем уменьшает содержимое стека на 1 (если указатель восьмиразрядный) или на 2 (если указатель шестнадцатиразрядный). Новая команда PUSH запишет данные в следующую ячейку ОЗУ и опять уменьшит содержимое указателя стека. И так, далее.

Чтение данных из стека:

По команде POP, МК сначала увеличивает содержимое указателя стека на 1 или 2, а затем считывает данные с ячейки ОЗУ, на которую указывает указатель стека. И так, далее.