So also ich habe vor ganz kurzen angefangen mich dem assambler code zu beschäftigen auf grund dessen das ich in der arbeit nun mit Atmel Controllern arbeiten soll. So nun habe ich mir viel durch gelsen und versucht zu verstehn leider sind diese ganzen Asammbler Tutors für einsteiger sehr merkwürdig gestrinkt es wird nicht wirklich auf den einsteiger eingegangen und mit fremdbegriffen nur um sich geworfen. Nun ja nichts desto trotz habe ich angefangen mir die informationen nach und nach zusammen zu fassen und umzu schrieben nun bin ich aber an den Piont Registern hängen gelbliben da ich werder ihr arbeitsweise noch sonst irgendwie was dazu versthe. so nun meine Frage kennt einer von euch entwerder ein gutes Tutor wo mal wirklicdh was gut drinne beschrieben ist ohne das man wirklich schon arnung von der Materie hat oder kann mit zumindest einer von euch erklären was diese Point Register wie machen. ???? Würde mich sehr über eine Antwort freuen
Bei mir scheitert es leider gerade am Verständnis, was denn eigentlich "Point Register" sind. Heißen die wirklich so, oder ist das ein Tippfehler?
ne die sollen nach dem was ich hier vorliegen haben wirklich Pointer Register sein die sollen irgendwas mit Programmzeigern zu tun haben ich denke aber mal ich bin hier im falschen forum nur in dem für elektronik und µC habe ich kaum was über die eigentliche programirung gelesen von so einen AtMega 8
Es scheint mir um Assembler auf "Atmel-Controllern" zu gehen, das jedenfalls legt das eher wirre Geschreibsel des Threadstarters nahe. -> Verschoben.
@Lord Gismo: Das Tutorial http://www.mikrocontroller.net/articles/AVR hast Du schon durchgearbeitet? Falls es Verständnisprobleme gibt, dann frage einfach. Es ist immer schwierig, aus der Sicht eines "Wissenden" ein Tutorial für Anfänger zu schreiben. Durch Deine Fragen besteht evtl. die Möglichkeit, das Tutorial zu verbessern und für Anfänger verständlicher zu machen. Ansonsten könnte Dir auch das Tutorial hier http://www.roboternetz.de/wissen/index.php/AVR_Assembler_Einf%C3%BChrung und http://www.roboternetz.de/wissen/index.php/AVR-Einstieg_leicht_gemacht weiterhelfen.
Ein ganz wichtiger Tip: Beim Programmieren, egal mit welcher Sprache, ist es wichtig sehr präzise zu sein. Das fängt beim Umgang mit der natürlichen Sprache an. Ignoriert man da schon Syntax und Grammatik, dann wird es beim Programmieren wohl nur Frust geben. "Point Register" ist ein Tippfehler, "Pointer Register" dagegen nicht.
Man sollte sich vielleicht fragen, warum überhaupt ein anderer einen Blick auf solch ein Geschreibsel werfen sollte, wenn offensichtlich wird, daß ja nicht mal der Autor sein Geschreibsel eines nochmaligen Blickes für würdig erachtet und es mit tausenden Tippfehlern abschickt. Selbst wer noch mit Modem surft, kann seine Frage in aller Ruhe offline formulieren und nochmal durchlesen. Peter
Dass der OP evtl. nicht aus dem deutschsprachigen Raum stammt, ist euch wohl nicht in den Sinn gekommen, bevor ihr eure großkotzigen, dümmlichen Kommentare verfasst habt, oder?
Man kann ziemlich genau erkennen, ob einer der Sprache nicht so recht mächtig ist, oder ob einer einfach nur schlampig schreibt. Beispiel: 'Point Register'. Das is einfach nur Schlampig. Wenn das der einzige Fehler wäre, wärs ok, aber der ganze Text is nur so dahingerotzt.
@Chapmy >Asammbler In welcher Sprache schreibt man das so? Der Beitrag >Autor: Guido Körber (Gast) >Datum: 11.08.2008 11:15 hat es sehr schön auf den Punkt gebracht. Gruss, Edson
Wenn es so wäre (ich muss sagen, das sieht für mich nicht nach einer Wissenslücke der deutschen Sprache sondern wirklich nach geschludere aus), kann man das dazu schreiben und sich dennoch Mühe geben, wichtige Punkte richtig zu schreiben und vor allem den Text etwas zu strukturieren. Pointer Register ist kein deutsches Wort, Assembler ebenfalls nicht. Warum also sollte das nicht funktionieren? Dennoch: Ich habe gaaaanz grob verstanden, was der OP versucht uns zu sagen, finde es aber einfach unhöflich, zu erwarten, dass auf so geschriebene Beiträge geantwortet wird. Um nun nicht ganz sinnlos hier zu schreiben meine Hilfe dazu: Pointer Register sind die obersten 6 Register des µCs. Eigentlich sind sie nichts besonderes, bieten aber eine zusätzliche Möglichkeit: Sie werden jeweils in 2er Paaren als X Y und Z Register/Pointer bezeichnet. Sie können beschrieben werden, wie alle anderen high-register (r16-r31) auch, sind ja auch solche (Bsp: Z ist r30:r31). Die Extrafunktion ist dabei, dass man sie sehr leicht zur Adressierung des Srams benutzen kann. Normalerweise kannst du einzelne Werte aus dem SRam ins register lesen: lds r16, 0x100 (sram adresse), lädt den Wert aus der Sram Zelle 0x100 ins register R16. Hast du nun größere Strukturen im SRam, kann man das ganze vereinfachen: ldi ZH, HIGH(0x100) (->1) ldi ZL, LOW(0x100) (->0) wait_loop: sbic (test ob uart byte gesendet/puffer leer, weiß grad nicht welches ioreg/bit) rjmp wait_loop ; loop bis uart wieder bereit ld r16, Z+ ; sram byte in r16 kopieren und Z pointer um 1 erhöhen out UDR, r16 ; byte aus r16 ans uart ausgeben cpi ZL, 0xFF ; gucken, ob wir fertig sind brne wait_loop ; falls nicht -> nächstes byte Dieses Programm sendet nun 255 Bytes ab der SRam adresse 100 durchs uart. Ohne pointer-adressierung wäre das nicht so leicht möglich. Ich erinnere mich übrigens an mein erstes Programm: Eine sehr simple Lüftersteuerung, steuerbar übers Uart. Ich war damals noch relativ jung, vielleicht 15 oder so?(edit: habe gerade mal meine Rechnungen aus Interesse durchgekramt, das ganze war Ende 2003) Das Programm habe ich auf nem AT90S4423 oder so? komplett ohne SRAM benutzung geschrieben. Ich wusste einfach nicht, wie ich das SRam benutze und hab mich auch garnicht danach umgeschaut. Habe mich aber schon gewundert, wie man denn mit diesen 32 Registern alleine ein komplexes Programm schreiben soll :-) Dennoch hat alles funktioniert und ich konnte 4 Lüfter über die UART steuern :-) Inzwischen bin ich bei C angelangt, meine Assemblerkenntnisse möchte ich dennoch nicht missen, da man häufig gucken kann, was der Compiler mal wieder für nen Mist verzapft hat und sich überlegen kann, wie man ihm das ausreden kann (jaaa, er versteht mich einfach nicht, aber es gibt immer irgend eine Lösung) cu Matze
Hut ab es ist ja ein Lloard,der da schwreibt.... das klingelingt eben etwas aanderws ! Hut auf
Entschuldigt bitte mein "geschreibsel". Ich habe es nicht Böse Gemeint. Werde in Zukunft versuchen alles ein bisschen besser zu machen.
@Lord Gismo versuche erst mal, direin gewisses Basisverständniss vom Innenleben eines Mikrocontrollers zuzulegen (verschiedene Tutorien mögen das umfangreich erläutern) Diese Basiswissen ist erst mal nicht sehr Prozessor-spezifisch, und gilt übergreifend, z.B. - was ist eine ALU (Arithmetic-Logic-Unit, Rechenwerk) - was sind (lesbare und/oder schreibbare) Speicherbereiche - was sind I/O Ports (Ein-Ausgabe-Adressen) - was sind Register innerhalb eines Prozessors - was sind Zeiger (auf Speicherbereiche) - was sind Zeiger-Register (pointer-Register) - was ist ein Interupt (Unterbrechungsanforderung) wenn du das im groben verstanden hast, dann wird dir auch folgendes klar: Die Syntax (Schreibweise) eines Assembler-Befehls mag prozessorspezifisch sein, die Semantik (Bedeutung) eines Befehls ähnelt sich aber in vielen Stellen. Daher verwende ich hier mal eine "Pseudo-Sprache". Das mit der Pointer (Zeiger)-Arithmetik hat einen ganz einfachen Hintergrund: Sofern es Pointer (-Register) in einem Controller gibt, dann dienen diese UNTER ANDEREM dem indirekten Zugriff auf Speicherzellen. Anstelle von: ::: lade mir den Inhalt von Speicherstelle 4711 in das Register R1 (für einn Controller OHNE Pointer-Funktionen) kann man dann befehle nutzen wie: ::: lade mir den Inhalt der Speicherstelle, auf die das Pointer-Register P1 zeigt, in das Register R1 [Dies setzt voraus, daß das Pointer-Register P1 vorher mit dem Zeigerwert 4711 befüllt wurde] Dies alleine wäre ja noch nicht so aufregend, aber als weiteren Nutzen können Controller mit Pointer-Fähigkkeiten noch folgendes machen: Nimm an, du willst auf einen zusammenhängenden Bereich innerhalb des Speichers zugreifen (z.B. um Speicherinhalte von Adresse A (= 4711 .. 4721) nach Adresse B (= 0815 .. 0825) zu kopieren oder verschieben). Entweder machst du das jetzt "von Hand" , d.h. du speicherst dir in irgendwelchen Registern die Quell- und die Zieladressen, und zählst mit einer Schleife diese Werte hoch, ODER: du nutzt 2 Pointer (Register), die diese Hochzählerei für dich machen --- Weiteres Beispiel zu Pointern: Der "Stack" ist ein bestimmter Bereich innerhalb des Speichers, auf dem Inhalte verschiedenster Art abgelegt (gestapelt) werden. Dies können z.B. Rücksprungadresen von Programmen sein, oder Dateninformationen. Zur Verwaltung des Stacks (einer oder mehrerer) gibt es "Stackpointer" Wenn nun ein Unterprogrammaufruf erfolgt (CALL xxxxx) dann springt dein Assemblerprogramm "irgendwo hin" (nämlich zu der Speicheradresse wo das Unterprogramm begint. Die Rücksprungadresse (von wo das Hauptprogramm "losgesprungen" ist wird "automatisch" auf den Stack gelegt, und der Stackpointer verweist auf die Adresse im Stack, wo sich die Rücksprungadresse befindet. Wenn das Unterprogramm endet (z.B. durch RET), dann muß ja der Controller wissen wohin er zurückkehren muß. Dazu wird der Inhalt der Speicherstelle, auf dem der Stackpointer zeigt, wieder in den Programmzähler zurück übertragen, und der Stackpointer korrigiert.
@ Wegstaben Verbuchsler Danke, mit der Antwort kann ich was anfangen vielen Dank
Ein gibt auch immer noch so Dinger, die heißen Bücher. Diese Bücher gibt es sogar zum Thema Mikrocontroller. Wenn man eine aussagekrätige Antwort haben möchte, dann sollte im ersten Beitrag der genaue Mikrocontrollertyp erwähnt werden. Atmel ist ein Hersteller der unter anderem 8051, AVR und ARMs herstellt.
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.