Калабеков - микропроцессор КР580ИК80 (1084775), страница 3
Текст из файла (страница 3)
Стек — память с определенной (упрощенной) формой адресации. В микропроцессорном устройстве на МПК КР580 стек организуется следующим образом. В оперативной памяти (ОЗУ) команды размещаются в ячейках с младшими, последовательно нарастающими адресами. Стек использует ячейки со старшими адресами и по мере заполнения стека занимаются ячейки с адресами, последовательно убывающими. Таким образом, адреса этих двух частей памяти изменяются навстречу друг другу (рис. 3.7, а).
Особенность организации стека состоит в следующем. Указатель стека SP содержит так называемый адрес входа в стек; при чтении из стека производится выборка содержимого ячейки по адресу входа в стек (по адресу, хранящемуся в SP); при записи в стек вводимое в стек число помещается в ячейку с адресом, на единицу меньшим содержимого SP; одновременно с записью и чтением изменяется содержимое SP: при записи уменьшается, а при чтении увеличивается на единицу.
Обмен со стеком производится двухбайтовыми словами, занимающими две ячейки памяти. Пусть указатель стека хранит адрес А. При вводе нового слова его байты должны быть помещены в пару соседних со входом в стек ячеек, имеющих адреса А-1 и А-2. Таким образом, ввод в стек сводится к следующей последовательности действий: содержимое SP уменьшается на единицу и по образующемуся в SP адресу помещается старший байт вводимого двухбайтового слова: затем содержимое SP вновь уменьшается на единицу и по образующемуся в нем адресу помещается младший байт вводимого слова (рис. 3.7,б).
Рис 3.7. Стек: а)организация стека в ОЗУ; б)процессы при записи в стек; в)процессы при чтении из стека.
Мы видим, что SP каждый раз указывает адрес последней ячейки, занятой под стек,— так называемый вход в стек.
Вывод данных из стека производится также двухбайтовыми словами. При этом каждый раз доступна для чтения лишь ячейка, адрес которой содержится в SP. Если указатель стека хранит адрес А, то байты выводимого из стека слова выбираются из ячеек памяти, имеющих адреса А и А+1. Таким образом, выбор слова из стека сводится к такой последовательности действий: чтение младшего байта выводимого слова из ячейки, адресом которой служит содержимое SP, и увеличение содержимого SP на единицу; затем чтение старшего байта выводимого слова по хранящемуся в SP адресу и увеличение содержимого SP на единицу (рис. 3.7, в).
О таком принципе функционирования, когда читается последняя помещенная в память информация, говорят как о принципе «последним вошел — первым вышел». Как видим, при записи и чтении производится обращение в ячейку, адрес которой связан с содержимым SP. Это упрощает адресацию памяти, но исключает возможность обращения в произвольную ячейку памяти.
Рассмотрим команды некоторых операций со стеком.
Установка в SP некоторого начального значения производится по команде пересылки SPHL (11 111 001). По этой команде в SP пересылается содержимое пары регистров HL.
Команда ввода из пары регистров DE в стек: PUSH D (11 010 101). В разрядах D5D4D3 кодовой комбинации команды указан адрес 010 старшего регистра пары DЕ. По этой команде выполняются следующие действия: SP (SP) - 1; [(SP)] (D); SP (SP) - 1; [(SP)] (E).
Команда пересылки из стека в пару регистров DЕ: POP D (11 010 001). Здесь в разрядах D5D4D3 кодовой комбинации команды указан адрес 010 старшего регистра пары DЕ. По данной команде выполняются действия: Е [(SP)]; SP (SP) +1; D [(SP)]; SP (SP)+1.
ЗАПУСК МИКРОПРОЦЕССОРА
После подачи на соответствующие входы микропроцессора питающих напряжений и тактовых импульсов последовательностей Ф1 и Ф2 подается сигнал уровня лог. 1 на вход Сброс. Этим сигналом сбрасываются в состояние лог. О счетчик команд PC, регистр команд, размещенные в управляющем устройстве триггеры разрешения прерывания, подтверждения захвата и ожидания. После окончания действия сигнала Сброс (при переходе сигнала от уровня лог. 1 к уровню лог. 0) микропроцессор начинает работать с такта Т1 цикла M1 и выдает на шину адреса нулевое значение адреса. Содержимое регистров блока РОН, аккумулятора, регистра признаков меняется только в процессе выполнения команд.
СОСТОЯНИЕ ЗАХВАТА
Состояние захвата характеризуется тем, что микропроцессор, заканчивая выполнение текущего цикла команды, переводит буферы шины данных и буферы шины адреса в третье состояние. При этом микропроцессор отключается от внешних шин, предоставляя их в распоряжение некоторого внешнего устройства, и останавливает работу.
Переход в состояние захвата происходит следующим образом. От внешнего устройства поступает сигнал уровня лог. 1 на вход Запрос захвата. Этот сигнал на отрицательном фронте импульса Ф2 такта Т2 принимается в триггер захвата управляющего устройства. Управляющее устройство заканчивает выполнение текущего цикла, переходит в состояние захвата и подтверждает это выдачей сигнала на выходе Подтверждение захвата. Сигнал на выходе Подтверждение захвата выдается на положительном фронте импульса Ф1 в такте Т3, если текущий цикл не является циклом записи; в противном случае этот сигнал выдается на положительном фронте импульса Ф1 такта, следующего за тактом Т3.
После окончания действия сигнала Захват (при переходе от уровня лог. 1 к уровню лог. 0) микропроцессор начинает выполнение следующего цикла с места, где было приостановлено исполнение программы.
СОСТОЯНИЕ ПРЕРЫВАНИЯ
В микропроцессоре предусмотрена возможность по запросам внешних устройств прерывать выполнение текущей программы и переходить на выполнение новой программы, так называемой прерывающей программы (или программы обслуживания прерывания). После окончания выполнения прерывающей программы микропроцессор возвращается к выполнению основной программы с команды, на которой произошло прерывание.
Если на некотором участке программы допускается ее прерывание, то при составлении программы в начале этого участка предусматривается команда EI, по которой триггер разрешения прерывания в управляющем устройстве микропроцессора устанавливается в состояние лог. 1, а в конце участка — команда DI, при выполнении которой триггер сбрасывается в состояние лог. 0. Состояние триггера выдается на выход Разрешение прерывания.
Процесс прерывания связан со следующими действиями. От внешнего устройства поступает сигнал уровня лог. 1 на вход Запрос прерывания. Если прерывание разрешено (т. е. на выходе Разрешение прерывания имеется уровень лог. 1), то после окончания выполнения текущей команды триггер разрешения прерывания сбрасывается в состояние лог. 0, а в информации о состоянии микропроцессора, выдаваемой на шину данных, появляются сигналы Подтверждение прерывания (в разряде D0), Ввод (в разряде D1) и сигнал о том, что в данном цикле производится прием первого байта команды (в разряде D5). Сигнал Подтверждение прерывания используется в качестве строба для выдачи внешним устройством на шину данных команды RST (команды Рестарт).
При выполнении команды RST содержимое счетчика команд PC запоминается в стеке, а в счетчик команд PC записывается адрес первой команды прерывающей программы. Этот адрес задается следующим образом. Команда RST имеет структуру 11 ААА 111 и в счетчик команд заносится значение 00 000 000 00 ААА 000, которое и служит адресом первой команды прерывающей программы. Задавая определенную трехразрядную кодовую комбинацию ААА, внешнее устройство может задать адрес первой команды одной из восьми прерывающих программ.
После окончания выполнения прерывающей программы возврат в основную программу происходит следующим образом. Прерывающая программа заканчивается командой RET (Возврат из подпрограммы). В процессе выполнения этой команды адрес команды основной программы, перед которой произошло прерывание, выбирается - из стека и передается в регистр адреса, а увеличенное на единицу значение заносится в счетчик команд.
СОСТОЯНИЕ ОСТАНОВА
В системе команд микропроцессора имеется команда HLT (Останов), которая вызывает прекращение выполнения программы и переход в состояние останова. Это состояние характеризуется тем что буферы шины адреса и шины данных переходят в третье состояние микропроцессор отключается от внешних шин и на выходе Ожидание устанавливается уровень лог. 1.
Состояние останова может быть прервано сигналами запуска микропроцессора либо перевода его в состояние прерывания.
3.3. ПРИЕМЫ ПРОГРАММИРОВАНИЯ МИКРОПРОЦЕССОРА НА ЯЗЫКЕ КОДОВЫХ КОМБИНАЦИИ
ПРОГРАММИРОВАНИЕ ПОСЛЕДОВАТЕЛЬНЫХ УЧАСТКОВ
АЛГОРИТМА
Будем рассматривать программирование участков алгоритма не содержащих разветвлений.
Пример 3.1. Требуется принять из ОЗУ два числа, хранящихся в соседних ячейках, и, вычислив разность чисел, поместить ее в ОЗУ на место второго числа. Будем считать, что адрес первого числа хранится в паре регистров HL, адрес второго числа на единицу больше содержимого этих регистров.
На рис. 3.8 приведена схема алгоритма решения данной задачи, построенная в операциях, выполняемых микропроцессором серии КР580. Рассмотрим операции, выполняемые в каждом из блоков схемы алгоритма.
Блок 1 производит прием в аккумулятор содержимого ячейки ОЗУ (М), адресом которой служит содержимое пары регистров HL; таким образом, в регистр А принимается первое из чисел; эта операция может быть выполнена командой пересылки регистр — регистр (мнемоническое обозначение команды MOV А, М).
Блок 2 формирует в паре регистров HL адрес второго числа; эта операция выполняется командой приращения пары регистров (мнемоника команды INX Н).
Блок 3 производит вычисление разности содержимого аккумулятора (А) и содержимого ячейки ОЗУ (М), адресом которой служит содержимое пары регистров HL; операция выполняется командой вычитания SUB М.
Блок 4 пересылает в память полученную в аккумуляторе разность;
выполняющая эту операцию команда имеет мнемонику MOV М, А.
В табл. 3.5 приведена программа рассматриваемой задачи с представлением команд в кодовых комбинациях.
Команды программы при отсутствии условных и безусловных переходов размещаются в ячейках памяти с последовательно нарастающими адресами. При построении данной программы размещение команд произведено, начиная с ячейки, имеющей адрес 005016.
Общее число тактов, необходимых для выполнения приведенных четырех команд.
Nт= 7+5+7+7 = 26 и общее время их исполнения
tисц =Nт= 26 * 0,5= 13 мкс.
Рассмотрим пример программирования с использованием содержимого триггера регистров признаков.
Пример 3.2. Требуется выполнить операцию арифметического сдвига вправо над содержимым регистра D.
Особенность арифметического сдвига вправо состоит в том, что при сдвиге содержимое старшего (знакового) разряда регистра сохраняется неизменным (рис. 3.9, а). Таким образом, при выполнении этой операции требуется предварительно запомнить содержимое старшего разряда и затем, сдвинув вправо содержимое регистра, вписать в его старший разряд цифру, которую ранее запомнили. Эти действия выполняются в фрагменте программы, схема алгоритма которой представлена на рис. 3.9, б. Так как операции сдвига выполняются только над содержимым аккумулятора, блок 1 пересылает в аккумулятор содержимое регистра D. Операции, выполняемые в последующих блоках, иллюстрируются табл. 3.6.
Выполняется операция циклического сдвига влево без переноса (блок 2). В результате выполнения этой операции знак числа (в табл. 3.6 он выделен полужирным шрифтом) передается в младший разряд аккумулятора и в триггер переноса Тс.
Затем дважды выполняется операция циклического сдвига вправо с переносом (блоки 3 и 4). В результате выполнения первой операции сдвига в аккумуляторе восстанавливается исходное число, а в триггере Тс оказывается продублированным знак числа. После выполнения второй операции сдвига в аккумуляторе оказывается число, являющееся результатом выполнения арифметического сдвига вправо.
В
табл. 3.7 приведена соответствующая схеме алгоритма на рис.3.9 программа с представлением команд в кодовых комбинациях.
ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЕНИЙ
Пусть требуется проанализировать содержимое младшего разряда числа, хранящегося в регистре В. Если оно равно нулю, то к содержимому регистра В следует прибавить содержимое регистра С; если оно равно единице, то к содержимому регистра В следует прибавить содержимое регистра D.
Н а рис. 3.10 показана схема алгоритма этой задачи. Здесь блоки 1 и 2 осуществляют передачу содержимого младшего разряда регистра В в триггер Тс регистра признаков. Блок 3 реализует разветвление по содержимому триггера Тс: в зависимости от значения содержимого этого триггера в аккумулятор передается либо содержимое регистра С (блок 4) либо содержимое регистра D (блок 5). Блок 6 осуществляет сложение. Блок 7 полученную в аккумуляторе сумму пересылает в регистр В.
В табл. 3.8 показано размещение в ОП команд, реализующим рассмотренный алгоритм.
Пусть команда, реализующая операцию блока 1, помещается в ячейку ОП с адресом 0167. При выполнении программы следующая команда будет считываться из соседней ячейки 0168 и в этой ячейке должна храниться команда, реализующая операцию блока 2. Затем из трех очередных ячеек 0169, 016А, 016В должна считываться трехбайтовая команда условного перехода по (Тс) = 1 (блок 3): при (Тс) = 0 не происходит нарушения естественного порядка следования ячеек, из которых при исполнении программы считываются команды, и очередная команда (блок 4) считывается из ячейки с адресом 016С; при (Тс) = 1 происходит переход к ячейке 0170 (этот адрес приводится во втором и третьем байтах команды условного перехода), хранящей команду блока 5. Далее, независимо от того, выполняется ли команда блока 4 либо команда блока 5, следующим действием должно быть выполнение операции, предусматриваемой блоком 6. После выполнения команды, считываемой из ячейки 0170, очередная команда блока 6 считывается из соседней ячейки 0171. Но если выполняется команда блока 4, то после ее выполнения переход к ячейке 0171 может быть выполнен трехбайтовой командой безусловного перехода, помещаемой в ячейки 016D, 016Е, 016F (во втором и третьем байтах этой команды указывается адрес перехода 0171). Затем из очередной ячейки 0172 считывается команда, выполняющая операцию блока 7.