Mogren,
Eine ganz kleine Frage zu sbr:
Wenn ich sbr r16, 0x01 schreibe wird das erste Bit gesetzt. Was
passiert mit den bits die davor in dem selben Register gesetzt waren?
werden gelöscht?
Label 1:
sbrc r16,Bit3
rjmp,NixTun1:
sbrs r16,Bit3
cbi PortB,0x03
Label 2:
sbrs r16,Bit1
rjmp NixTun2
sbrc r16,Bit1
sbi PortB,0x03
ldi Temp1,CS12
out TCCR1B,Temp1
sbr r16,Bit2
Tim1OFISR:
sbr r16, Bit3;an dieser stelle möchte dass Bit1,Bit2 gelöscht werden
ldi Temp1,CS12
OUT TCCR1B, Temp1
clr Temp1
Dieter schrieb:> passiert mit den bits die davor in dem selben Register gesetzt waren?> werden [die] gelöscht?
Nein, wie ein Blick ins Instruction Set oder in den Simulator verraten
hätte.
>Wenn ich sbr r16, 0x01 schreibe wird das erste Bit gesetzt
Nein du schreibst 0b0000.0001 in das Register 16, also explizit Null in
die anderen Bits des Registers.
Rene Schube schrieb:>>Wenn ich sbr r16, 0x01 schreibe wird das erste Bit gesetzt>> Nein du schreibst 0b0000.0001 in das Register 16, also explizit Null in> die anderen Bits des Registers.
Huh ?
Das SBR ist nur eine andere Bezeichnung für ein ORI, da wird nix
überschrieben.
Rene Schube schrieb:>>Wenn ich sbr r16, 0x01 schreibe wird das erste Bit gesetzt>> Nein du schreibst 0b0000.0001 in das Register 16, also explizit Null in> die anderen Bits des Registers.
immer wieder gern genommen:
http://www.youtube.com/watch?v=vNc6mIwH9lI
Dieter schrieb:> Mogren,>> Eine ganz kleine Frage zu sbr:>> Wenn ich sbr r16, 0x01 schreibe wird das erste Bit gesetzt.> ...>
SBR – Set Bits in Register
Diese Befehle haben mich auch schon wahnsinnig gemacht (sbr, cbr,
sbi, cbi, sbrs, sbrc, sbis, sbic ). Ein kleines Detail erklärt
beim Befehl SBR einiges, nämlich Set Bit ( s )in Register.
Was z.B. bedeutet das sbr r16,$03 nicht Bit3, sondern Bit0 und Bit1
setzt und die anderen so läßt wie sie waren.
Description:
Sets specified bits in register Rd. Performs the logical ORI between the
contents of register Rd and a constant mask K and
places the result in the destination register Rd.
Bernd_Stein
Empfehlung: SBR/CBR vermeiden und ORI/ANDI verwenden.
Weshalb Atmel das so zweifelhaft definiert hat ist mir auch nicht klar.
Mit einer Bitnummer, die vom Assembler in die Maske umgerechnet worden
wäre, hätten diese Aliase einen Sinn ergeben. So wie sie definiert sind
dienen sie nur zur Verwirrung.
Bernd Stein schrieb:> Diese Befehle haben mich auch schon wahnsinnig gemacht
Der gesamte Befehlssatz der AVRs treibt mich auf Grund der teilweise
nicht vorhandenen Logik öfters in Richtung Wahnsinn, vor allem, wenn man
von den 8051ern kommt. Der ist darauf ausgelegt, die Entwickler zu
Hochsprachen zu nötigen.
Thomas
Hi
>Der gesamte Befehlssatz der AVRs treibt mich auf Grund der teilweise>nicht vorhandenen Logik öfters in Richtung Wahnsinn, vor allem, wenn man>von den 8051ern kommt.
Warum?
MfG Spess
Thomas P. schrieb:> Der ist darauf ausgelegt, die Entwickler zu> Hochsprachen zu nötigen.
Nein. Dann hätte man die Aliasnamen SBR, CBR, CLR und dergleichen
auch gleich ganz weglassen können. Ein Compiler hat keine
Bauchschmerzen oder Dokumentationsprobleme damit, ein Bit mit dem
Befehl ORI zu setzen oder ein Register mit XOR rd,rd zu löschen.
Der Mischmasch zwischen Bitnummern und Bitmasken ist dagegen in der
Tat Mist, auch und gerade aus Sicht der Hochsprache. Es wäre viel
einfacher gewesen, die Bits alle als Masken zu definieren (also
PB0 als 0x01 statt als 0, PB1 als 0x02 statt 1 usw.), denn das ist
das, was man in C ohnehin benutzen muss. Für ein "SBI PORTB, PB0"
hätte der Assembler ja problemlos die Bitmaske in die für den
Opcode notwendige Bitnummer umrechnen können und sich ggf. dann
beschweren, wenn im Operanden etwas anders steht als eine Zahl, die
genau ein Bit gesetzt hat.
Ist aber nun leider zu spät.
Es gibt noch andere Pseudo-Befehle. Wenn man sich mal die Opcodes der
ganzen bedingten Sprünge (BRCC, BRSH, ... BRIE) anschaut, stellt man
fest, dass das Variationen von BRBC und BRBS sind.
Ich denke, das hat Marketing-Gründe. "133 Powerful Instructions" klingt
halt toll.
Ich schlag vor, diesen Thread zu löschen, da er mehrfach falsche
Informationen enthält und den völligen Neuling, der ihn vielleicht in
google findet, mehr verwirrt als hilft.
Philipp Klostermann schrieb:> Ich denke, das hat Marketing-Gründe. "133 Powerful Instructions" klingt> halt toll.
Wobei Microchip bei den 8-Bit PICs die Anzahl der Befehle extra
runterrechnet, um mit möglichst wenig Befehlen werben zu können.