Programmieren - alles kontrollieren 4.937 Themen, 20.662 Beiträge

Assembler Problem

Firefucker / 7 Antworten / Flachansicht Nickles

Hi Leute,

ich verzweifle noch...weiß jemand wie man im 8086 Code einzelne Bits vertauschen kann?
Die Aufgabe ist folgende:
"Erstellen Sie ein Programm, welches eine 8-Bit-Folge (Byte), die im Datenbereich unter der Adresse "Original" abgelegt ist in umgekehter Reihenfolge (d.h. Bit 7 mit Bit 0, Bit 6 mit Bit1 usw vertauscht) wieder unter der Adresse "REVERSE" im Datenbereich ablegt."

Hab schon den swap befehl probiert doch bekomm die meldung das tasm den befehl nicht kennt, auch mit push und pop hab ich mir überlegt aber das problem ist das da nur bytes auf den stack können! wie kann ich einzelne bits vertauschen,,,alle überlegungen mit xor, ROR usw haben bisher nicht geklappt.

Wäre dankbar für jede Hilfe!

Gruß

bei Antwort benachrichtigen
Antwort Andreas42
Antwort Firefucker
Andreas42 Firefucker „Antwort“
Optionen

Hi!

Du arbeiteset jetzt auf der Ebene der CPU, da gibt es sowas wie Variablen streng genommen nicht. Es gibt zwar einige Assembler die Variablen unetrstützen, aber letztendlich reichen die dann auch nur die Adressen auf einen reservierten Speicherbereich weiter.
Es kann aber auch sein, dass die SHR&Co auch direkt Speicheradressen rotieren können, ich schu mal kurz nach...

Ich denke, dass geht ab 80186-CPUs.

Damit wären wir bei der ersten Frage. Ich weiss nicht, was du mit Eingabe meinst. Es gibt keinen ASM-Befehl, der einfach eine taste oder sowas einliest, dazu muss man entsprechende Routinen schreiben bzw. bei PCs unter DOS die richtigen Interrupts aufrufen.

Oder möchtest du dein Programm als ASM-Unterroutine einsetzen? Dann müsstest du einfach festlegen, wie der Zähler für deine Bits übergeben wird. Man könnte zum beispiel festlegen, dass die Anzahl der zu verscheiebenden Bits in AL übergeben wird. Am Anfang der Routine wird dann CL mit (AL-8) belegt. (Du müsstest CL sowieso nich intialisieren, also mit Null vorbelegen.)

Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen
Antwort Firefucker