Di seguito posto una traccia d'esame che sono riuscito a svolgere però senza usare la funzione. 

Ora sto provando con la funzione ma non riesco ad implementarla come dovrebbe essere...posto la traccia ed il codice

NB: mi sono bloccato proprio nell'uso della funzione alla quale non riesco a capire bene se passare solo il contatore degli 1...

##################################################################################################
# Scrivere un programma che legga un numero da tastiera e ne stampi il numero di 1 contenuto			
# nella sua rappresentazione binaria utilizzando una funzione (count_ones) che riceve in input				
# il puntatore all'intero e ritorna il conteggio degli "1", che sarà successivamente stampato nel				
# main. La chiamata della funzione dovrà rispettare le convenzioni per lo scambio dei parametri			
# - ritorno dei risultati e per il salvataggio dei registri.																				
# ESEMPIO: se il numero inserito è 17892 (in binario --> 0100010111100100), in numero di 				
# "1" dovrà essere 7.																																
###################################################################################################


.globl _main

.data
	input_num:			.asciz " Dammi un numero (-2^31 <= x < 2^31): "
	output_num:			.asciz " Il numero in binario: "	
	msg_count:			.asciz "\n Il numero di 1 nella rappresentazione binaria è "
	
	resto: .asciz " Il resto è "
	divisione: .asciz " La divisione è "
	
.text
_main:
	
	la a0, input_num
	li a7, 4
	ecall
	li a7, 5
	ecall
	mv t1, a0
	
	li t2, 2								# Valore per la divisione

# Calcolo il resto	
	rem t3, t1, t2					#	Calcolo il resto e lo salvo nel registro t3
print:	
	la a0, resto
	li a7, 4
	ecall
	mv a0, t3
	li a7, 1
	ecall
# Calcolo la divisione	
	div t1, t1, t2
print:	
	la a0, divisione
	li a7, 4
	ecall
	mv a0, t1
	li a7, 1
	ecall
	


	jal ra, count_ones	
			
	
	la a0, msg_count
	li a7, 4
	ecall
	mv a0, t4
	li a7, 1
	ecall
end:	
# Fine del programma
li a7, 10
ecall

# FUNZIONE DA COMPLETARE
count_ones:
	addi, sp, sp, -8
	lw ra, 0(sp)
	lw s0, 8(sp)
	
	addi s0, s0, 1 
	mv ra, s0
	
	sw s0, 8(sp)
	sw ra, 0(sp)
	addi, sp, sp, 16
	ret