Лекция 6: Оптимальное потактовое расписание выполнения работ в многофункциональном арифметическо-логическом устройстве
Алгоритм формирования трехадресных команд.
-
Для формирования группы команд начального считывания из ОП, выпишем в обратном порядке все цепочки имен, отделив их одну от другой и исключив из них имена констант и переменных, встречающихся в таблице соответствия или которым присваивается новое значение, т.е. находящимся правее знака
В примере такая запись имеет вид
ba; dc; x; alc; dc; a; b; d; dl; da; c; dc; ca; db; c; ba; a; b. (6.3)
-
Исключая повторный анализ, сформируем последовательно команды считывания по первым именам каждой цепочки. Формирование каждой команды считывания производим по правилу:
в слове с соответствующим кодом операции по первому адресу записываем адрес данной величины в ОП (с учетом индексирования переменной), по третьему адресу указываем очередной используемый адрес регистра из списка свободных регистров. В таблицу соответствия записываем строку, отмечающую место хранения считанной величины для ее использования в линейном участке как локальной величины. Корректируем список свободных регистров, соответственно, на количество вновь занятых регистров, увеличив размер D использованной области.
Примечание. Оперируя адресами величин, мы, конечно же, имеем в виду математические адреса, однако предполагаем их принадлежность ОП или СОЗУ.Продолжая рассмотрение примера, приступим к формированию программы в трехадресных командах. Окончательный результат представлен в таблице 6.1. Команды 1-5 — сформированная группа команд считывания при первом выполнении данного шага алгоритма.
Исключаем имена, использованные в сформированной группе команд считывания, из вспомогательной записи (6.3). В нашем примере получим запись
l; l.(6.4)
-
Повторяем выполнение шага 2 до исчерпания вспомогательной записи.
При втором выполнении шага 2 в примере сформируется команда 6.
- На основе таблицы соответствия адресов произведем подстановку в программу на ПОЛИЗ вместо имен — адресов соответствующих величин в СОЗУ.
-
Просматриваем слева направо цепочки операций. Если в цепочке имен, стоящей перед первой операцией в анализируемой цепочке, есть хотя бы одно имя - для одноместной операции, и хотя бы два имени — для двуместной, и оба имени уже являются адресами из использованного диапазона ( 1 — D ) списка свободных регистров ( A и В в нашем примере не скоро будут заменены таким адресом), формируем трехадресную команду по следующим правилам:
- записываем код операции;
- по первому адресу команды записываем первый справа адрес в предшествующей цепочке имен, если операция одноместная, или второй справа адрес, если операция двуместная;
- по второму адресу команды записываем первый справа адрес в предшествующей цепочке имен — для двуместных операций;
- по третьему адресу пишем первый адрес из списка свободных регистров, включив его в диапазон использованных адресов, D:=D+1.
Заменяем использованную комбинацию "операция плюс два (одно) имени из предшествующей цепочки имен" на адрес результата этой операции, т.е. третий адрес команды.
В нашем примере величины b, d, x, a, c, l находятся соответственно в регистрах r1, r2, r3, r4, r5, r6. Тогда могут быть сформированы 11 команд 7—17, результаты выполнения которых будут находиться в регистрах r7-17}. Исходная запись программы в ПОЛИЗ примет вид
( 6.5) -
Если — первая операция в цепочке операций и предшествующее имя принадлежит диапазону D и представляет собой выродившуюся запись оператора присваивания, то трехадресная команда записи формируется по следующим правилам:
а) по первому адресу пишется адрес — последнее имя из предшествующей цепочки имен;
б) по третьему адресу пишется адрес рассчитанной величины в ОП.
Производится замена имени данной величины в текущем виде записи программы на адрес регистра, в котором она получена. Породившая же команду конструкция из записи исключается.
- Если найден разделитель if и после него, и после последующих разделителей then и else стоят по единственному имени, в двух словах формируется четырехадресная команда if-then-else. В ней по адресу записи (у нас — по третьему адресу первого слова) записывается первый адрес из списка свободных регистров (с коррекцией значения D ), по первому адресу первого слова записывается адрес условия, по вторым адресам — адреса альтернатив. Конструкция if-then-else в записи программы заменяется сформированным адресом результата.
Мы продолжим рассмотрение примера компоновки трехадресных команд, начатое параллельно с описанием алгоритма.
При следующем просмотре записи на ПОЛИЗ сформируются команды 18—23 и запись примет вид
( 6.6) |
Теперь формируются следующие шесть команд, и запись принимает вид
( 6.7) |
Аналогично формируются команды 30—33, в результате чего запись (6.7) преобразуется
( 6.8) |
Затем формируются команды 34 и 35, и запись (6.8) обретает вид
( 6.9) |
Затем формируется команда 36, и запись принимает вид
( 6.10) |
Аналогично формируются остальные команды.
№ | КОП | A1 | A2 | A3 | Счетчик (1-й такт) | Счетчик (2-й такт) | Счетчик (3-й такт) | |
---|---|---|---|---|---|---|---|---|
1 | Сч | <b> | r1 | |||||
2 | Сч | <d> | r2 | |||||
3 | Сч | <x> | r3 | |||||
4 | Сч | <a> | r4 | |||||
5 | Сч | <c> | r5 | |||||
6 | Сч | <l> | r6 | |||||
7 | x | r4 | r1 | r7 | 1 | 5 | 4 | 3 |
8 | x | r5 | r2 | r8 | 1 | 5 | 4 | |
9 | : | r6 | r4 | r9 | 1 | 7 | 6 | 5 |
10 | - | r5 | r2 | r10 | 1 | 3 | 2 | 1 |
11 | r4 | 2 | r11 | 1 | 5 | |||
12 | : | r6 | r2 | r12 | 1 | 7 | 6 | |
13 | + | r4 | r2 | r13 | 1 | 3 | 2 | 1 |
14 | - | r5 | r2 | r14 | 1 | 3 | 2 | |
15 | + | r4 | r5 | r15 | 1 | 3 | 2 | |
16 | + | r1 | r2 | r16 | 1 | 3 | ||
17 | > | r4 | r1 | r17 | 1 | 2 | 1 | Исключ. |
18 | - | r7 | r8 | r18 | ||||
19 | + | r5 | r9 | r19 | ||||
20 | + | r11 | r1 | r20 | ||||
21 | x | r13 | r5 | r21 | ||||
22 | : | r15 | r16 | r22 | ||||
23 | if... | r17 | r4 | r23 | 2 | |||
r1 | ||||||||
24 | Зп | r18 | <A> | |||||
25 | : | r18 | r3 | r24 | ||||
26 | :r19 | r10 | r25 | |||||
27 | x | r20 | r2 | r26 | ||||
28 | - | r18 | r12 | r27 | ||||
29 | : | r21 | r14 | r28 | ||||
30 | > | r24 | r29 | |||||
31 | > | r25 | r30 | |||||
32 | : | r26 | 2 | r31 | ||||
33 | > | r27 | r32 | |||||
34 | r29 | r30 | r33 | |||||
35 | if... | r32 | r28 | r34 | ||||
r22 | ||||||||
36 | if... | r23 | r28 | r34 | ||||
r34 | ||||||||
37 | Зп | r35 | <B> | |||||
38 | + | r18 | r35 | r36 | ||||
39 | : | r36 | r5 | r37 | ||||
40 | x | r37 | r23 | r38 | ||||
41 | Зп | r38 | <C> |