Your SlideShare is downloading. ×
  • Like
Generación de código objeto MIPS
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Generación de código objeto MIPS

  • 1,978 views
Published

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 …

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
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,978
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
17
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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 -----------