Arquitectura de Computadores 543426 Tarea Nº X Nombre 1 Nombre 2 Fecha PROBLEMA 1. Código en C: int funcion91 (int n){ if (n > 100) return n-10; return funcion91(funcion91(n + 11)); } void main(void) { int x,y; printf("Ingrese entero positivo: "); scanf ("%i", &x); y=funcion91(x); printf("\n\nEl resultado es: %i",y); } Función en Assembly: FUN91: li $t0,100 # $t0 = 100 BEGIN: ble $a0,$t0,IF addi $v0,$a0,-10 jr $ra # if (n <= 100) goto IF # $v0 = n - 10 IF: sw $fp,-4($sp) add $fp,$sp,-4 sw $ra,-4($fp) addi $sp,$fp,-4 # Guarda antiguo $fp # Crea nuevo $fp # Guarda $ra # Crea nuevo $sp addi $a0,$a0,11 jal BEGIN # $a0 = n + 11 # M(n+11) addi $a0,$v0,0 jal BEGIN # $a0 = $v0 # M(M(n+11)) lw $ra,0($sp) addi $sp,$fp,4 lw $fp,0($fp) beq $ra,$t1,QUIT jr $ra # Carga antiguo $ra # Carga antiguo $sp # Carga antiguo $fp # if ($ra =! $t1) goto QUIT LOAD: --1-- Programa principal en Assembly: .data TEXTO: .asciiz "Ingrese semilla para función-91: " .text main: .globl main li $v0,4 la $a0,TEXTO syscall # Código syscall para print_string # $a0 = TEXTO: li $v0,5 syscall # Código syscall para read_int addi $a0,$v0,0 addi $t1,$ra,0 li $t0,100 # $a0 = $v0 (semilla ingresada) # $t1 apunta a retorno final # $t0 = 100 BEGIN: ble $a0,$t0,IF addi $v0,$a0,-10 jr $ra # if (n <= 100) goto IF # $v0 = n - 10 IF: sw $fp,-4($sp) addi $fp,$sp,-4 sw $ra,-4($fp) addi $sp,$fp,-4 # Guarda antiguo $fp # Crea nuevo $fp # Guarda $ra # Crea nuevo $sp addi $a0,$a0,11 jal BEGIN # $a0 = n + 11 # M(n+11) addi $a0,$v0,0 jal BEGIN # $a0 = $v0 # M(M(n+11)) lw $ra,0($sp) addi $sp,$fp,4 lw $fp,0($fp) beq $ra,$t1,QUIT jr $ra # Carga antiguo $ra # Carga antiguo $sp # Carga antiguo $fp # if ($ra =! $t1) goto QUIT LOAD: QUIT: addi $a0,$v0,0 li $v0,1 syscall jr $ra # $a0 = $v0 # Código syscall para print_int Comentarios: - La idea general del programa. - Que aclaren para corrección, que faciliten entender lo escrito. - Cualquier cosa que crean no se entienda fácil. Dificultades encontradas: - Problemas que les costaron dentro del programa. - Complejidades varias. Recuerden que este es sólo un ejemplo tipo, pueden hacer sus propias versiones, ojalá lo más claro posible. Nombre 1 Nombre 2 -- 2 -- Carrera