.data 0x10010000 # data segment, at 0x1001 0000 .space 256 # tableau des caractères pour les fréquences a .data + 0 .ascii "Avec ses quatre dromadaires\n" .ascii "Don Pedro d'Alfaroubeira\n" .ascii "Courut le monde et l'admira.\n" .ascii "Il fit ce que je voudrais faire\n" .ascii "Si j'avais quatre dromadaires.\n" .byte 0 # zéro de fin de chaîne de caractères .text # code segment lui $s0, 0x1001 # load address of data segment addiu $s1, $s0, 256 # $s1 <- poème addiu $s2, $s0, 0 # $s2 <- fréquences # appel de fonction avec link = $ra contient l'adresse de retour jal compute_frequencies # exit program addiu $v0, $zero, 10 syscall # compute frequencies # s1: poème # s2: fréquences compute_frequencies: blcf: lbu $a0, ($s1) # $a0 <- s1[0] # if(s1[0] == 0) goto end beq $a0, $zero, alcf # fréquences[s1[0]] ++ addu $t0, $s2, $a0 # $t0 <- fréquences + s1[0] lbu $t1, ($t0) # $t1 <- fréquences[s1[0]] addiu $t1, $t1, 1 # $t1 <- fréquences[s1[0]] + 1 sb $t1, ($t0) # $t1 -> fréquences[s1[0]] # affichage addiu $v0, $zero, 11 # $v0 <- 11 (print character in $a0) syscall # s1++ addiu $s1, $s1, 1 j blcf alcf: jr $ra