MIPS Stack Pointer PCSpim

di il
1 risposte

MIPS Stack Pointer PCSpim

Ciao, sto cercando di realizzare un programma che legga n valori letti da tastiera, e poi ristampi i valori letti utilizzando lo stack pointer, il problema è che riesco a fare il loop di lettura e salvare nello stack ma quando cerco di riaccedere allo stack non trova più i valori salvati precedentemente, posto il codice cosi vedete che è meglio , scusate se ho scritto delle idiozie ma ho appena iniziato con l'assembly. Grazie dell'aiuto !!!

#Programma 
	.data

str1: 		.asciiz  "Numero di valori da inserire: "
str2: 		.asciiz  "Inserisci x: \n"
output: 	.asciiz   "RISULTATO: "
	
        .text
	.globl main
main:	

#Lettura del numero di valori da inserire
	li $v0, 4
	la $a0, str1
	syscall
	
	li $v0, 5
	syscall
	move $s0, $v0		# $s0 numero di valori da inserire
	
	sll $s3, $s0, 2 	# $s0 * 4	
	sub $sp, $sp, $s3	# dealloco lo stack pointer	

# Ciclo di lettura dei N numeri interi
	
loop:	li $v0, 4  		# $v0 codice della print_string 
	la $a0, str2 		# $a0 indirizzo della stringa 
	syscall			# stampa la stringa prompt	

	# Lettura dell’intero
	li $v0, 5		# $v0 codice della read_int
	syscall		 	# legge l’intero e lo carica in $v0
	
	sw $v0, 0($sp)		# memorizza valore letto in $sp
	addi $sp, $sp, 4
	addi $t1, $t1, 1
	bne $t1, $s0, loop	#loop per l'inserimento dei valori x
	
#ciclo di stampa dei valori letti precendentemnete	

loop_stampa:
	li $v0, 4  		# $v0 codice della print_string 
	la $a0, output 		# $a0 indirizzo della stringa 
	syscall			

	
	li $v0, 1		# $v0 codice della print_integer
	lw $a0, 0($sp)
	syscall	  	  	# stampa dell’intero
	addi $sp, $sp, 4
	add $t2, $t2, 1
	bne $t2, $s0, loop_stampa    # $t2 = $s0(N valori da inserire) 

	
#fine
	add $sp, $sp, $s3
	li $v0, 10 		# $v0 codice di exit
	syscall			# esce dal programma

1 Risposte

  • Re: MIPS Stack Pointer PCSpim

    Ciao!

    gli N valori li carichi correttamente nello stack!
    poi per prelevarli (e quindi stamparli...) dovresti fare (almeno credo):
    
    cicloStampa:
    ...
    lw $t0,0($sp)      # in $t0 hai il valore prelevato dallo stack 
    addi $sp,$sp,-4   # $sp punterà al prossimo valore
    ...
    
    ricordati di azzerare lo stack quando non ti serve +
Devi accedere o registrarti per scrivere nel forum
1 risposte