{"id":18188,"date":"2022-08-17T20:36:14","date_gmt":"2022-08-17T20:36:14","guid":{"rendered":"https:\/\/blogs.ugto.mx\/rea\/?p=18188"},"modified":"2022-09-24T03:03:18","modified_gmt":"2022-09-24T03:03:18","slug":"clase-digital-17-optimizacion-2","status":"publish","type":"post","link":"https:\/\/blogs.ugto.mx\/rea\/clase-digital-17-optimizacion-2\/","title":{"rendered":"Clase digital 17. Optimizaci\u00f3n."},"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-18230\" alt=\"person holding black computer keyboard\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" data-src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/xcweygakbro.jpg\" style=\"object-position:15% 70%\" data-object-fit=\"cover\" data-object-position=\"15% 70%\" \/><noscript><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"1067\" class=\"wp-block-cover__image-background wp-image-18230\" alt=\"person holding black computer keyboard\" src=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/xcweygakbro.jpg\" style=\"object-position:15% 70%\" data-object-fit=\"cover\" data-object-position=\"15% 70%\" srcset=\"https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/xcweygakbro.jpg 1600w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/xcweygakbro-300x200.jpg 300w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/xcweygakbro-1024x683.jpg 1024w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/xcweygakbro-768x512.jpg 768w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/xcweygakbro-1536x1024.jpg 1536w, https:\/\/blogs.ugto.mx\/rea\/wp-content\/uploads\/sites\/71\/2022\/08\/xcweygakbro-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\">Optimizaci\u00f3n<\/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!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Me da mucho gusto saludarte en esta ocasi\u00f3n, que sin demeritar las anteriores, ya has avanzado mucho en este proceso formativo y eso es raz\u00f3n suficiente para pedirte que contin\u00faes con ese mismo \u00edmpetu por aprender m\u00e1s. Te reitero mis felicitaciones y te doy la bienvenida a la&nbsp; pen\u00faltima clase del curso.&nbsp;<\/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\">\u00bfInteresante no crees? \u00a1Pues comencemos!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"desarrollo-del-tema\">Desarrollo del tema <\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Generaci\u00f3n de c\u00f3digo<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfCu\u00e1l es el criterio m\u00e1s importante para el dise\u00f1o del generador de c\u00f3digo? Producir c\u00f3digo correcto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La entrada del generador de c\u00f3digo es c\u00f3digo intermedio y tablas de s\u00edmbolos con informaci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La fase final de un compilador es la generaci\u00f3n de c\u00f3digo.<br>Recibe una representaci\u00f3n intermedia (IR) con informaci\u00f3n suplementaria en una tabla de s\u00edmbolos.<br>Produce un programa sem\u00e1nticamente equivalente.<br>Tareas principales del generador de c\u00f3digo:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Selecci\u00f3n de instrucci\u00f3n.<\/li><li>Asignaci\u00f3n de registros.<br>Ordenamiento de instrucciones<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>El criterio m\u00e1s importante es que produzca c\u00f3digo correcto.<\/li><li>Entrada al generador de c\u00f3digo:<ul><li>IR + Tabla de s\u00edmbolos<\/li><li>Asumimos que el front-end produce IR de bajo nivel, pe. valores de nombres que pueden ser directamente manipulados por las instrucciones de m\u00e1quina.<\/li><li>Errores sint\u00e1cticos y sem\u00e1nticos ya han sido detectados.<\/li><\/ul><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Programa objetivo:<br>Arquitecturas objetivo comunes:&nbsp;<ul><li>RISC;&nbsp;<\/li><li>CISC y&nbsp;de Stack<\/li><\/ul><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La complejidad del mapeo depende de:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Nivel de la IR<\/li><li>Naturaleza de la arquitectura del conjunto de instrucciones objetivo<br>Calidad deseada del c\u00f3digo generado.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Asignaci\u00f3n de Registros:<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Hay dos subproblemas:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Selecci\u00f3n de registros:<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Seleccionar el conjunto de variables que residir\u00e1n en registros en cada punto del programa.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Asignaci\u00f3n de registros:&nbsp;<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Seleccionar un registro espec\u00edfico para una variable.<br>Complicaciones impuestas por la arquitectura de hardware.<br>Ejemplo: pares de registros para multiplicaci\u00f3n y divisi\u00f3n.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Operaciones de carga:<br>LD r, x y LD r1, r2<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Operaciones de almacenamiento:<br>ST x, r<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Operaciones de c\u00e1lculo:<br>OP dst, src1, src2<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Saltos incondicionales:<br>BR L<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Saltos condicionales:<br>Bcond r, L como BLTZ r, L<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Modos de Direccionamiento:<\/h4>\n\n\n\n<ul class=\"wp-block-list\"><li>Nombre de variable:&nbsp;<br>x<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Direcci\u00f3n indexada:<br>a(r) como LD R1, a(R2) \u2192 R1 = contenido(a+contenido(R2))<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Entero indexado por un registro:<br>LD R1, 100(R2)<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Modo de direccionamiento indirecto:<br>*r&nbsp;<br>*100(r)<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Modo de direccionamiento inmediato:<br>LD R1, #100<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>C\u00f3digo para b = a [i]<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>LD R1, i&nbsp;<\/td><td>\/\/R1 = i<\/td><\/tr><tr><td>MUL R1, R1, 8<\/td><td>\/\/R1 = Rl * 8<\/td><\/tr><tr><td>LD R2, a(R1)<\/td><td>\/\/R2=contenido(a+contenido(R1))<\/td><\/tr><tr><td>ST b, R2<\/td><td>\/\/b = R2<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>C\u00f3digo para a[j] = c<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>LD R1, c<\/td><td>\/\/R1 = c<\/td><\/tr><tr><td>LD R2, j<\/td><td>\/\/R2 = j<\/td><\/tr><tr><td>MUL R2, R2, 8<\/td><td>\/\/R2 = R2 * 8<\/td><\/tr><tr><td>ST&nbsp; a(R2), R1<\/td><td>\/\/contenido(a+contenido(R2))=R1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>C\u00f3digo para x=*p<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>LD R1, p<\/td><td>\/\/R1 = p<\/td><\/tr><tr><td>LD R2, 0(R1)<\/td><td>\/\/R2=contenido(0+contenido(R1))<\/td><\/tr><tr><td>ST&nbsp; x, R2<\/td><td>\/\/x=R2<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Instrucci\u00f3n de Salto Condicional<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>If x&lt;y goto L<\/td><td><\/td><\/tr><tr><td>LD R2, y<\/td><td>\/\/R1 = x<\/td><\/tr><tr><td>ST&nbsp; x, R2<\/td><td>\/\/R2 = y<\/td><\/tr><tr><td>SUB R1, R1, R2<\/td><td>\/\/R1 = R1 &#8211; R2<\/td><\/tr><tr><td>BLTZ R1, M<\/td><td>\/\/si R1 &lt; 0 saltar a M<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Costos Asociados con Modos de Direccionamiento:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>LD R0, R1<\/td><td>costo = 1<\/td><\/tr><tr><td>LD R0, M<\/td><td>costo = 2<\/td><\/tr><tr><td>LD R1, *100(R2)<\/td><td>costo = 3<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Se asigna un costo para evaluar la calidad del c\u00f3digo<br>Se escoge la alternativa de menor costo para optimizar<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Organizaci\u00f3n de Memoria del C\u00f3digo Objetivo:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u00c1rea de C\u00f3digo determinada est\u00e1ticamente.<\/li><li>\u00c1rea de Datos determinada est\u00e1ticamente.<\/li><li>\u00c1rea de Heap gestionada din\u00e1micamente.<\/li><li>\u00c1rea de Pila gestionada din\u00e1micamente.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Instrucciones de llamada a subrutina y retorno:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>call callee<\/li><li>Return<\/li><li>Halt<\/li><li>action<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Asignaci\u00f3n de Stack:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inicializar stack para regresar de una llamada a subrutina o funci\u00f3n<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Retorno de subrutina:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>Subrutina:<\/td><td>BR *0(SP)<\/td><\/tr><tr><td>Llamada:<\/td><td>SUB SP, SP, #caller.recordsize<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Producir un programa en lenguaje ensamblador como salida facilita la generaci\u00f3n de c\u00f3digo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Qu\u00e9 arquitectura objetivo tiene muchos registros, pocos modos de direccionamiento y un conjunto de instrucciones relativamente simple: RISC.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un compilador redestinable es aqu\u00e9l que puede generar c\u00f3digo para varios conjuntos de instrucciones.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Qu\u00e9 arquitectura objetivo tiene relativamente pocos registros, modos de direccionamiento complejos e instrucciones de longitud variable: CISC.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Muchos compiladores particionan el c\u00f3digo intermedio en bloques b\u00e1sicos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Qu\u00e9 es un modo de direccionamiento: Una manera de indicar un operando en una instrucci\u00f3n.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando el c\u00f3digo intermedio es de alto nivel, se pueden utilizar plantillas para traducir cada instrucci\u00f3n de c\u00f3digo intermedio.<\/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\">Hasta aqu\u00ed han sido abordados los temas de esta secci\u00f3n. Espero que hayas comprendido lo suficiente. Acude con tu asesor para despejar las dudas que hayan surgido. Resuelve la consigna asignada en tiempo y forma. Nos encontraremos 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=H8Kuppt4xUs\" target=\"_blank\" rel=\"noreferrer noopener\">Exposici\u00f3n Compiladores | Optimizaci\u00f3n de C\u00f3digo, 0:11 \u2013 10:18URL.<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n \u00a1Hola! Me da mucho gusto saludarte en esta ocasi\u00f3n, que sin demeritar las anteriores, ya has avanzado mucho en este proceso formativo y eso es raz\u00f3n suficiente para pedirte que contin\u00faes con ese mismo \u00edmpetu por aprender m\u00e1s. Te reitero mis felicitaciones y te doy la bienvenida a la&nbsp; pen\u00faltima clase del curso.&nbsp; En &#8230; <a title=\"Clase digital 17. Optimizaci\u00f3n.\" class=\"read-more\" href=\"https:\/\/blogs.ugto.mx\/rea\/clase-digital-17-optimizacion-2\/\" aria-label=\"Leer m\u00e1s sobre Clase digital 17. Optimizaci\u00f3n.\">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-18188","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\/18188","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=18188"}],"version-history":[{"count":6,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/18188\/revisions"}],"predecessor-version":[{"id":19170,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/posts\/18188\/revisions\/19170"}],"wp:attachment":[{"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/media?parent=18188"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/categories?post=18188"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ugto.mx\/rea\/wp-json\/wp\/v2\/tags?post=18188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}