Es-compiler-design-compiler-design-code-generation

提供:Dev Guides
移動先:案内検索

CompiladorDiseño-GenecorióndeCódigo

最終決定の最終段階。 コーディゴの一般的な方法、コーディゴの最適化されたプロセス、およびコーディゴの一般的な方法の一部です。 エル・コディゴ・ジェネラード・ポル・エル・エル・コンピラドール・エス・コ・ディゴ・デ・オブ・オブ・アルグノス・デ・メナー・ニヴェル ヘモス・ヴィスト・ケ・エル・コーディゴ・フエンテ・エスクリト・アン・レンガヘ・デ・マヨール・ニヴェル・セ・トランスフォーマー・アンド・アン・メナー・ニヴェル・デ・イディオマ

  • Debe llevar el significado exacto delcódigofuente。
  • CPUを使用したメモリ管理の効率的な管理。

Ahora veremoscómoelcódigointertransio en objetivocódigoobjeto(en esamblado、en este caso)。

Gráficodirigidosacíclicos

有向非巡回グラフ(DAG)は、基本構造のブロック構造を表すHerramienta que esを参照してください。 DAG proporcionafáciltransformaciónen bloquesbásicos。 DAG se puede entenderaquí:

  • Nodos Hojaは、特定の識別子、定数または定数を表しています。
  • Los nodos interioresは、ロスオペラドールを表します。
  • Tambiénlos nodos interioresは、los identificadoresまたはnombre donde los valores se va a almacenar o asignadoのlas expresionesを表します。

例:

t0 = a + b
t1 = t0 + c
d = t0 + t1
a

DirigidoAcíclicosGráfico

[t〜0〜= a + b]

a

DirigidoacíclicosGráfico

[t〜1〜= t〜0〜+ c]

a

OptimizaciónMirilla

最適化された技術の最適化と最適化の最適化。 地元のニベル、es decir unapequeñaporcióndel bloque decódigoa mano。 ロスコーディゴスの合衆国間での合衆国の合衆国、スペイン 最適化された宣言の分析と分析:最適化の可能性:

Eliminacióninstrucciones冗長

ニコル・デ・コディゴ・フエンテ、エル・シギエンテ・プエデ・セル・ヘコ・ポル・エル・スアリオ

int add_ten(int x)
   {
   int y, z;
   y = 10;
   z = x + y;
   return z;
   }
int add_ten(int x)
   {
   int y;
   y = 10;
   y = x + y;
   return y;
   }
int add_ten(int x)
   {
   int y = 10;
   return x + y;
   }
int add_ten(int x)
   {
   return x + 10;
   }

en lacompilación、el compilador busca instruccionesはen la naturalezaを冗長にします。 Cargar y almacenarmúltiplesde instrucciones puede llevar el mismo significado aun cuando algunos de ellos se quitan。 イェンプロによる:

  • MOV x、R0
  • MOV R0、R1

Podemos eliminar la primerainstruccióny re-escribir la frase como:

MOV x, R1

不可解なコディゴ

プログラミング不可能なプログラムのコードは、プログラムのコンストラクションを許可されています。 ロス・プログラムは、アル・カンザードにあるコーディゴ・ケ・ヌンカ・プエデ・セル・アルカンザードで事故を起こした。

例:

void add_ten(int x)
{
   return x + 10;
   printf(“value of x is %d”, x);
}

コードゴ、ラ・インストルーションについて printf 制御プログラムのプログラムは、プエダ・エジェキューター、ポル・ロ・タント、 printf プエデ・セル・エリミナドを制御します。

フルージョの最適制御

干し草のカサゴは、プログラムの制御を制御します。 Estos saltos se puede quitar。 コーディゴの断片を考慮してください:

...
MOV R1, R2
GOTO L1
...
L1 :   GOTO L2
L2 :   INC R1

L1のエディトリアルコーディゴ、エチケット、エンターテインメントモーメントパサエルはL2を制御します。 タントによって、L1 yのルーガー、連続L2、L2のコントロール、L2のコントロールコントロールL2、連続したミュージシャンの連続:

...
MOV R1, R2
GOTO L2
...
L2 :   INC R1

Expresiónalgebraicasimplificación

Hay ocasiones en que las expresiones algebraicas se puede hacer simple。 por ejemplo、laexpresión a = a + 0 puede ser sustituido por una misma y laexpresióna = a + 1 simplemente debe sustituirse por el INC。

レドゥッション・フエルザ

干し草のオペラシオンは、マスティエンポとエスパシオを消費します。 Su "fuerza" puede reducirse mediante susustituciónpor ot ras operaciones que消費されるmenos tiempo y espacio、peroproducen el mismo resultado。

Por ejemplo、 x 2 puede ser sustituido por x << 1 ,, en el que involucrasóloun desplazamiento a la izquierda。 Aunque la salida de un a y a ^ 2 ^ es la misma、a ^ 2 ^ es muchomáseficaz para suaplicación。

Acceso a las instrucciones demáquina

デスティノプエデインストルメンタルラスインストルチコンズマズソフィスティカドス、クエプエデンテナーラカパシディッドデリアリザールオペラシオンスペシフィカズスペシフィフィカスムコマスエフィシェンテス。 デスティノプエデダルカビダエサインストルシオンダイレクタメンテ、キューソーラヴァアメジョラーラカリダードデルコーディゴ、シノケタンビエンプロドゥズカンリザルトドスマスエフィシェンテス。

ジェネラル・デ・コディゴ

エスペラクエドテンガウナジェネラダーデコンドシオンデラマキナデデスティノエントルノデデエジェクシオンアンドスコンジャントデインストルシコン。 コーディゴデジェネラルジェネレーションエルコーディゴ

  • Idioma de destino :コディゴの母体は、自然界のイディオマデルデイディオマデデスティノパラエルエルコディゴセハトランスフォーメードから生まれました。 Que el lenguaje puede facilitar algunas de las instruccionesespecíficaspara ayudar a el compilador gener el elcódigoen una formamáscómoda。 デスティノプエデテナープロセサーRISCまたはCISC arquitectura
  • Tipo de infrarrojos :中間メディアの代表的なダイバーサの代表者。 抽象構文ツリー(AST)構造、NotaciónPolaca Inversa、3-códigodedirección。
  • インストラクションの選択:コーディゴティエネジェネラルインターメディアコモエントラダイコンヴィリエ(マパス)エンラマキナデデスティノ。 ウナ代表者代表者ムスタスフォルマス(インストルクシオン)パラ転換者、コンゴ、コンドゴ、パラエレギール、サビアメントラスインストルチコネスアデクアダスの代表者。
  • 登録機関の登録:un programa tiene ununúmerode valores que se mantiene durante laejecución。 ラ・マキナ・デ・ラ・マキナ・デ・デスティノ・プエデ・パーミスター・ク・トドス・ロス・バロレス・ケ・セ・ガーダン・アン・ラ・メモリア・デ・ラ・CPU・オー・デ・ロス・レジストス。 ジェネラドール・デ・コディゴは、男性登録者とロス登録者の価値を決定します。 Asimismo、se los registros con el fin de ser utilizado para mantener estos valores。
  • Orden de las instrucciones :エルティモ、コーディゴの母体であるエルオルデンエンケラインストルキオン、エジェクタン。 インストラクションを作成するためのリストを作成します。

記述子

セギミエント・タント・デ・ラス・レジストラ(por disponibilidad)y direcciones(ubicaciónde valores)al mismo tiempo que genera elcódigo。 アンボスカソス、ロスドスシギエンテス、およびユーティリティ記述子:

  • 登録簿:登録簿記述子は、登録簿の一般的な情報を提供します。 記録者登録簿は、ロス・バロレス・アルマセナドス・アンド・カダ・レジストロの世界遺産です。 Cada vez que un nuevo registro es necesario durante lageneracióndecódigo、este descriptor es consultes para registrar disponibilidad。
  • ラス・ディレクシオンの記述子:ロス・バロレス・デ・ロス・ノンブルス(identificadores)utilizados en el programa pueden estar almacenados en distintos lugares al mismo tiempo que en suejecución。 DememoiresDirecciónse utilizan para mantener un registro de ubicaciones de memoria donde los valores de los identificadores se almacenan。 Estas ubicacionesは、CPU、モントーネ、ピラ、メモリア、およびその他のコンビナシオンデロスルガレスを含む、CPUの登録を含んでいます。

Genoador decódigomantiene tanto el descriptor actualizado en tiempo real。 カルガの宣言、LD R1、x、コーディゴのジェネラドール:

  • xの値を持つレジスタ記述子R1を更新し、
  • アドレス記述子(x)を更新して、xの1つのインスタンスがR1にあることを示します。

ジェネラシオンデコディゴ

BloquesBásicosは、インストレシアーネのトレセの司令官です。 ジェネラル・デ・コディゴ・ティエネ・エスタ・セクエンシア・デ・インストルキオンズ・コモ・エントラーダ。

:Si el valor de un nombre se encuentra enmásde un lugar(registro、memoriacaché、o la memoria)、el valor del registroseráa preferred a lacachéy la memoria principal。 デル・ミスモ・モド・ラ・メモリリア校長 Memoriaプリンシパルes apenas ninguna preferencia。

*getreg* :汎用性のある_getreg_funciónpara determinar el estado de registros disponibles y laubicaciónde nombre valores。 _getreg_ funciona de la siguiente manera:
  • シラ変数Yestáen el registro R、se utiliza el registro。
  • Sialgúnregistro Restádisponible、se utiliza el registro。
  • Si tanto las opciones anteriores no son posibles、elige un registro que requiere unmínimonúmerode cargar y almacenar instrucciones。

命令x = y OP z、コーディゴプエデジェネラルラスシギエンテスアクシオンの命令。 Supongamos que L es el lugar(推奨されるレジスト)ドンドゥラプロドゥーシオンデy OP z va a ser guardado:

  • ラビュラ・ラ・ファンシオンgetreg、デシディル・ラ・ウビカシオン・デ・L
  • 実際の決定(メモリの登録)の y 中央のコンサルタントのlos Descriptor de Direcciones de y 。 Si * Y 登録されていません *L y、継続、ジェネラルlas siguientes instrucciones para copiar el valor de y a L : + MOV y ’、L + Donde y’ はcopia valor de y を表します。 実際の決定は、2つのパラメーターを使用して実際に実行されます。 + OP z ’、L + Donde z' は、copia valor de *z を表します。 Ahora L contiene el valor de y OP z、que se destina a ser asignado a x 。 lo tanto、si L es un registro、actualizar su descriptor para indicar que contiene el valor de *x 。 実際の記述子 x 独立した言語と地域ごとのアルケナド L.
  • Si y y z no tienemásuso、que puede ser dada al sistema。

オトラは、一般的なコモド核とコンディショナリの変換、および一般的な変換を行います。