{"id":18190,"date":"2022-08-17T20:38:09","date_gmt":"2022-08-17T20:38:09","guid":{"rendered":"https:\/\/blogs.ugto.mx\/rea\/?p=18190"},"modified":"2022-09-24T03:03:46","modified_gmt":"2022-09-24T03:03:46","slug":"clase-digital-18-generacion-de-codigo-2","status":"publish","type":"post","link":"https:\/\/blogs.ugto.mx\/rea\/clase-digital-18-generacion-de-codigo-2\/","title":{"rendered":"Clase digital 18. Generaci\u00f3n de c\u00f3digo."},"content":{"rendered":"\n\n\n<div class=\"wp-block-cover\" style=\"min-height:284px;aspect-ratio:unset;\"><span aria-hidden=\"true\" class=\"wp-block-cover__background has-background-dim-40 has-background-dim\"><\/span><img decoding=\"async\" class=\"wp-block-cover__image-background wp-image-18236\" alt=\"From above crop anonymous male programmer in black hoodie working on software code on contemporary netbook and typing on keyboard in workspace\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/5926382.jpg\" style=\"object-position:23% 42%\" data-object-fit=\"cover\" data-object-position=\"23% 42%\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1067\" class=\"wp-block-cover__image-background wp-image-18236\" alt=\"From above crop anonymous male programmer in black hoodie working on software code on contemporary netbook and typing on keyboard in workspace\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/5926382.jpg\" style=\"object-position:23% 42%\" data-object-fit=\"cover\" data-object-position=\"23% 42%\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/5926382.jpg 1600w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/5926382-300x200.jpg 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/5926382-1024x683.jpg 1024w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/5926382-768x512.jpg 768w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/5926382-1536x1024.jpg 1536w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/5926382-272x182.jpg 272w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/noscript><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<p class=\"has-text-align-center has-base-3-color has-text-color has-large-font-size wp-block-paragraph\">Generaci\u00f3n de c\u00f3digo.<\/p>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"introduccion\">Introducci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Hola notable estudiante!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Mis felicitaciones por llegar hasta este momento de tu aprendizaje. Has llegado a la \u00faltima clase del curso y siento mucho orgullo de tu gran participaci\u00f3n y compromiso en este proceso formativo. Espero que cierres con broche de oro esta clase y no me resta otra cosa m\u00e1s que ofrecerte la bienvenida a ella.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En esta sesi\u00f3n aprenderemos sobre&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Empecemos y buena suerte!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"desarrollo-del-tema\">Desarrollo del tema <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Optimizaci\u00f3n de C\u00f3digo Intermedio:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El c\u00f3digo intermedio se puede representar de manera gr\u00e1fica para facilitar la optimizaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bloques B\u00e1sicos y Grafos de Flujo:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Particionar el c\u00f3digo intermedio en bloques b\u00e1sicos.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>El flujo de control puede solamente entrar al bloque b\u00e1sico por la primera instrucci\u00f3n del bloque. Entonces, no hay saltos en medio del bloque.<\/li><li>El control saldr\u00e1 del bloque sin parada o ramificaci\u00f3n, excepto posiblemente en la \u00faltima instrucci\u00f3n del bloque.<\/li><li>La primera instrucci\u00f3n del c\u00f3digo intermedio es un l\u00edder.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Los bloques b\u00e1sicos se encuentran desde un l\u00edder hasta antes de otro l\u00edder.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los bloques b\u00e1sicos son los nodos de un grafo de flujo<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Reglas para Encontrar L\u00edderes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>La primera instrucci\u00f3n del c\u00f3digo intermedio es un l\u00edder.<\/li><li>Cualquier instrucci\u00f3n que es objeto de un salto condicional o incondicional es un l\u00edder.<br>Cualquier instrucci\u00f3n que siga inmediatamente a un salto condicional o incondicional es un l\u00edder.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">C\u00f3digo para una Matriz Identidad<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Grafo de Flujo y Bloques B\u00e1sicos<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Informaci\u00f3n de Vitalidad y Siguiente-Uso<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Deseamos determinar para cada instrucci\u00f3n&nbsp;x = y + z los siguientes usos de x, y y z.<\/li><li>Algoritmo:<ul><li>Agregar a la instrucci\u00f3n i la informaci\u00f3n encontrada en la tabla de s\u00edmbolos sobre el siguiente-uso y vitalidad de x, <em>y<\/em>, y z.<\/li><li>En la tabla de s\u00edmbolos, marcar <em>x<\/em> como \u201cno vivo\u00bb y \u201csin siguiente-uso.\u201c<\/li><\/ul><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">En la tabla de s\u00edmbolos, marcar y y z<em> <\/em>como \u201cvivo\u00bb y los siguientes usos de y y z<em> <\/em>como i<strong>.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Representaci\u00f3n de bloques b\u00e1sicos:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Hay un nodo en el DAG para cada valor inicial de las variables del bloque b\u00e1sico<\/li><li>Hay un nodo&nbsp;<\/li><li>N asociado con cada instrucci\u00f3n s del bloque. Los hijos de N son aquellos nodos correspondientes a instrucciones que son las \u00faltimas definiciones, previas a s, de los operandos usados por s<\/li><li>Nodo N es etiquetado por el operador aplicado en s, y tambi\u00e9n adjuntado a N la lista de variables para las cuales es la \u00faltima definici\u00f3n del bloque<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ciertos nodos son designados nodos de salida<em>. <\/em>Estos son los nodos cuyas variables est\u00e1n vivas al salir del bloque<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Optimizaci\u00f3n de C\u00f3digo:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Se pueden eliminar subexpresiones locales comunes<em>, <\/em>o sea, instrucciones que calculan un valor que ya ha sido calculado.<\/li><li>Se puede eliminar c\u00f3digo muerto<em>, <\/em>o sea, instrucciones que calculan un valor que nunca es usado.<\/li><li>Se pueden reordenar las instrucciones que no dependan entre s\u00ed; tal reordenamiento podr\u00eda reducir el tiempo que un valor temporal necesita ser preservado en un registro.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Se pueden aplicar leyes algebraicas para reordenar operandos de instrucciones de tres direcciones, y algunas veces como resultado simplificar el c\u00e1lculo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Usos Principales de Registros:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>En la mayor\u00eda de arquitecturas de m\u00e1quina, algunos o todos de los operandos de una operaci\u00f3n deben estar en los registros con el fin de realizar la operaci\u00f3n.<\/li><li>Los registros son buenos almacenamientos temporales.<ul><li>Lugares para contener el resultado de una sub-expresi\u00f3n mientras se eval\u00faa una expresi\u00f3n mayor, o m\u00e1s en general, un lugar para contener una variable que se utiliza s\u00f3lo dentro de un \u00fanico bloque b\u00e1sico.<\/li><\/ul><\/li><li>Los registros se utilizan a menudo para ayudar a la gesti\u00f3n del almacenamiento en tiempo de ejecuci\u00f3n.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">por ejemplo, para gestionar la pila de tiempo de ejecuci\u00f3n, incluyendo el mantenimiento de los punteros de pila y, posiblemente, los elementos superiores de la pila en s\u00ed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Caracter\u00edstica de Optimizaciones de Mirilla:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Eliminaci\u00f3n de Instrucciones Redundantes.<\/li><li>Optimizaciones de Flujo de Control.<\/li><li>Simplificaciones Algebraicas.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Uso de frases idiom\u00e1ticas de m\u00e1quina.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Eliminaci\u00f3n de Instrucciones Redundantes:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LD a, R0<br>ST R0, a<br>if debug == 1 goto L1<br>goto L2<br>L1: print debugging information<br>L2:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Optimizaciones de Control de Flujo:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">goto L1<br>&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L1: goto L2<br>Puede ser reemplazado por:<br>goto L2<br>&#8230;<br>L1: goto L2<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">if a&lt;b goto L1<br>&#8230;<br>L1: goto L2<br>Puede ser reemplazado por:<br>if a&lt;b goto L2<br>&#8230;<br>L1: goto L2<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Simplificaciones Algebraicas:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>x=x+0<\/li><li>x=x*1<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Asignaci\u00f3n de Registro:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Asignaci\u00f3n de Registro Global<\/li><li>Conteos de Uso<\/li><li>Asignaci\u00f3n de Registro para bucles externos<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Asignaci\u00f3n de Registro por coloraci\u00f3n de Grafo<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusi\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para recordar:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00a1Has llegado al final de la \u00faltima clase del curso, muchas felicidades! Ha sido un gozo compartir contigo este trayecto formativo. Deseo que el curso haya cumplido tus expectativas y encuentres satisfacci\u00f3n con los temas abordados, as\u00ed como con tu desempe\u00f1o y compromiso. Para concluir de forma correcta, te invito a realizar la tarea asignada y mandarla como corresponde. Espero encontrarte nuevamente, \u00a1hasta pronto!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fuentes-de-informacion\">Fuentes de informaci\u00f3n<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.youtube.com\/watch?v=HS34Ln2kfVw\" target=\"_blank\" rel=\"noreferrer noopener\">Generaci\u00f3n de c\u00f3digo, Introducci\u00f3n a Compiladores, 2:56- 14:52.<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n \u00a1Hola notable estudiante! Mis felicitaciones por llegar hasta este momento de tu aprendizaje. Has llegado a la \u00faltima clase del curso y siento mucho orgullo de tu gran participaci\u00f3n y compromiso en este proceso formativo. Espero que cierres con broche de oro esta clase y no me resta otra cosa m\u00e1s que ofrecerte la &#8230; <a title=\"Clase digital 18. Generaci\u00f3n de c\u00f3digo.\" class=\"read-more\" href=\"https:\/\/blogs.ugto.mx\/rea\/clase-digital-18-generacion-de-codigo-2\/\" aria-label=\"Leer m\u00e1s sobre Clase digital 18. Generaci\u00f3n de c\u00f3digo.\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":142,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_crdt_document":"","episode_type":"","audio_file":"","podmotor_file_id":"","podmotor_episode_id":"","cover_image":"","cover_image_id":"","duration":"","filesize":"","filesize_raw":"","date_recorded":"","explicit":"","block":"","itunes_episode_number":"","itunes_title":"","itunes_season_number":"","itunes_episode_type":"","footnotes":""},"categories":[180,19,471],"tags":[41,472,473],"class_list":["post-18190","post","type-post","status-publish","format-standard","hentry","category-cideap","category-ingenieria-en-sistemas-computacionales","category-uda-compiladores","tag-clase-digital","tag-iili06025","tag-jose-ruiz-pinales"],"acf":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/18190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/users\/142"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/comments?post=18190"}],"version-history":[{"count":4,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/18190\/revisions"}],"predecessor-version":[{"id":19171,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/18190\/revisions\/19171"}],"wp:attachment":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/media?parent=18190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/categories?post=18190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/tags?post=18190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}