Problem mit Assembler

dabu

Well-known member
ID: 11566
L
20 April 2006
7.229
407
Ich hab grad ein Problem mit einer Aufgabe zu Assemblern.

Die Aufgabe lautet:
Testen Sie, ob das Bit25 in Register 21 gesetzt ist. Falls Bit25 == 1, dann Sprung zu next. Ansonsten Bit25 in Register 21 löschen. Alle weiteren Bits sollen unverändert bleiben.

Wie kann ich denn auf ein einzelnes Bit zugreifen und das prüfen? Ich hänge da jetzt schon eine ganze Zeit lang fest. Eventuell denke ich auch einfach nur zu kompliziert :(. Ich wäre über Hilfe sehr dankbar :).
 
Der genaue Befehl hängt natürlich von der Plattform ab, auf der du programmierst, ich richte mich jetzt mal nach denen hier. Aber prinzipiell hast du 2 Möglichkeiten:

SBRS bzw. SBRC Register, Bitnummer
Überspringt den nächsten Befehl (z.b. ein rcall), wenn das spezifizierte Bit gesetzt (S) oder leer (C) ist.


Oder (wenn du keinen Sprung, sondern eine Verzweigung haben willst) du legst mit AND ne Maske drüber, so dass nur noch das eine Bit was du untersuchen willst übrig bleibt. Wenn das Register danach ungleich 0 ist, war das Bit gesetzt, sonst war es nicht gesetzt.
 
SBRS bzw. SBRC Register, Bitnummer
Überspringt den nächsten Befehl (z.b. ein rcall), wenn das spezifizierte Bit gesetzt (S) oder leer (C) ist.
Ich hab eben alle möglichen Befehle bei mir durchgeschaut, aber da ist einfach nichts mit einzelnen Bits dabei. Auch nichts, was dem von dir hier ähnlich ist. Aber ist auch egal, denn das ist wirklich gut:

Oder (wenn du keinen Sprung, sondern eine Verzweigung haben willst) du legst mit AND ne Maske drüber, so dass nur noch das eine Bit was du untersuchen willst übrig bleibt. Wenn das Register danach ungleich 0 ist, war das Bit gesetzt, sonst war es nicht gesetzt.

Daran hatte ich gar nicht gedacht. Die Idee ist genial. Vielen Dank, das hilft mir sehr weiter :).