Системное программное обеспечение: Основы трансляции. Карпушин А.Н - 53 стр.

UptoLike

55
Шаг1: Code(U2)
mov A,ax ;операция присваивания
Шаг 2:
Code(U3)
push ax
Code(U5)
mov dx,ax
pop ax
sub ax,dx
mov A,ax ;операция присваивания
Шаг 3:
Code(U4)
add ax,D
push ax
Code(U5)
mov dx,ax
pop ax
sub ax,dx
mov A,ax ;операция присваивания
Шаг 4:
mov ax,B
mul ax,C
add ax,D
push ax
Code(U5)
mov dx,ax
pop ax
sub ax,dx
mov A,ax ;операция присваивания
Шаг 5:
mov ax,B
mul ax,C
add ax,D
push ax
mov ax,B
mul ax,10
mov dx,ax
pop ax
sub ax,dx
mov A,ax ;операция присваивания
Полученный объектный код на языке ассемблера, очевидно, может быть
оптимизирован, однако для его обработки требуются специальные (ориентиро-
ванные именно на данный язык ассемблера) методы и структуры, учитывающие
взаимосвязь операций. Кроме того, ориентация на определенный язык ассемб-
лера сводит на нет универсальность метода. Так в приведенном примере ис-
пользуется команда mul, которая в ранних версиях процессоров фирмы Intel
имеет ограничения на типы операндов, а следовательно, в универсальном ком-
пиляторе не может быть использована так, как в данном примере. Это потребу-
ет, чтобы генерация кода для узлов дерева шла в зависимости не только от опе-
рандов, но и от типа операции. Обычно такие проблемы решаются тем, что
вместо команд непосредственно языка ассемблера используются команды не-
которого близкого к нему промежуточного псевдокода. Большинство этих ко-
манд один в один отображаются затем в команды языка ассемблера, другие же
однозначно преобразуются в фиксированную последовательность команд.
Построение списка триад по дереву вывода
Триады являются универсальной, машинно-независимой формой внутрен-
него представления в компиляторе результирующей объектной программы, а
потому не требуют оговорки дополнительных условий при генерации кода.
Триады взаимосвязаны между собой, поэтому для установки корректной взаи-
мосвязи процедура генерации кода должна получать также текущий номер i
очередной триады. Тогда четырем формам текущего узла дерева будут соответ-
ствовать последовательности триад объектного кода: