Hallo, ich möchte folgende Assemblerprogramm-Sequenzen erstellen, die 1. die Bits 4, 2 und 1 im CPU Register AL auf "1" setzt 2. die Bits 7,6 und 0 im CPU-Register CH auf "0" rücksetzt 3. die Bits 6,4,2 und 0 im CPU-Register DL toggelt Ich bin ein blutiger Anfänger und habe gerade erst angefangen, Assembler zu programmieren. Der prinzipielle Aufbau der Register ist mir klar. Auch die Befehle in Assembler. Doch nun scheitert es an dem Einstieg, wie ich dieses Wissen anwenden und umsetzen kann. Bitte helft mir und gebt mir ein paar Anregungen! Vielen Dank
Tja, da ist dann schon mal die erste Rückfrage: Um welchen Prozessor handelt es sich überhaupt? Assembler ist immer hardwarespezfisch. Aber seis drum, die meisten CPUs können AND und OR mit einem Register unf einer ´Konstanten. Um ein Bit zu setzen, baut man sich eine Maske in der genau diese Bits auf 1 sind. Ein ver-ODER-n des Registerinhalts mit dieser Maske liefert ein Ergebnis, in dem genau diese Bits ebenfalls auf 1 gesetzt sind (Die Syntax, wie in deinem Assembler Binärzahlen geschrieben werden, musst du ergänzen) OR AL, 00010110 Genau das Umngekehrte kann man zb mit einem AND machen. Überall dort, wo in der Maske eine 0 ist, liefert eine Ver-UND-ung eines Registerinhalts mit dieser Maske ebenfalls eine 0
ich habe mal probiert, die ersten beiden zu schreiben: 1. mov AL,16 H 2. mov CH,3E H Die Hex-Zahlen sind aus dem Binärcode für die einzelnen Bits entstanden Was toggeln ist, kann ich mir irgendwie nicht so recht vorstellen. Mfg
spike840 schrieb:
> Was toggeln ist, kann ich mir irgendwie nicht so recht vorstellen.
Toggle = Bit invertieren.
danke schonmal für die Antwort. Dann ist also 1.OR AL,16H 2.AND AL, 3EH und 3. eventuell Neg AL ?
spike840 schrieb: > danke schonmal für die Antwort. > > Dann ist also > > 1.OR AL,16H > 2.AND AL, 3EH > > und 3. eventuell Neg AL ? Nein, XOR macht das. Deine mov Lösung ist ja grundsätzlich nicht so schlecht. Nur sagt die Aufgabenstellung ja nichts darüber aus, was mit den restlichen Bits passieren soll. Wenn in AL nur 4, 2 und 1 auf 1 gesetzt sein sollen und alle anderen Bits sollen 0 sein, dann ist ein mov der Befehl der Wahl. Wenn aber die anderen Bits ihren Zustand beibehalten sollen, dann benutzt du ein OR Es gibt 3 logische Grundfunktionen. UND, ODER, und EXLUSIV ODER (XOR) UND kann man benutzen um Bits gezielt auf 0 zu bringen ODER kann man benutzen um Bits gezielt auf 1 zu bringen XOR kann man benutzen um Bits umzudrehen, zu toggeln
ich denke mal es sollen nur die bits beeinflusst werden, die auch beschrieben sind. Somit ist der MOV Befehl nicht der richtige. Ich werde es nun so machen: 1.OR AL, 16H 2.AND CH,3EH 3.XOR DL,55H Ist es jetzt so richtig? Danke für die schnelle und kompetente Hilfe! Mfg und schönen Abend noch
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.