ВУЗ:
Составители:
105
18. МЕТОДЫ ГЕНЕРИРОВАНИЯ КОДА
Обычно одинаковые фрагменты внутренней записи кода (операция в
постфиксной записи, четверка и пр.) формируют одни и те же команды
машинного языка. Например, четверка PLUS_OP в случае, если все операции
в процессоре, для которого генерируется код, выполняются над регистром-
аккумулятором, всегда генерирует следующий код:
LOAD регистр, операнд 1
ADD регистр, операнд 2
STORE регистр, результат
Эта последовательность машинных команд является всегда
корректной, но не обязательно оптимальной. Например, предложение X :=
X+Y*Z реализуется шестью командами:
LOAD регистр, Y (четверка (MULT_OP,Sy,Sz,T1))
MUL регистр, Z
STORE регистр,T1
LOAD регистр, X (четверка (ADD_OP,Sx,T1,Sx))
ADD регистр,T1
STORE регистр, X
в то время как можно построить более кототкую программу, дающую тот же
результат:
LOAD регистр, Y
MUL регистр, Z
ADD регистр, X
STORE регистр, X
Отметим, что код
, который генерируется непосредственным образом,
является всегда правильным, но не всегда оптимальным. Поэтому
желательно иметь средства, позволяющие изменить код, не влияя на
корректность вычислений.
Так как каждой четверке (или другому элементу промежуточной
записи) в большинстве случаев соответствует единственная
105 18. МЕТОДЫ ГЕНЕРИРОВАНИЯ КОДА Обычно одинаковые фрагменты внутренней записи кода (операция в постфиксной записи, четверка и пр.) формируют одни и те же команды машинного языка. Например, четверка PLUS_OP в случае, если все операции в процессоре, для которого генерируется код, выполняются над регистром- аккумулятором, всегда генерирует следующий код: LOAD регистр, операнд 1 ADD регистр, операнд 2 STORE регистр, результат Эта последовательность машинных команд является всегда корректной, но не обязательно оптимальной. Например, предложение X := X+Y*Z реализуется шестью командами: LOAD регистр, Y (четверка (MULT_OP,Sy,Sz,T1)) MUL регистр, Z STORE регистр,T1 LOAD регистр, X (четверка (ADD_OP,Sx,T1,Sx)) ADD регистр,T1 STORE регистр, X в то время как можно построить более кототкую программу, дающую тот же результат: LOAD регистр, Y MUL регистр, Z ADD регистр, X STORE регистр, X Отметим, что код, который генерируется непосредственным образом, является всегда правильным, но не всегда оптимальным. Поэтому желательно иметь средства, позволяющие изменить код, не влияя на корректность вычислений. Так как каждой четверке (или другому элементу промежуточной записи) в большинстве случаев соответствует единственная
Страницы
- « первая
- ‹ предыдущая
- …
- 103
- 104
- 105
- 106
- 107
- …
- следующая ›
- последняя »