Universidad Tecnológica Centroamericana
Ingeniería en Sistemas Computacionales
Compiladores I
Prof. Egdares Futch H.

    ...
# ---------- Fin Establecer Stack Frame
li $v0, 5                      # System Call Code (read_int)
syscall              ...
Upcoming SlideShare
Loading in …5
×

Generación de código objeto MIPS

2,282 views

Published on

Este es un ejemplo de lo que obtendría un compilador de lenguaje C al generar código objeto para un procesador MIPS. Se incluyen los comentarios en el código objeto, generados por el propio compilador

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,282
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Generación de código objeto MIPS

  1. 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. 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 -----------

×