Машинно-независимые особенности компиляторов

Распределение памяти

Разбиение программы на блоки

Машинно-зависимые особенности компиляторов

Они связаны с программами генерации и оптимизации объектного кода.

Оптимизация, связанная с распределением регистров и перестановкой команд, обычно осуществляется с использованием промежуточной формы представления программы. В этой форме синтаксис и семантика исходной программы уже полностью проанализированы, но трансляция в машинные команды ещё не осуществлена.

Одной из таких форм является представление с помощью тетрад.

Эти тетрады могут быть сгенерированы программами генерации промежуточного представления (аналогичными тем, которые были рассмотрены ранее для генерации кода).

Для исключения ненужных операций запоминания и загрузки регистров можно изменить порядок следования тетрад.

Промежуточные результаты ij можно запомнить в рабочих переменных или регистрах, чтобы обеспечить их эффекивное использование.

После оптимизации на уровне четвёрок модифицированная последовательность этих четвёрок должна транслироваться в машинные коды.

Представим «нашу» программу с помощью четвёрок:

  := #0   SUM {SUM:= 0}
  := #0   SUMSQ {SUMSQ:= 0}
  := #1   I {FOR I:=1 TO 100}
  JGT I #100 (15)  
  CALL XREAD     {READ (VALUE)}
  PARAM VALUE      
  + SUM VALUE i1 {SUM:=SUM+VALUE}
  := i1   SUM  
  * VALUE VALUE i2 {SUMSQ:=SUMSQ+VALUE*VALUE}
  + SUMSQ i2 i3  
  := i3   SUMSQ  
  + I #1 i4 {конец цикла FOR}
  := i4   I  
  J     (4)  
  DIV SUM #100 i5 {MEAN:=SUM DIV 100}
  := i5   MEAN  
  DIV SUMSQ #100 i6 {VARIANCE:=SUMSQ DIV
  * MEAN MEAN i7 100 – MEAN * MEAN}
  - i6 i7 i8  
  := i8   VARIANCE  
  CALL XWRITE     {WRITE (MEAN,VARIANCE)}
  PARAM MEAN      
  PARAM VARIANCE      

Списки параметров для READ и WRITE представлены в виде четверок PARAM. При дальнейшей генерации кода они будут преобразованы в команды занесения параметров в стек.

Операция JGT (4) сравнивает значение двух своих операндов и осуществляет переход к четверке 15, если 1-ый операнд больше 2-го. Операция J в четвёрке (14) осуществляет переход к четвёрке (4).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: