SlideShare una empresa de Scribd logo
1 de 2
Descargar para leer sin conexión
Universidad Tecnológica Centroamericana
Ingeniería en Sistemas Computacionales
Compiladores I
Prof. Egdares Futch H.

                               Ejemplo de codificación MIPS
/* Fibonacci:*/                 .text
                                # --------- Funcion -----------
int fib(int n)                  _fib:                          # Label de la Funcion
{                               # ---------- Inicio Establecer Stack Frame:
  if (n<2)                      sub $sp, $sp, 8                # Push Stack Frame
    return n;                   sw $ra, 4($sp)                 # Salva Return Address
  else                          sw $fp, 0($sp)                 # Salva Frame Pointer
   return fib(n-1)+fib(n-2);    add $fp, $sp, -4               # Establece Frame Pointer
}                               # ---------- Fin Establecer Stack Frame
                                lw $t0, 8($sp)                 # Load n local
void main( )                    li $t1, 2                      # Load Constante
{                               slt $t0, $t0, $t1              # Less than '<'
                                beq $t0, 0, __Label0           # Inicio If-then-else #0
printfint(fib(scanfint()));     lw $t0, 8($sp)                 # Load n local
}                               move $v0, $t0                  # Asigna Valor de Retorno
                                # ---------- Inicio Quitar Stack Frame por el Return
                                lw $fp, 0($sp)                 # Load Frame Pointer
                                lw $ra, 4($sp)                 # Load Return Address
                                add $sp, $sp, 8                # Pop Stack Frame
                                jr $ra                         # Return
                                # ---------- Fin Quitar Stack Frame por Return
                                j __Label1                     # Salta despues del If-then-
                                else
                                __Label0:                      # Parte Else del If-then-else
                                #0
                                lw $t0, 8($sp)                 # Load n local
                                li $t1, 1                      # Load Constante
                                sub $t0, $t0, $t1              # Resta '-'
                                sw $t0, -4($sp)                # Argumento
                                sub $sp, $sp, 4                # Inicio Llamada a funcion
                                jal _fib                       #
                                add $sp, $sp, 4                #
                                move $t0, $v0                  # Copia Valor de Retorno
                                sw $t0, -4($sp)                # Guarda Temporal
                                lw $t1, 8($sp)                 # Load n local
                                li $t2, 2                      # Load Constante
                                sub $t1, $t1, $t2              # Resta '-'
                                sw $t1, -8($sp)                # Argumento
                                sub $sp, $sp, 8                # Inicio Llamada a funcion
                                jal _fib                       #
                                add $sp, $sp, 8                #
                                lw $t0, -4($sp)                # Lee Temporal
                                move $t1, $v0                  # Copia Valor de Retorno
                                add $t0, $t0, $t1              # Suma '+'
                                move $v0, $t0                  # Asigna Valor de Retorno
                                # ---------- Inicio Quitar Stack Frame por el Return
                                lw $fp, 0($sp)                 # Load Frame Pointer
                                lw $ra, 4($sp)                 # Load Return Address
                                add $sp, $sp, 8                # Pop Stack Frame
                                jr $ra                         # Return
                                # ---------- Fin Quitar Stack Frame por Return
                                __Label1:                      # Fin del If-then-else #0
                                # ---------- Inicio Quitar Stack Frame
                                lw $fp, 0($sp)                 # Load Frame Pointer
                                lw $ra, 4($sp)                 # Load Return Address
                                add $sp, $sp, 8                # Pop Stack Frame
                                # ---------- Fin Quitar Stack Frame
                                jr $ra                         # Return
                                # --------- Fin de Funcion -----------

                                .text
                                # --------- Funcion -----------
                                main:                          # Label de la Funcion
                                # ---------- Inicio Establecer Stack Frame:
                                sub $sp, $sp, 8                # Push Stack Frame
                                sw $ra, 4($sp)                 # Salva Return Address
                                sw $fp, 0($sp)                 # Salva Frame Pointer
                                add $fp, $sp, -4               # Establece Frame Pointer
# ---------- Fin Establecer Stack Frame
li $v0, 5                      # System Call Code (read_int)
syscall                        # read_int
move $t0, $v0                  # Copia $v0
sw $t0, -4($sp)                # Argumento
sub $sp, $sp, 4                # Inicio Llamada a funcion
jal _fib                       #
add $sp, $sp, 4                #
move $t0, $v0                  # Copia Valor de Retorno
# ---------- Inicio de PrintfInt():
li $v0, 1                      # System Call Code
(Print_int)
move $a0, $t0                  # Argumento a imprimir
syscall                        # Print_int
# ---------- Fin de PrintfInt()
# ---------- Inicio Quitar Stack Frame
lw $fp, 0($sp)                 # Load Frame Pointer
lw $ra, 4($sp)                 # Load Return Address
add $sp, $sp, 8                # Pop Stack Frame
# ---------- Fin Quitar Stack Frame
li $v0, 10                     # System Call Code para Exit
syscall                        # Salir del Programa
.end main                      # Fin del Programa
# --------- Fin de Funcion -----------

Más contenido relacionado

Más de Egdares Futch H.

Más de Egdares Futch H. (20)

El "Internet de Todo" (IoT)
El "Internet de Todo" (IoT)El "Internet de Todo" (IoT)
El "Internet de Todo" (IoT)
 
BPMS vs. workflow
BPMS vs. workflowBPMS vs. workflow
BPMS vs. workflow
 
El “Internet de Todo” (IoT) y lo que lo hace posible
El “Internet de Todo” (IoT) y lo que lo hace posible El “Internet de Todo” (IoT) y lo que lo hace posible
El “Internet de Todo” (IoT) y lo que lo hace posible
 
MGTI: Tendencias de Tecnología 2015 - Campus Tegucigalpa
MGTI: Tendencias de Tecnología 2015 - Campus TegucigalpaMGTI: Tendencias de Tecnología 2015 - Campus Tegucigalpa
MGTI: Tendencias de Tecnología 2015 - Campus Tegucigalpa
 
MGTI: Tendencias de Tecnología 2015 y su aplicación en el país Campus La Ceiba
MGTI: Tendencias de Tecnología 2015 y su aplicación en el país Campus La CeibaMGTI: Tendencias de Tecnología 2015 y su aplicación en el país Campus La Ceiba
MGTI: Tendencias de Tecnología 2015 y su aplicación en el país Campus La Ceiba
 
Introducción a la Teoría de Juegos con aplicación a las Ciencias de la Comput...
Introducción a la Teoría de Juegos con aplicación a las Ciencias de la Comput...Introducción a la Teoría de Juegos con aplicación a las Ciencias de la Comput...
Introducción a la Teoría de Juegos con aplicación a las Ciencias de la Comput...
 
The Hour of Code - Presentación Diciembre 2014
The Hour of Code - Presentación Diciembre 2014The Hour of Code - Presentación Diciembre 2014
The Hour of Code - Presentación Diciembre 2014
 
Unitec virtualización
Unitec   virtualizaciónUnitec   virtualización
Unitec virtualización
 
Criptografía para las masas
Criptografía para las masasCriptografía para las masas
Criptografía para las masas
 
Más sobre el Algoritmo de Peterson
Más sobre el Algoritmo de PetersonMás sobre el Algoritmo de Peterson
Más sobre el Algoritmo de Peterson
 
Análisis de ataques a un sistema de correo electrónico por medio de mensajes ...
Análisis de ataques a un sistema de correo electrónico por medio de mensajes ...Análisis de ataques a un sistema de correo electrónico por medio de mensajes ...
Análisis de ataques a un sistema de correo electrónico por medio de mensajes ...
 
Apuntes de clase Sistemas Operativos: Administración de Memoria
Apuntes de clase Sistemas Operativos: Administración de MemoriaApuntes de clase Sistemas Operativos: Administración de Memoria
Apuntes de clase Sistemas Operativos: Administración de Memoria
 
Memoria virtual
Memoria virtualMemoria virtual
Memoria virtual
 
Deadlocks
DeadlocksDeadlocks
Deadlocks
 
Concurrencia
ConcurrenciaConcurrencia
Concurrencia
 
Proyecto final progra 1
Proyecto final progra 1Proyecto final progra 1
Proyecto final progra 1
 
FIT GT - Build your own private cloud
FIT GT - Build your own private cloudFIT GT - Build your own private cloud
FIT GT - Build your own private cloud
 
Analizador sintáctico de Pascal escrito en Bison
Analizador sintáctico de Pascal escrito en BisonAnalizador sintáctico de Pascal escrito en Bison
Analizador sintáctico de Pascal escrito en Bison
 
Ejemplo completo de integración JLex y CUP
Ejemplo completo de integración JLex y CUPEjemplo completo de integración JLex y CUP
Ejemplo completo de integración JLex y CUP
 
Ejemplo básico de CUP
Ejemplo básico de CUPEjemplo básico de CUP
Ejemplo básico de CUP
 

Último

🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
JonathanCovena1
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
patriciaines1993
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
NancyLoaa
 

Último (20)

SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Presentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza MultigradoPresentacion Metodología de Enseñanza Multigrado
Presentacion Metodología de Enseñanza Multigrado
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Unidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la InvestigaciónUnidad 3 | Metodología de la Investigación
Unidad 3 | Metodología de la Investigación
 
Criterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficiosCriterios ESG: fundamentos, aplicaciones y beneficios
Criterios ESG: fundamentos, aplicaciones y beneficios
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.Fe contra todo pronóstico. La fe es confianza.
Fe contra todo pronóstico. La fe es confianza.
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Estrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcciónEstrategia de prompts, primeras ideas para su construcción
Estrategia de prompts, primeras ideas para su construcción
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niñoproyecto de mayo inicial 5 añitos aprender es bueno para tu niño
proyecto de mayo inicial 5 añitos aprender es bueno para tu niño
 
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
SESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.docSESION DE PERSONAL SOCIAL.  La convivencia en familia 22-04-24  -.doc
SESION DE PERSONAL SOCIAL. La convivencia en familia 22-04-24 -.doc
 

Generación de código objeto MIPS

  • 1. Universidad Tecnológica Centroamericana Ingeniería en Sistemas Computacionales Compiladores I Prof. Egdares Futch H. Ejemplo de codificación MIPS /* Fibonacci:*/ .text # --------- Funcion ----------- int fib(int n) _fib: # Label de la Funcion { # ---------- Inicio Establecer Stack Frame: if (n<2) sub $sp, $sp, 8 # Push Stack Frame return n; sw $ra, 4($sp) # Salva Return Address else sw $fp, 0($sp) # Salva Frame Pointer return fib(n-1)+fib(n-2); add $fp, $sp, -4 # Establece Frame Pointer } # ---------- Fin Establecer Stack Frame lw $t0, 8($sp) # Load n local void main( ) li $t1, 2 # Load Constante { slt $t0, $t0, $t1 # Less than '<' beq $t0, 0, __Label0 # Inicio If-then-else #0 printfint(fib(scanfint())); lw $t0, 8($sp) # Load n local } move $v0, $t0 # Asigna Valor de Retorno # ---------- Inicio Quitar Stack Frame por el Return lw $fp, 0($sp) # Load Frame Pointer lw $ra, 4($sp) # Load Return Address add $sp, $sp, 8 # Pop Stack Frame jr $ra # Return # ---------- Fin Quitar Stack Frame por Return j __Label1 # Salta despues del If-then- else __Label0: # Parte Else del If-then-else #0 lw $t0, 8($sp) # Load n local li $t1, 1 # Load Constante sub $t0, $t0, $t1 # Resta '-' sw $t0, -4($sp) # Argumento sub $sp, $sp, 4 # Inicio Llamada a funcion jal _fib # add $sp, $sp, 4 # move $t0, $v0 # Copia Valor de Retorno sw $t0, -4($sp) # Guarda Temporal lw $t1, 8($sp) # Load n local li $t2, 2 # Load Constante sub $t1, $t1, $t2 # Resta '-' sw $t1, -8($sp) # Argumento sub $sp, $sp, 8 # Inicio Llamada a funcion jal _fib # add $sp, $sp, 8 # lw $t0, -4($sp) # Lee Temporal move $t1, $v0 # Copia Valor de Retorno add $t0, $t0, $t1 # Suma '+' move $v0, $t0 # Asigna Valor de Retorno # ---------- Inicio Quitar Stack Frame por el Return lw $fp, 0($sp) # Load Frame Pointer lw $ra, 4($sp) # Load Return Address add $sp, $sp, 8 # Pop Stack Frame jr $ra # Return # ---------- Fin Quitar Stack Frame por Return __Label1: # Fin del If-then-else #0 # ---------- Inicio Quitar Stack Frame lw $fp, 0($sp) # Load Frame Pointer lw $ra, 4($sp) # Load Return Address add $sp, $sp, 8 # Pop Stack Frame # ---------- Fin Quitar Stack Frame jr $ra # Return # --------- Fin de Funcion ----------- .text # --------- Funcion ----------- main: # Label de la Funcion # ---------- Inicio Establecer Stack Frame: sub $sp, $sp, 8 # Push Stack Frame sw $ra, 4($sp) # Salva Return Address sw $fp, 0($sp) # Salva Frame Pointer add $fp, $sp, -4 # Establece Frame Pointer
  • 2. # ---------- Fin Establecer Stack Frame li $v0, 5 # System Call Code (read_int) syscall # read_int move $t0, $v0 # Copia $v0 sw $t0, -4($sp) # Argumento sub $sp, $sp, 4 # Inicio Llamada a funcion jal _fib # add $sp, $sp, 4 # move $t0, $v0 # Copia Valor de Retorno # ---------- Inicio de PrintfInt(): li $v0, 1 # System Call Code (Print_int) move $a0, $t0 # Argumento a imprimir syscall # Print_int # ---------- Fin de PrintfInt() # ---------- Inicio Quitar Stack Frame lw $fp, 0($sp) # Load Frame Pointer lw $ra, 4($sp) # Load Return Address add $sp, $sp, 8 # Pop Stack Frame # ---------- Fin Quitar Stack Frame li $v0, 10 # System Call Code para Exit syscall # Salir del Programa .end main # Fin del Programa # --------- Fin de Funcion -----------