Московский государственный университет путей сообщения
Опубликован: 22.12.2006 | Доступ: свободный | Студентов: 2440 / 570 | Оценка: 4.07 / 4.02 | Длительность: 16:07:00
ISBN: 978-5-9556-0071-0
Специальности: Разработчик аппаратуры

Лекция 6: Оптимальное потактовое расписание выполнения работ в многофункциональном арифметическо-логическом устройстве

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >

Алгоритм формирования трехадресных команд.

  1. Для формирования группы команд начального считывания из ОП, выпишем в обратном порядке все цепочки имен, отделив их одну от другой и исключив из них имена констант и переменных, встречающихся в таблице соответствия или которым присваивается новое значение, т.е. находящимся правее знака \Rightarrow.

    В примере такая запись имеет вид

    ba; dc; x; alc; dc; a; b; d; dl; da; c; dc; ca; db; c; ba; a; b. (6.3)

  2. Исключая повторный анализ, сформируем последовательно команды считывания по первым именам каждой цепочки. Формирование каждой команды считывания производим по правилу:

    в слове с соответствующим кодом операции по первому адресу записываем адрес данной величины в ОП (с учетом индексирования переменной), по третьему адресу указываем очередной используемый адрес регистра из списка свободных регистров. В таблицу соответствия записываем строку, отмечающую место хранения считанной величины для ее использования в линейном участке как локальной величины. Корректируем список свободных регистров, соответственно, на количество вновь занятых регистров, увеличив размер D использованной области.

    Примечание. Оперируя адресами величин, мы, конечно же, имеем в виду математические адреса, однако предполагаем их принадлежность ОП или СОЗУ.

    Продолжая рассмотрение примера, приступим к формированию программы в трехадресных командах. Окончательный результат представлен в таблице 6.1. Команды 1-5 — сформированная группа команд считывания при первом выполнении данного шага алгоритма.

    Исключаем имена, использованные в сформированной группе команд считывания, из вспомогательной записи (6.3). В нашем примере получим запись

    l; l.(6.4)

  3. Повторяем выполнение шага 2 до исчерпания вспомогательной записи.

    При втором выполнении шага 2 в примере сформируется команда 6.

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

    • записываем код операции;
    • по первому адресу команды записываем первый справа адрес в предшествующей цепочке имен, если операция одноместная, или второй справа адрес, если операция двуместная;
    • по второму адресу команды записываем первый справа адрес в предшествующей цепочке имен — для двуместных операций;
    • по третьему адресу пишем первый адрес из списка свободных регистров, включив его в диапазон использованных адресов, D:=D+1.

    Заменяем использованную комбинацию "операция плюс два (одно) имени из предшествующей цепочки имен" на адрес результата этой операции, т.е. третий адрес команды.

    В нашем примере величины b, d, x, a, c, l находятся соответственно в регистрах r1, r2, r3, r4, r5, r6. Тогда могут быть сформированы 11 команд 7—17, результаты выполнения которых будут находиться в регистрах r7-17}. Исходная запись программы в ПОЛИЗ примет вид

    r_7 r_8-\Longrightarrow A; \notag \\
if \; Ax:0>cr_9+r_{10}:0>\vee \; then \; r_{11} b+d \times 2: \; else \notag \\
if \; Ar_{12}-0> \; then \; r_{13}c\times r_{14}: \; else \; r_{15}r_{16}:\Longrightarrow B; \notag \\
AB+c: \; if \; r_{17} \; then \; a \; else \; b \times \Longrightarrow C.
\eqno ( 6.5)

  6. Если \Rightarrow — первая операция в цепочке операций и предшествующее имя принадлежит диапазону D и представляет собой выродившуюся запись оператора присваивания, то трехадресная команда записи формируется по следующим правилам:

    а) по первому адресу пишется адрес — последнее имя из предшествующей цепочки имен;

    б) по третьему адресу пишется адрес рассчитанной величины в ОП.

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

  7. Если найден разделитель if и после него, и после последующих разделителей then и else стоят по единственному имени, в двух словах формируется четырехадресная команда if-then-else. В ней по адресу записи (у нас — по третьему адресу первого слова) записывается первый адрес из списка свободных регистров (с коррекцией значения D ), по первому адресу первого слова записывается адрес условия, по вторым адресам — адреса альтернатив. Конструкция if-then-else в записи программы заменяется сформированным адресом результата.

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

При следующем просмотре записи на ПОЛИЗ сформируются команды 18—23 и запись примет вид

r_{18}\Longrightarrow A; \; if \; ax:0 > r_{19}r_9 :0> \vee \; then \;
}r_{20}d \times :2 \notag \\
else \; if \; Ar_{11} - 0 > \; then \; r_{21}r_{13}: \; else \; 
r_{22} \Longrightarrow B; \notag \\
AB+c: r_{23} \times \Longrightarrow C.
\eqno ( 6.6)

Теперь формируются следующие шесть команд, и запись принимает вид

if \; r_{24} 0 > r_{25} 0 > \vee \; then \; r_{26} 2: \; else \; if \;
r_{27} 0 > \; then \notag \\
r_{28} \; else \; if \; r_{22} \Longrightarrow B; r_{18} B + c: r_{23}
\times \Longrightarrow C.
\eqno ( 6.7)

Аналогично формируются команды 30—33, в результате чего запись (6.7) преобразуется

if \; r_{29} r_{30} \vee \; then \; r_{31}\mbox \; else \; if \; r_{32} \; then \; \notag \\
r_{28} \; else \; if \; r_{22} \Longrightarrow B; r_{18} B + c: r_{23}
\times \Longrightarrow C.
\eqno ( 6.8)

Затем формируются команды 34 и 35, и запись (6.8) обретает вид

if \; r_{33} \; then \; r_{31} \; else \; r_{34}
\Longrightarrow B; \notag \\
r_{18} B + c: r_{23} \times \Longrightarrow C.
\eqno ( 6.9)

Затем формируется команда 36, и запись принимает вид

r_{35} \Longrightarrow B; \notag \\
r_{18} B + c: r_{23} \times \Longrightarrow C.
\eqno ( 6.10)

Аналогично формируются остальные команды.

Таблица 6.1.
КОП A1 A2 A3 \alpha Счетчик (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 \uparrow 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 \Lambda 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>

< Лекция 5 || Лекция 6: 12345 || Лекция 7 >