.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