DLX einzelne bits prüfen (Parity checker)



  • Hallo,

    kann mir von euch jemand sagen wie man in DLX einzelne bits in Registern prüfen kann? Ich kann dazu nichts finden. Vielleicht kann mir von euch jemand weiterhelfen? Soll einen even Parity checker schreiben falls das hilft.



  • Ich kenne mich mit DLX überhaupt gar nicht aus, aber Wikipedia listet unter Befehlssatz AND und OR auf. Was brauchst du mehr?



  • Ja das habe ich schon entdeckt, aber mir ist nicht klar wie ich das auf ein 7-Bit ASCII Zeichen anwenden kann. Danke für die schnelle Antwort 🙂 Ich hab mir dazu auch schon C++ und Java Programme angeschaut, wie das dort so ein parity checker umgesetzt ist, hilft mir jedoch auch nicht weiter.



  • du machst ein AND mit einem "anderen Register", wo 1 drin steht, um das "rechte" bit zu testen. Dann shiftest du das "andere Register" 1 nach links und testest erneut. Das machst du 7 mal (oder solange, wie das "andere Register" kleiner als 2^8 ist)
    Geht natürlich auch manuell mit 7 immediates, also ANDI mit 1, dann mit 2, dann mit 4 usw. Diese 7 Werte musst du summieren und dann einfach wieder mit ANDI 1 auf gerade/ungerade testen.



  • @Nastypasty
    Wenn du den zu prüfenden Wert in einem Register hast... und dieses Register dann um X Bits nach rechts verschiebst... und das Ergebnis davon dann mit 1 UND verknüpfst...
    Was kommt dann raus?

    Oder anders gesagt: Um die Parity zu berechnen musst du die Bits nicht prüfen. Es reicht wenn du die einzelnen Bit-Werte addierst und dann guckst ob das Ergebnis gerade oder ungerade ist.



  • Ich verstehe es nicht. Das Register um x Bits nach rechts verschieben? Ich muss irgendwie schauen wie oft in dem Zeichen eine 1 vorkommt. Das heißt ich hab ein register mit einer 1 drinnen und eines mit dem Zeichen. Dann check ich erste stelle ob 1 und 1 zweite stelle 1 und 1 usw oder? und muss einen counter immer um 1 erhöhen falls 1 und 1 vorkommt?



  • Du hast mehrere Möglichkeiten.

    Entweder du schiebst eine Testmaske über deine Zahl du zählt, wie oft da nicht-0 herauskommt. Oder lässt die Testmaske gleich (=1) und schiebst deine Zahl darüber und zählst dort.

    Kann doch nicht so kompliziert sein. Mal dir das vielleicht mal auf Papier auf, falls das hilft.

    Am einfachsten ist wahrscheinlich:

    • lade deine Zahl in ein Register R
    • solange R > 0:
      • teste niedrigstes Bit (und zähle mit, wie oft es exisitert)
      • schiebe R 1 Bit nach rechts
    • teste, ob Anzahl Bits gerade/ungerade ist

Anmelden zum Antworten