Untitled

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