All pastes #91655 Raw Edit

Someone

public text v1 · immutable
#91655 ·published 2006-07-18 20:04 UTC
rendered paste body
.data
indirizzo_str:
.asciiz "l'indirizzo e' "
carattere_str:
.asciiz "il carattere e' "
stringa:
.asciiz "ciao"

.text
# prende un indirizzo in $a0 e lo stampa usando la syscall print_int di SPIM
stampa_indirizzo:	addi $sp, $sp, -4
			sw $ra, 0($sp)
			
			# copia $a0 in $t0 perche' dobbiamo passare un parametro
			# alla syscall quindi modificheremo $a0
			move $t0, $a0

			# carica in $a0 l'indirizzo di partenza della stringa
			# indirizzo_str
			la $a0, indirizzo_str
			# carica in $v0, 4, cioe' print_string
			li $v0, 4
			syscall
			
			# un puntatore e' un intero, quindi dobbiamo usare
			# print_int che e' 1
			li $v0, 1
			# carica in $a0 l'indirizzo del puntatore da stampare
			move $a0, $t0
			syscall

			# ora dobbiamo stampare il carattere "\n", la syscall
			# print_chr e' 11
			li $v0, 11
			# carica in $a0 "\n" (che in decimale e' 10)
			li $a0, 10
			syscall
			
			lw $ra, 0($sp)
			addi $sp, $sp, 4
			jr $ra


stampa_carattere:	addi $sp, $sp, -4
			sw $ra, 0($sp)
			
			# copia $a0 in $a1
			move $a1, $t0

			# carica in $a0 l'indirizzo di partenza della stringa
			# carattere_str
			la $a0, carattere_str
			# carica in $v0, 4, cioe' print_string
			li $v0, 4
			syscall
			
			# carica il carattere puntato dal puntatore $t0
			lb $t1, 0($t0)
			# dobbiamo stampare un carattere, print_chr e' 11
			li $v0, 11
			# copia in $a0 il carattere da stampare
			move $a0, $t1
			syscall

			# ora dobbiamo stampare il carattere "\n", la syscall
			# print_chr e' 11
			li $v0, 11
			# carica in $a0 "\n" (che in decimale e' 10)
			li $a0, 10
			syscall
			
			lw $ra, 0($sp)
			addi $sp, $sp, 4
			jr $ra

funzione:	addi $sp, $sp, -4
		sw $ra, 0($sp)
	
		# carica l'indirizzo di partenza della stringa in $s0.
		# la significa load address, quindi metti in $s0 l'indirizzo in
		# cui si trova "stringa".  Una stringa in assembly e'
		# rappresentata dall'insieme di caratteri contenuti tra il suo
		# indirizzo di partenza e il primo carattere 0 trovato scorrendo
		# la stringa.
		la $s0, stringa

		# stampa il puntatore $s0 e il carattere che esso punta
		move $a0, $s0
		jal stampa_indirizzo
		move $a0, $s0
		jal stampa_carattere

		# stampa il secondo carattere
		addi $s0, $s0, 1
		move $a0, $s0
		jal stampa_indirizzo
		move $a0, $s0
		jal stampa_carattere


		# stampa il terzo carattere
		addi $s0, $s0, 1
		move $a0, $s0
		jal stampa_indirizzo
		move $a0, $s0
		jal stampa_carattere


		# stampa il quarto carattere
		addi $s0, $s0, 1
		move $a0, $s0
		jal stampa_indirizzo
		move $a0, $s0
		jal stampa_carattere

		# stampa il quinto carattere
		addi $s0, $s0, 1
		move $a0, $s0
		jal stampa_indirizzo
		move $a0, $s0
		jal stampa_carattere

		lw $ra, 0($sp)
		addi $sp, $sp, 4
		jr $ra

main:		addi $sp, $sp, -4
		sw $ra, 0($sp)
		jal funzione
		lw $ra, 0($sp)
		addi $sp, $sp, 4
		jr $ra