U
Hey Leute,
ich bin ein blutiger Anfänger in Assembler, und ich soll einen Spamfilter für Emails schreiben, der für jedes "Badword" die "Gewichtung" erhöht. Mein Gedanke war der das ich zuerst auf das erste Email-Wort gehe das mit allen "Badwords" abgleiche und dann halt, wenn es mit allen Badwords abgeglichen wurde auf das nächste Email-Wort gehe. Natürlich hab ich einige Fehler im Code, die ich leider nicht überprüfen kann, da QTSpim einfach beim Laden der Datei "Keine Rückmeldung" mehr gibt. Ich dachte zuerst das irgendwo eine Endlosschleife drin ist, und einfach irgendwo was vergessen habe, aber nach exzessiven Suchen nichts gefunden habe, wende ich mich nun an das Forum. Ich weiß das der code momentan bei
"bne email_buffer(a2),badwords_buffer(a2), badwords\_buffer(a2),badwords_buffer(a3), Else3"
ein "Syntax Error" hervor bringt.
Danke schon mal in voraus.
Hier ist der jetzige Code den ich habe.
spamfilter:
### Register gemaess Registerkonventionen sichern
addi $s1, $s1, -20
sw $a0, 0($s1)
sw $a1, 4($s1)
sw $a2, 8($s1)
sw $a3, 12($s1)
sw $v0, 16($s1)
### Badwords liegen im Puffer badwords_buffer
### Der Text der E-Mail liegt im Puffer email_buffer
### Schleife ueber Bad words (wort1,gewicht1,wort2,gewicht2,...)
### lese ein Wort
### lese und konvertiere Gewicht
### suche alle Vorkommen des Wortes im Text der E-Mail und addiere Gewicht
add $a0, $zero, $zero # Value von $a0 wird auf Null gesetzt
add $a1, $zero, $zero # Value von $a1 wird auf Null gesetzt
add $a2, $zero, $zero # Value von $a2 wird auf Null gesetzt
add $a3, $zero, $zero # Value von $a3 wird auf Null gesetzt
add $v0, $zero, $zero # Value von $v0 wird auf Null gesetzt
la $t0, size #lade Addresse size auf $t0
la $t1, badwords_size #lade Addresse badwords_size auf $t1
for:
beq $a0, $t0 , Endif # Wenn x/a0 == EmailWörter, wenn alle Email Wörter durchgelaufen wurden, beende loop
beq $a1, $t1, Else2 # Wenn i/a1 == 20 gehe zu Else2 um das nächste Wort der Email zu benutzen
bne email_buffer($a2), badwords_buffer($a3), Else3 # Email_buffer != badwords_buffer um das nächste Wort der Badwords zu benutzen
beq email_buffer($a2), badwords_buffer($a3), Else # Wenn Email_buffer == badwords_buffer gehe zu else um Gewicht zu addieren
j for # Schleifen wiederholung
Else: # Gewichtung wird hochgezählt und zu Else2 verwiesen
addi $v0, v0, 1 # v0/Gewicht wird hochgezählt
j Else2 # Geht zu Else2
Else2: # Nächstes Email Wort wid ausgewählt und die Schleife wiederholt
add $a1, $zero, $zero # i/$a1 wird auf Null gesetzt um wieder von vorne die Wörter durchlaufen zu können
add $a3, $zero, $zero # $a3 wird auf Null gesetzt um wieder von vorne die Wörter durchlaufen zu können
addi $a2, $a2, 4 # Wählt nächstes Email Wort aus
addi $a0, $a0, 1 # x/a0 wird hochgezählt
j for # Schleife wird wiederholt
Else3:
addi $a1, $a1, 1 # i/$a1 wird hochgezählt
addi $a3, $a3, 4 # Wählt nächstes BadWort aus
j for # Geht zu for
Endif: #v0/Gewichtung wird zurückgegeben
### Rueckgabewert setzen
lw $v0, 16($s1)
addi $s1, $s1, 4
### Register wieder herstellen
jr $ra
.data
email_buffer: .asciiz "Hochverehrte Empfaenger,\r\n\r\nbei dieser E-Mail handelt es sich nicht um Spam sondern ich moechte Ihnen\r\nvielmehr ein lukratives Angebot machen: Mein entfernter Onkel hat mir mehr Geld\r\nhinterlassen als in meine Geldboerse passt. Ich muss Ihnen also etwas abgeben.\r\nVorher muss ich nur noch einen Spezialumschlag kaufen. Senden Sie mir noch\r\nheute BTC 1,000 per Western-Union und ich verspreche hoch und heilig Ihnen\r\nalsbald den gerechten Teil des Vermoegens zu vermachen.\r\n\r\nHochachtungsvoll\r\nAchim Mueller\r\nSekretaer fuer Vermoegensangelegenheiten\r\n"
size: .word 550
badwords_buffer: .asciiz "Spam,5,Geld,1,ROrg,0,lukrativ,3,Kohlrabi,10,Weihnachten,3,Onkel,7,Vermoegen,2,Brief,4,Lotto,3"
badwords_size: .word 93
spamscore_text: .asciiz "Der Spamscore betraegt: "