www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Asammbler nicht richtig verstehe


Autor: Lord_Gismo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: foo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Höre er auf mit dieser Gossensprache!

Autor: Sebastian E. (der_andere_sebastian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Lord_Gismo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es scheint mir um Assembler auf "Atmel-Controllern" zu gehen, das 
jedenfalls legt das eher wirre Geschreibsel des Threadstarters nahe.

-> Verschoben.

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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_Ass... 
und 
http://www.roboternetz.de/wissen/index.php/AVR-Ein... 
weiterhelfen.

Autor: Guido Körber (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Chapmy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Meister Eder (edson)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Matthias Larisch (matze88)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Mensch_Z (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hut ab

es ist ja ein Lloard,der da schwreibt....
das klingelingt eben etwas aanderws !

Hut auf

Autor: Lord_Gismo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entschuldigt bitte mein "geschreibsel". Ich habe es nicht Böse Gemeint. 
Werde in Zukunft versuchen alles ein bisschen besser zu machen.

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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.

Autor: Lord_Gismo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Wegstaben Verbuchsler

Danke,


mit der Antwort kann ich was anfangen vielen Dank

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.