.text
histo:
BACK:
lb $t1, 0($a0)
beq $t1, $0, DONE
slti $t4, $t1, 122
beq $t4, $0, BACK
addi $a0, $a0, 1
slti $t4, $t1, 96
bne $t4, $0, SKIP
nop
j UPDATE_TABLE
addi $t1, $t1, -97
SKIP:
addi $t1, $t1, -65
sltiu $t4, $t1, 26
beq $t4, $0, BACK
UPDATE_TABLE:
sll $t1, $t1, 2
add $t3, $a1, $t1
lw $t2, 0($t3)
addi $t2, $t2, 1
j BACK
sw $t2, 0($t3)
DONE:
jr $ra
nop
.data
doi:
.ascii "CDe"
.ascii "[]\^_`@?>={|}~\n" .ascii "The quick brown fox jumps over the lazy dog."
.ascii "\n"
.ascii "Do you know what it means to miss New Orleans"
.ascii "And miss it each night and day"
.ascii "I know I'm not wrong... this feeling's gettin' stronger"
.ascii "The longer, I stay away"
.ascii "Miss them moss covered vines...the tall sugar pines"
.ascii "Where mockin' birds used to sing"
.ascii "And I'd like to see that lazy Mississippi...hurryin' into spring"
.ascii ""
.ascii "The moonlight on the bayou.......a creole tune.... that fills the air"
.ascii "I dream... about magnolias in bloom......and I'm wishin I was there"
.ascii ""
.ascii "Do you know what it means to miss new orleans"
.ascii "When that's where you left your heart"
.ascii "And there's one thing more...i miss the one I care for"
.ascii "More than I miss New Orleans"
.ascii ""
.asciiz "-- Louis Armstrong"
msg:
.asciiz "Letter %/t3/c count: %/t1/3d (%/f4/6.2f%%) %/t5/s\n"
msg_perf:
.ascii "Histogram of %/f2/.0f chars took %/s5/d instructions, "
.asciiz "%/f10/.1f insn / char.\n"
.align 4
histogram_data:
.space 104
stars:
.space 40
TB_100:
.double 100.0
.text
.globl __start
__start:
mtc0 $0, $22 la $a1, histogram_data
addi $t1, $a1, 0
addi $t2, $t1, 100
L3:
sw $0, 0($t1)
bne $t1, $t2, L3
addi $t1, $t1, 4
la $t1, stars
addi $t2, $t1, 40
addi $t3, $0, 42 L4:
sb $t3, 0($t1)
bne $t1, $t2, L4
addi $t1, $t1, 1
sb $0, 0($t1)
la $a0, doi
jal strlen
nop
mtc1 $v0, $f2
cvt.d.w $f2, $f2
la $t3, TB_100
ldc1 $f4, 0($t3)
div.d $f6, $f4, $f2
addi $v0, $0, -1
mtc0 $v0, $22 jal histo
mfc0 $s7, $9
mtc0 $0, $22 mfc0 $s6, $9
add $t0, $0, $0
addi $t3, $0, 64
addi $t4, $t3, 26
la $s1, histogram_data
addi $v0, $0, 11
la $s2, stars
addi $s2, $s2, 41 la $a0, msg
L2:
lw $t1, 0($s1) addi $s1, $s1, 4
addi $t3, $t3, 1 srl $t6, $t1, 1
sub $t5, $s2, $t6 mtc1 $t1, $f0
cvt.d.w $f0, $f0
mul.d $f4, $f0, $f6 syscall TEST:
bne $t3, $t4, L2
nop
sub $s5, $s6, $s7 mtc1 $s5, $f8
cvt.d.w $f4, $f8
div.d $f10, $f4, $f2
la $a0, msg_perf
addi $v0, $0, 11
syscall
addi $v0, $0, 10
syscall
upper:
ULOOP:
lbu $t1, 0($a0) addi $a0, $a0, 1
beq $t1, $0, UDONE
slti $t2, $t1, 97 bne $t2, $0 ULOOP
slti $t2, $t1, 123 beq $t2, $0, ULOOP
addi $t1, $t1, -32
j ULOOP
sb $t1,-1($a0)
UDONE:
jr $ra
nop
strlen:
addi $t1, $a0, 0
SLOOP:
lbu $t0, 0($t1)
bne $t0, $0, SLOOP
addi $t1, $t1, 1
addi $t1, $t1, -1
jr $ra
sub $v0, $t1, $a0