Assemblerprogramm-Sequenzen

Gast #1270273
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
#1270292
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
Gast #1270297
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
#1270329
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
Gast #1270339
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren