Forum: Mikrocontroller und Digitale Elektronik Assemblerprogramm-Sequenzen


von spike840 (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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

von spike840 (Gast)


Lesenswert?

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

von spike840 (Gast)


Lesenswert?

Sorry,

es handelt sich um einen 8086 Prozessor

von Mark B. (markbrandis)


Lesenswert?

spike840 schrieb:
> Was toggeln ist, kann ich mir irgendwie nicht so recht vorstellen.

Toggle = Bit invertieren.

von spike840 (Gast)


Lesenswert?

danke schonmal für die Antwort.

Dann ist also

1.OR AL,16H
2.AND AL, 3EH

und 3. eventuell Neg AL ?

von Karl H. (kbuchegg)


Lesenswert?

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

von spike840 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.