#+ BITTE NICHT MODIFIZIEREN: Vorgabeabschnitt
#+ ——————————————
.data
str_ergebnisse: .asciiz “Ergebnisse der Auswertefunktion für Testwoerter:\n”
str_dots: .asciiz “…………………..”
str_true: .asciiz “True\n”
str_false: .asciiz “False\n”
animal_example_bitmap: .word 0x48090285, 0x14419124, 0x12410413, 0x4103d029, 0x228a3101, 0x2016008, 0x04000e14, 0x0115906d
.text
.eqv SYS_PUTSTR 4
.eqv SYS_PUTCHAR 11
.eqv SYS_PUTINT 1
.eqv SYS_EXIT 10
.globl main
main:
# Fehlendes Element zur Auswertefunktion hinzufuegen:
la $a0, str_missing_word_to_add
la $a1, animal_example_bitmap
li $a2, 4
jal bf_add
# Auswertefunktion fuer alle Testwoerter aufrufen:
li $v0, SYS_PUTSTR
la $a0, str_ergebnisse
syscall
la $s0, test_words
_main_test_loop:
lb $t0, 0($s0)
beqz $t0, _main_test_endloop
move $a0, $s0
li $v0, SYS_PUTSTR
syscall
move $a0, $s0
la $a1, animal_example_bitmap
li $a2, 4
jal bf_evaluate
move $t2, $v0
la $a0, str_dots
_main_next_str_loop:
lb $t0, 0($s0)
addi $s0, $s0, 1
addi $a0, $a0, 1
beqz $t0, _main_next_str_endloop
j _main_next_str_loop
_main_next_str_endloop:
li $v0, SYS_PUTSTR
syscall
la $a0, str_false
beqz $t2, _main_result_false
la $a0, str_true
_main_result_false:
syscall
j _main_test_loop
_main_test_endloop:
# Programmende
li $v0, SYS_EXIT
syscall
# int hash_str(char *str_in, int seed):
hash_str:
li $t0, 1 # $t0: longhash
_hash_str_seed_shift_loop:
beqz $a1, _hash_str_seed_shift_endloop
sll $t0, $t0, 1
subi $a1, $a1, 1
j _hash_str_seed_shift_loop
_hash_str_seed_shift_endloop:
addi $t0, $t0, 5380
_hash_str_loop:
lbu $t1, 0($a0)
beqz $t1, _hash_str_endloop
sll $t2, $t0, 5
addu $t0, $t0, $t2
xor $t0, $t0, $t1
addi $a0, $a0, 1
j _hash_str_loop
_hash_str_endloop:
move $v0, $t0
srl $t0, $t0, 8
xor $v0, $v0, $t0
srl $t0, $t0, 8
xor $v0, $v0, $t0
srl $t0, $t0, 8
xor $v0, $v0, $t0
andi $v0, $v0, 0xff
jr $ra
# int bitmap_getbit(char *bitmap, int index):
bitmap_getbit:
srl $v0, $a1, 5 # $v0: word index
sll $v0, $v0, 2
add $v0, $v0, $a0
lw $v0, 0($v0) # $v0: word from bitmap
andi $t0, $a1, 0x1f # $t0: bit index
_bitmap_getbit_shift_loop:
beqz $t0, _bitmap_getbit_shift_endloop
srl $v0, $v0, 1
subi $t0, $t0, 1
j _bitmap_getbit_shift_loop
_bitmap_getbit_shift_endloop: # $v0: (word from bitmap >> bit index)
andi $v0, $v0, 1
jr $ra
# void bitmap_setbit(char *bitmap, int index):
bitmap_setbit:
srl $t1, $a1, 5 # $t1: word index
sll $t1, $t1, 2
add $t1, $t1, $a0
lw $t2, 0($t1) # $t2: word from bitmap
andi $t0, $a1, 0x1f # $t0: bit index
li $t3, 1
_bitmap_setbit_shift_loop:
beqz $t0, _bitmap_setbit_shift_endloop
sll $t3, $t3, 1
subi $t0, $t0, 1
j _bitmap_setbit_shift_loop
_bitmap_setbit_shift_endloop: # $t3: (1 << bit index)
or $t2, $t2, $t3
sw $t2, 0($t1)
jr $ra
#+ BITTE VERVOLLSTAENDIGEN: Persoenliche Angaben zur Hausaufgabe
#+ -------------------------------------------------------------
# Vorname:
# Nachname:
# Matrikelnummer:
#+ Loesungsabschnitt
#+ -----------------
.data
test_words:
.asciiz "Katze"
.asciiz "Baum"
.asciiz "Hund"
.asciiz "Lampe"
.asciiz "See"
.asciiz "Maulwurf"
.asciiz "Maus"
.asciiz "Goldfisch"
.asciiz "Boot"
.asciiz "Regenwurm"
.byte 0x00
str_missing_word_to_add: .asciiz "Regenwurm"
.text
bf_evaluate:
# Funktion bf_evaluate bitte hier implementieren.
jr $ra
bf_add:
# Funktion bf_add bitte hier implementieren.
jr $ra