Brauche Hilfe, bei einen Spamfilter in Assembler.
-
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(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: "