Hallo! Ich bin gerade im AVR-Tutorial am arbeiten, und bin auf 2 kleine offnen Frage gestoßen: Im 4ten teil steht ldi Temp1, $21 Temp1 ist ja nichts anderes, als der name für einen register. aber was bedeutet "$21" ? ist das ein eigenes Zahlensystem? Wofür steht brne? aus der HTML Hilfe werde ich nicht schlau?!?! danke für die Hilfe!!
HI, wenn ich das gerade richtig sehe, wird das $-Zeichen zur Kennzeichnung von Hex-Werten verwendet. Ist also "mehr oder weniger" ein eigenes Zahlensystem. Eher eine eigene Darstellung von Zahlen, wobei es hier die Ziffern 0 bis F gibt (im Dezimalen entspricht das 0 bis 16). brne müßte branch not equal heißen. also "Springe wen nicht gleich" So ein Sprung bezieht sich immer auf einen direkt davor ausgeführten Verleich, er wertet die hierbei gesetzten Flags aus. Eigentlich ist die Hilfe im AVR-Studio doch ziemlich gut. Einfach den Curser auf den Befehl stellen und F1 drücken. Da steht genau auf welche Flags der Befehl "schaut" und was er dann tut.
Hi Lukas, $xx steht fuer ne Hexadezimalzahl. Kennzeichen ist das $. Basis ist also 16. Buchstaben a-f stehen fuer 10-15. brne - branch when not equal wenn ich mich recht erinnere. Bezieht sich auf der vorhergehenden Befehl, bzw um genau zu sein in welchem Zustand er das Status Register hinterlaesst. Dort wird das Ergebnis des Vergleichs in den jeweiligen Flags hinterlassen so das die branch-Befehle reagieren koennen. Eine gute Anleitung fuer erste Schritte in Assembler mit Befehlsuebersicht und Erklaerung der wichtigsten findest du hier: http://www.avr-asm-download.de/beginner_de.pdf cu Tommi
$21 oder auch 0x21 Der AVR Assembler akzeptiert beide Schreibweisen. Zu brneq ldi counter, 64 loop: eor checksum, data ;checksumme aktualisieren (hier nur als Beispiel) dec counter brne loop Der counter wird in jedem Durchgang decremntiert. Solange counter nicht 0 ist, wird an das Label gesprungen.
achos, also ganz einfach gesagt, "brne sprungziel" prüft, ob der register in der zeile dadrüber 0 ist. und wenn dies der fall ist, wird zu sprungziel: gesprungen.
achja, nochwas, kann ich auch einfach dezimal zaheln benutzen? oder müssen das hexadezimal zahlen sein?
Nein, Du kannst selbstverständlich auch Dezimalzahlen benutzen - die werden dann halt ohne das Präfix geschrieben.
> achos, also ganz einfach gesagt, "brne sprungziel" prüft, ob der > register in der zeile dadrüber 0 ist. Salopp gesagt: ja Wenn mans genau nimmt: nein brne benutzt einfach nur die Flags um zu entscheiden: Sprung oder nicht Sprung. Dem brne ist es völlig egal, wie die Flags zu ihrem Wert kommen. Das kann durch einen Vergleich (cpi) sein, dass kann auch durch eine Berechnung sein (inc, dec). > achja, nochwas, kann ich auch einfach dezimal zaheln benutzen? Sicher kann man das. Aber Hex-Zahlen sind in vielen Fällen praktischer, da man mit etwas Übung sofort auf das zugrundeliegende Bitmuster schliessen kann. Die Tabelle der einstelligen Hex-Zahlen hat man schnell auswendig gelernt, zumal es da ein paar Eselsbrücken gibt. Mal ne Frage: Welche Bits sind in der Dezimal-Zahl 183 gesetzt. Wenns dir so geht wie mir, dann musst du rechnen. Die gleiche Zahl in Hex: B7. Das ist leicht: Das Bitmuster für B ist 1011 und das Bitmuster für 7 ist 0111, also ist B7 in Binärschreibweise 10110111.
> kann ich auch einfach dezimal zaheln benutzen?
Ja aber selbstverständlich.
Ich nutze immer das Zahlenformat, was im jeweiligen Zusammenhang die
beste Aussagekraft hat.
- Schleifenzähler gebe ich meist dezimal an (ldi temp,234),
- Werte, bei denen es auf die einzelnen Bits ankommt in Hex oder Bin
($f7, 0b11110111, 0xf7),
- ASCII-Zeichen gebe ich als ASCII an (ldi temp,'a')...
Es kommt also immer darauf an, was man damit ausdrücken will. Es wäre
lächerlich, Schleifenzähler binär oder als ASCII anzugeben oder
ASCII-Zeichen in binär.
Wenn es um die Steuerregister der Hardwarefeatures geht (ADC
aktivieren, Timer-Betriebsart einstellen usw.) dann sollte man Register
und Bits beim Namen nennen.
ldi temp,(1<<aden)|(1<<adsc)|(1<<adfr)
out adcsr,temp
setzt z.B. im Register adcsr die Bits aden, adsc und adfr auf eins,
wobei alle anderen Bits auf null gesetzt werden.
...
flags? was sit das so ungefär? Sonst bin ich nu voll informiert, und kann weiter arbeiten! Dankäääää!
Flags, Statusbits... sind die einzelnen Bits im Statusregister (SREG). Jede Operation und jeder Vergleich beeinflusst diese Flags. Bedingte Sprünge werten diese Flags aus. Die gesamte Steuerung von Verzweigungen, aber auch einige Berechnungen erfolgen über diese Flags. In der Befehlsliste am Ende des Datenblatts des jeweiligen AVRs (und in der Online-Hilfe zum AVR-Studio) erfährst du, welche Befehle welche Flags beeinflussen. Im Avr-Instruction-Set erfährst du weitere Einzelheiten zu den Flags und zu den Befehlen. Ohne dieses Wissen bist du in ASM aufgeschmissen. ...
Flags wird so gesprochen, wie hier erklärt. http://www.fein-schliff.de/Flex.gif http://www.hen-mietpark.de/bilder/Flexboschgross.jpg Hatte ich unserem Programmierer zum Geburtstag geschenkt. War ein ziemlichen HALLOOO :-)). Der hatte auch nur seine Flags im Kopf. Flags heisst wohl sowas wie Fähnchen/Merker und sind Bits im Statusregister der CPU, die einige Sachen klarstellen: obs einen Überlauf gab, ob das Ergebnis der letzten Berechnung zB negativ wurde usw. selbst der User hat hier noch die Möglichkeit, einen eigens für ihn reservierten Merker (war es das T-BIT?) zu setzen oder zu löschen. Den kann man dann auch abfragen, logisch :-))
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.