-> Hier kostenlos registrieren
'Nabend
Wiedereinmal habe ich ein kleines Problem.
Es geht darum, für eine Förderanlage ein neues Programm zu schreiben.
Hierzu will ich mittels Schieberegister 8 Stellen (jeweils eine einzelne) ansprechen.
Nachfolgend eine Möglichkeit, die ich mir überlegt habe mittels ROL-DW:
Ein vordefinierter Wert wird in das MD16 geschrieben;
Mittels Flankenmerker wird das MD16 gelesen, um eine Stelle weiterrotiert und wiederum ins MD16 geschrieben;
Nun wird 1/4 des MD's, nämlich nur ein MB abgefragt, und ins MB 1 verschoben;
Anschließend wird noch der Sperrmerker gesetzt, damit nicht weitere Bits in das MD16 geschrieben werden;
So weit, so schlecht.
Ich habe nun zwar ein schönes Register, dass durchläuft, jedoch werden durch ROL-DW nicht nur meine 8 benötigten Bits durchrotiert, sondern 32. D.h. 3/4 der Durchlaufzeit vergeht umsonst.
Das ist jetzt zwar kein Problem, weil es sich hier eh um keine kritische Maschine handelt, schön isses aber trotzdem nicht.
Gibt es hier also die Möglichkeit, nur ein einzelnes Byte zu rotieren?
Es ist zwar möglich, nach 8 Schritten bzw. bei erreichen eines bestimmten Merkers das gesamte Register wieder um 8 Stellen oder so zurück (nach rechts) zu schieben, ist aber auch wieder nur mehr Code-Schreiberei.
Andere Möglichkeit: Einen Zähler nochzählen lassen, und den ZW jeweils mit CMP ==I zu vergleichen und danach das entsprechende Bit zu setzen. Nach erreichen von ZW=8 mittels MOVE den Wert "0" ins ZW zu schreiben, bzw. über ein weitere CMP und einem Merker den Zähler rücksetzen.
Das ist alles möglich, jedoch zu aufwändig, daher nochmals zurück zur eigentlichen Frage: Gibt es ein 8bit-Schiebereigster?
Danke und lg
Wiedereinmal habe ich ein kleines Problem.
Es geht darum, für eine Förderanlage ein neues Programm zu schreiben.
Hierzu will ich mittels Schieberegister 8 Stellen (jeweils eine einzelne) ansprechen.
Nachfolgend eine Möglichkeit, die ich mir überlegt habe mittels ROL-DW:
Ein vordefinierter Wert wird in das MD16 geschrieben;
Mittels Flankenmerker wird das MD16 gelesen, um eine Stelle weiterrotiert und wiederum ins MD16 geschrieben;
Nun wird 1/4 des MD's, nämlich nur ein MB abgefragt, und ins MB 1 verschoben;
Anschließend wird noch der Sperrmerker gesetzt, damit nicht weitere Bits in das MD16 geschrieben werden;
So weit, so schlecht.
Ich habe nun zwar ein schönes Register, dass durchläuft, jedoch werden durch ROL-DW nicht nur meine 8 benötigten Bits durchrotiert, sondern 32. D.h. 3/4 der Durchlaufzeit vergeht umsonst.
Das ist jetzt zwar kein Problem, weil es sich hier eh um keine kritische Maschine handelt, schön isses aber trotzdem nicht.
Gibt es hier also die Möglichkeit, nur ein einzelnes Byte zu rotieren?
Es ist zwar möglich, nach 8 Schritten bzw. bei erreichen eines bestimmten Merkers das gesamte Register wieder um 8 Stellen oder so zurück (nach rechts) zu schieben, ist aber auch wieder nur mehr Code-Schreiberei.
Andere Möglichkeit: Einen Zähler nochzählen lassen, und den ZW jeweils mit CMP ==I zu vergleichen und danach das entsprechende Bit zu setzen. Nach erreichen von ZW=8 mittels MOVE den Wert "0" ins ZW zu schreiben, bzw. über ein weitere CMP und einem Merker den Zähler rücksetzen.
Das ist alles möglich, jedoch zu aufwändig, daher nochmals zurück zur eigentlichen Frage: Gibt es ein 8bit-Schiebereigster?
Danke und lg