www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assemblerprogramm-Sequenzen


Autor: spike840 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spike840 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spike840 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry,

es handelt sich um einen 8086 Prozessor

Autor: Mark Brandis (markbrandis)
Datum:

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

Toggle = Bit invertieren.

Autor: spike840 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke schonmal für die Antwort.

Dann ist also

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

und 3. eventuell Neg AL ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spike840 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.