Untitled
unknown
assembly_x86
4 years ago
3.7 kB
3
Indexable
main: addi x8,x0,3 #Asignacion de x addi x9,x0,12 #Grado del polinomio addi x18,x18,-48 #Reservando espacio en la pila addi x19,x0,0 #asignando a result 0 addi x20,x0,0 #i=0 addi x5,x18,0 #Copio la direccion de la cabeza del vector bge x0,x0,for0main #LLamado al final de end for for0main: bge x20,x9,endfor0main #Evaluamos la expresion i <= n addi x10,x20,0 jal x1,factorial addi x6,x10,0 #Se recibe el resultado de factorial RTemporal addi x10,x8,0 #Se manda el valor de x addi x11,x20,0 #Se manda el valor de i jal x1,pot #Llamado a la funci�n que eleva a una potencia addi x4,x10,0 #Se recibe el valor de la potencia div x7,x4,x6 #Se divide el valor de la potencia entre el factorial i sw x7,0(x5) #Cargo el valor de la division en la pila en la direccion #que contiene x5 addi x20,x20,1 #i++ addi x5,x5,4 #Aumento la posicion de la cabecera bge x0,x0,for0main endfor0main: addi x5,x18,0 #Se vuelve a copiar la direccion del vector addi x10,x9,0 #Se manda el valor n addi x11,x18,0 #Se manda la cabecera del vector jal x1,pol #Se hace el llamado a la funcion que evalua el polinomio addi x19,x10,0 #Recibo el resultado del polinomio addi x18,x18,48 #Libero el espacion del vector li x17,10 ecall #---------------------*Calculo de factorial*--------------------------# factorial: addi sp,sp,-12 sw x8,8(sp) #Acumulador sw x9,4(sp) sw x1,0(sp) addi x8,x0,1 #Acumulador inicia en 1 addi x9,x10,0 #Pasamos el argumento x a x9 bge x0,x0,for0factorial for0factorial: beqz x9,endfor0factorial #Evalua la expresion si x9 mul x8,x8,x9 #Multiplico Acc por el valor actual de x addi x9,x9,-1 beq x0,x0,for0factorial endfor0factorial: addi x10,x8,0 lw x8,8(sp) lw x9,4(sp) lw x1,0(sp) addi sp,sp,12 jalr x0,x1,0 #-----------------------------*Fin factorial-------------------------# #-----------------------*Validacion en el polinomio*-----------------# pol: addi sp,sp,-24 sw x8,20(sp) #Valor de suma sw x9,16(sp) #Valor de i sw x18,12(sp) sw x19,8(sp) sw x20,4(sp) sw x1,0(sp) addi x8,x0,0 addi x9,x0,0 addi x18,x10,0 #Valor de n addi x19,x11,0 #Cabecera del vector addi x4,x19,0 #Copio de nuevo la direccion en un registro temporal bge x0,x0,for0pol for0pol: bge x9,x18,endfor0pol lw x5,0(x4) add x8,x8,x5 #Sum+=k[i] addi x9,x9,1 addi x4,x4,4 beq x0,x0,for0pol endfor0pol: addi x10,x8,0 lw x8,20(sp) #Valor de suma lw x9,16(sp) #Valor de i lw x18,12(sp) lw x19,8(sp) lw x20,4(sp) lw x1,0(sp) addi sp,sp,24 jalr x0,x1,0 #----------------------*Fin validacion*----------------------# #------------------------*Potencia*-------------------------# pot: addi sp,sp,-20 sw x8,16(sp) sw x9,12(sp) sw x18,8(sp) sw x19,4(sp) sw x1,0(sp) addi x8,x0,1 #Acumulador = 0 addi x9,x0,0 #Iterador = 0 addi x18,x10,0 #X addi x19,x11,0 #Y bge x0,x0,forpot forpot: bge x9,x19,endforpot addi x10,x18,0 #Envio a multi x addi x11,x8,0 #Envio a multi el acumulador jal x1,multi addi x8,x10,0 addi x9,x9,1 beq x0,x0,forpot endforpot: addi x10,x8,0 lw x8,16(sp) lw x9,12(sp) lw x18,8(sp) lw x19,4(sp) lw x1,0(sp) addi sp,sp,20 jalr x0,x1,0 multi: addi sp,sp,-20 sw x8,16(sp) sw x9,12(sp) sw x18,8(sp) sw x19,4(sp) sw x1,0(sp) addi x8,x0,0 #Acumulador = 0 addi x9,x0,0 #Iterador = 0 addi x18,x10,0 #X addi x19,x11,0 #Y bge x0,x0,formulti formulti: bge x9,x19,endformulti add x8,x8,x18 addi x9,x9,1 beq x0,x0,formulti endformulti: addi x10,x8,0 lw x8,16(sp) lw x9,12(sp) lw x18,8(sp) lw x19,4(sp) lw x1,0(sp) addi sp,sp,20 jalr x0,x1,0
Editor is loading...