PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu .dw und .db



Quagmire
19.10.2006, 20:36
Hallo,
ich hab mal eine wie ich denke sehr grundlegende Frage, ich habe in letzter Zeit mit viel interesse ASM-Code gelesen, und bin schon um einiges weiter ... =D>
Bei manchen Programmen kommen abschnitte mit
.dw
und
.db
vor, leider sagt mir das noch nicht so viel.
Ich weiss nur, dass words und bytes damit gesetzt werden können.
Ich dachte für euch Profis ist das doch ein klacks mir das zu erklären.
Was kann ich damit genau anfangen, und wie kann ich es verwenden ?
Könnte mir freundlicherweise jemand kommentierte Codebeispiele posten ? Ich bin für jede Erklärung sehr dankbar, da ich das früher oder später für das Studium lernen muss...

Danke
Quagmire

izaseba
19.10.2006, 20:42
Hallo,
Zieh Dir das hier (http://www.avr-asm-tutorial.net/avr_de/beginner/index.html) mal rein.

Gruß Sebastian

Quagmire
19.10.2006, 21:00
Danke sebastian, das Beispiel unter dem link .db und .dw ist mir zu dürftig. Es hat dort leider kein konkretes Beispiel. Aber trotzdem danke.

Eine frage wäre, wenn ich mit .db ein byte irgendwohinschreibe (stimmt das soweit?) wie kann ich es dann lesen ?
Bzw. wo wird es hingeschrieben ?

izaseba
19.10.2006, 21:20
Naja,
ich dachte eigentlich, es ist ziemlich gut beschrieben auf dieser Seite :-s

Also ganz kurz,
db bzw dw legen werte im Flash ab.
Es gibt hier eine enge Bindung mit Zeigern.
Am besten setzt man zuerst ein Label, und dann definiert man seine Werte


text:
.db 'H','A','L','L','O',0

Ich hab hier einfach einen String genommen.
Nach dem Assemblieren werden die Bytes im Flash liegen...

Zugriff geht ganz einfach,
man braucht den Z Zeiger und die Funktion lpm


ldi ZH,HIGH(2*text)
ldi ZL,LOW(2*text)


Jetzt "zeigt" der Z-Zeiger auch das Label "text" bzw. das erste Element von (Hier der Buchstabe H)

Als nächstes kommt der Befehl "lpm"



lpm

Jetzt hast Du den Inhalt worauf Z-Zeiger zeigt in Register R0 geladen.
Damit machst Du was Du auch immer lustig bist


mov R16,R0


Du kannst den Zeiger inkrementieren


adiw ZL,1

jetzt zeigt er auf 'A'
oder verringern


sbiw ZL,1

Jetzt zeigt er wieder auf 'H'
Man kann auch ein Paar Bytes in einem springen


adiw ZL,5


Jetzt klarer ?

Gruß Sebastian

Quagmire
20.10.2006, 15:01
DANKE, jetzt ist es klar wie Kloßbrühe !
Ich werd mich damit mal spielen ...
Eine Frage noch, wenn ich keine Labels verwende, kann ich dann .dw und .db trotzdem sinnvoll verwenden ?

Gruß
Quagmire

izaseba
20.10.2006, 17:16
Eine Frage noch, wenn ich keine Labels verwende, kann ich dann .dw und .db trotzdem sinnvoll verwenden ?

Sicher doch, wenn Du Dir genau ausrechnest an welcher Adresse Dein .db .dw
steht :wink:
Aber ich weiß nicht was gegen Labels spricht die sind dazu da um uns das Leben einfacher zu machen.

Gruß Sebastian