Приемы программирования микропроцессора на языке кодовых комбинаций
8.2.5.1 .Программирование последовательных участков алгоритма
Рассмотрим программирование участков алгоритма, не содержащих разветвлений.
Пример. Требуется принять из ОЗУ два числа, хранящихся в соседних ячейках с адресами 027616 и 027716 и, вычислив сумму чисел, поместить ее в ОЗУ на место второго из суммируемых чисел.
На рисунке 8.2.5.1.1 приведена схема алгоритма решения данной задачи микропроцессором серии КР580. Рассмотрим операции, выполняемые в каждом из блоков схемы алгоритма.
Рисунок 8.2.5.1.1
Блок 1: в пару регистров HL заносится адрес первого числа.
Блок 2: в аккумулятор принимается содержимое ячейки ОЗУ (первое число), адресом которой служит содержимое пары регистров HL; эта операция выполняется командой пересылки "регистр – регистр" (мнемоническое обозначение команды MOV A, M).
Блок 3: в паре регистров HL формируется адрес второго числа; эта операция выполняется командой приращения пары регистров (мнемоника команды INX Н).
Блок 4: вычисляется сумма содержимого аккумулятора (А) и содержимого ячейки ОЗУ (М), адресом которой служит содержимое пары регистров HL; операция выполняется командой суммирования ADD M.
Блок 5: полученная в аккумуляторе сумма пересылается в память; выполняющая эту операцию команда имеет мнемонику MOV M, А.
В таблице приведена программа рассматриваемой задачи с представлением команд в кодовых комбинациях.
Команды программы при отсутствии условных и безусловных переходов (так называемой последовательной программы) размещаются в ячейках памяти с последовательно нарастающими адресами.
При построении данной программы размещение команд произведено, начиная с ячейки, имеющей адрес 005016.
Общее число тактов, необходимых для выполнения приведенных пяти команд, Nт= 10 + 7 + 5 + 7 + 7 = 36, и при длительности тактового периода Т= 0,5 мкс общее время их исполнения tисп= Nт* T=36 0,5 = 18 мкс.
8.2.5.2. Программирование разветвлений
Пример. Требуется проанализировать содержимое младшего разряда числа, хранящегося в регистре В микропроцессора. Если оно равно нулю, то к содержимому регистра В следует прибавить содержимое регистра С; если оно равно единице, то к содержимому регистра В следует прибавить содержимое регистра D.
На рисунке 8.2.5.2.1. показана схема алгоритма решения этой задачи.
Рисунок 8.2.5.2.1.
Блоки 1 и 2 осуществляют передачу содержимого младшего разряда регистра В в триггер Тс регистра признаков.
Блок 3 реализует разветвление по содержимому триггера Тс: в зависимости от значения содержимого этого триггера.
Блок 4 в аккумулятор передается содержимое регистра С
Блок 5 в аккумулятор передается содержимое регистра D
Блок 6 осуществляет сложение.
Блок 7 полученную в аккумуляторе сумму пересылает в регистр В.
В таблице приведена программа данной задачи.
8.2.5.3. Программирование циклических вычислительных процессов
Рассмотрим выполнение операции кодового умножения двух восьмиразрядных чисел без знака. Пусть множимое хранится в паре регистров DE, где оно занимает младший регистр Е, старший регистр D пары регистров установлен в нуль. Будем считать, что множитель хранится в аккумуляторе А.. 16-разрядное произведение будем формировать в паре регистров HL.
Процесс получения произведения организуем следующим образом. Будем анализировать разряды множителя, начиная с его старшего разряда. В соответствии с этим частичные произведения будут формироваться, начиная со старшего частичного произведения. Накопление суммы частичных произведений будем производить в паре регистров HL, т. е. к содержимому предварительно сброшенной в нуль пары регистров HL вначале прибавим восьмое частичное произведение; затем, сдвинув на один разряд влево содержимое пары регистров HL, прибавим седьмое частичное произведение, и так далее, пока не будут просуммированы все частичные произведения.
Таким образом, этот процесс носит циклический характер: цикл, содержащий операции сдвига влево содержимого пары регистров HL, формирования и прибавления к содержимому пары регистров HL очередного частичного произведения, должен быть повторен восемь раз.
Для счета числа повторений цикла организуем счетчик на регистре В. В этот регистр предварительно занесем число 8 и после каждого повторения цикла будем вычитать единицу из содержимого регистра В, проверяя затем, равно ли нулю его содержимое.
При достижении нулевого значения производится выход из цикла.
На рисунке 8.2.5.3.1. представлена схема алгоритма.
Рисунок 8.2.5.3.1.
Блок 1 производит установку нулевого значения в паре регистров HL.
Блок 2 устанавливает в регистре В (счетчике) начальное значение 8.
Блок 3 производит сдвиг на один разряд влево содержимого пары регистров HL; эта операция выполняется путем удвоения содержимого пары регистров:
HL ← (HL) + (HL).
Блок 4 предназначен для анализа очередного разряда множителя; для этого содержимое аккумулятора А сдвигается влево, в результате чего очередной разряд хранимого в нем множителя передается в триггер Тс регистра признаков.
Блок 5 производит разветвление по содержимому триггера Тс.
Блок 6 при (Тс) = 1 выполняется операция прибавления множимого (содержимого пары регистров DE) к сумме предыдущих частичных произведений в паре регистров HL. При (Тс) = 0 операция суммирования не выполняется, по команде условного перехода осуществляется переход к команде блока 7.
Блок 7 производит вычитание единицы из содержимого счетчика (регистра В).
Блок 8 выполняет разветвление по содержимому триггера Tz регистра признаков. Если при выполнении команды блока 7 в регистре В образуется нулевое значение, в триггере Tz устанавливается 1, происходит выход из цикла и переход к очередной команде. Если содержимое регистра В не равно нулю, то в триггере Tz устанавливается 0 и команда условного перехода производит переход к команде блока 3, вызывая очередное повторение выполнения тела цикла.
В таблице приведена программа рассматриваемой операции умножения.
В цикле выполняются команды блоков 3 – 8. Определим количество тактов Nт1, требуемое для однократного прохождения цикла алгоритма. При этом будем полагать, что во всех разрядах множителя содержатся единицы (случай с точки зрения быстродействия наиболее тяжелый):
Число тактов при восьмикратном прохождении цикла