Verständnisfrage: LDI TEMP, (1<<INT1)|(0<<INT0)
Hallo an alle Programmierer.
Ich habe eine Verständnisfrage:
In einem Assembler-Programm habe ich den folgenden Ausdruck gefunden:
Code:
LDI TEMP, (1<<INT1)|(0<<INT0)
Was passiert hier genau?
in der Variablen TEMP (was als Register definiert ist) wird das Bit INT1 (Bit7) gesetzt und BIT INT0 (Bit6) gelöscht?
Und was passiert mit den übrigen Bits, die in Temp bereits gesetzt sind? Bleiben die erhalten oder werden die gelöscht?
Und was bewirkt sowas:
Code:
LDI Temp,(1<<URSEL)|(3<<UCSZ0)
Wird hier Bit URSEL (Bit7) und UCSZ1 + UCSZ0 (Bit2+Bit1) gesetzt?
Es handelt sich hierbei um ein Assemblerschnipsel für einen ATmega8.
Danke vorab für eure Info!
Mitch.
Re: Verständnisfrage: LDI TEMP, (1<<INT1)|(0<<IN
Hallo,
Zitat:
Zitat von Mitch64
Code:
LDI TEMP, (1<<INT1)|(0<<INT0)
der zweite Teil ist Käse - es wird nur das Bit für INT1 gesetzt, die Null verändert nichts, weil das ganze ja über ODER verknüpft ist. Um das Bit für INT0 zu löschen müsste man
Code:
ANDI TEMP, ~(1<<INT0)
machen, das würde alle Bits (sofern gesetzt) außer dem Bit von INT0 gesetzt lassen.
Zitat:
Zitat von Mitch64
Und was passiert mit den übrigen Bits, die in Temp bereits gesetzt sind? Bleiben die erhalten oder werden die gelöscht?
Die werden gelöscht.
Zitat:
Zitat von Mitch64
Code:
LDI Temp,(1<<URSEL)|(3<<UCSZ0)
Wird hier Bit URSEL (Bit7) und UCSZ1 + UCSZ0 (Bit2+Bit1) gesetzt
Ja, außerdem wird der Rest gelöscht/nicht gesetzt - im übrigen halte ich dieses Manöver mit (3<<UCSZ0) für gefährlich, da baut man schnell nen Fehler oder übersieht, dass anstelle einer Eins die Drei da steht.
mfG
Markus
Edit: Kurzantwort auf die aktuelle Frage: Ja