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(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: "