Assemblersprache LDI etc.

Gast #5459164
Hallo,

versuche mich gerade mit den Grundzügen in die Assembler-Sprache ein 
zuarbeiten. ( ATmega16)

Ich will anfangs mit einfachste Befehle arbeiten.

Liege ich hiermit richtig :


Port D als Ausgang

LDI r16,0xFF
OUT DDRD ,r16

Port D als Eingang:

LDI r16,0x00
IN DDRD ,r16


Kopieren des Inhaltes von r13 nach r14 :

MOV  r14,r13


Über konstruktive Beiträge würde ich mich freuen :)
Gast
S. Landolt (Gast) Danke du bist anscheinend ein Richtiger Profi :))


nun zu den Befehlen PUSH und POP ( bzw. Stackpointer)

Um das ganze richtig zu verstehen :

Mit Push starte ich ein Unterprogramm, bzw. hole mir einen Befehl vom 
Arbeitsregister mit dem Stackpointer)

Mit Pop beende ich ein Unterprogramm, bzw. lege den Befehl mithilfe des 
Stackpointers ins Arbeitsregister zurück)



Assembler-Unterprogramm ( Port D als Ausgang) :

CALL

PUSH r16

LDI r16,0x00
IN DDRD ,r16

POP r16

RET


Liege ich damit auch richtig ?
Willst du jetzt alle Befehle einzeln durchgehen?

Matze schrieb:
> Mit Push starte ich ein Unterprogramm, bzw. hole mir einen Befehl vom
> Arbeitsregister mit dem Stackpointer)
nö
> Mit Pop beende ich ein Unterprogramm, bzw. lege den Befehl mithilfe des
> Stackpointers ins Arbeitsregister zurück)
nö
> Assembler-Unterprogramm ( Port D als Ausgang) :
>
> CALL
>
> PUSH r16
>
> LDI r16,0x00
> IN DDRD ,r16
>
> POP r16
>
> RET
Das wiederum ist richtig.
Call /return sichern den PC auf dem stack bzw holen ihn von dort zurück. 
Dass passiert automatisch ohne push und pop.
push/pop brauchst du, wenn du in einem Unterprogramm Register 
veränderst, die eigentlich das aufrufende Programm verwendet.
Also am Anfang sichern, beliebig verwenden, wiederherstellen und return.
in DDRD,... ist aber immer noch falsch bzw kannst du dir das ldi vorher 
sparen.
Gast
Das SFR (special function register) DDR wird geschrieben, also muss da 
grundsätzlich out stehen. (mal davon abgesehen, dass man es auch lesen 
könnte, aber es steht ja nur drin, was man vorher irgendwann mal 
hineingeschrieben hat).
1
...
2
 rcall  D_auf_Eingang
3
...
4

5

6
D_auf_Eingang:
7
 push   r16
8
 ldi    r16,0
9
 out    DDRD,r16
10
 pop    r16
11
 ret

Die Beschreibungen
> Mit Push starte ...
> Mit Pop beende ...
sind falsch.


> Oder lese ich mit dem Befehl "IN " Daten in den Eingang ein ?
Sie lesen mit in Daten vom Eingang ein, also z.B. von PIND.
Gast
H.Joachim S. schrieb:
> Willst du jetzt alle Befehle einzeln durchgehen?
 nein, nur diesen Bereich, sry bin neu in diesem Gebiet



> Also am Anfang sichern, beliebig verwenden, wiederherstellen und return.


Sprich ich sichere mit dem Befehl POP das Arbeitsregister um es beliebig 
verwenden zu können.

Und mit dem Befehl Pop schiebe ich meine bearbeiteten Befehle wieder ins 
Arbeitsregister zurück ??
Gast
Matze schrieb:
> Sprich ich sichere mit dem Befehl POP das Arbeitsregister um es beliebig
> verwenden zu können.
>
> Und mit dem Befehl Pop schiebe ich meine bearbeiteten Dateb wieder ins
> Arbeitsregister zurück ??


Ist es so sinngemäß zu verstehen ? :))
Gast
S. Landolt schrieb:
> Sagen wir lieber "meine vorher gesicherten Daten".

Ok super, hat licht ins dunkle gebracht :)


Hier mein Verständnis zum Speicher :

EEPROM : nichtflüchtig und Betriebsstunden etc.
Flash :  nichtflüchtig und für Programme
RAM   :   flüchtig und Datenspeicher


Im groben so richtig, oder gibt es noch einen signifikanten Unterschied 
?
mit push legt man z.B: die Daten eines Arbeisregisters auf einen 
"Stapel" danach kann man das Arbeitsregister für andere Sachen 
verwenden, wenn man fertig ist holt man das ganze mit pop wieder vom 
Stapel runter.

Man kann auch nach dem Ablegen auf dem Stapel weitere Sachen auf den 
Stapel legen um an den untersten wert wieder ranzukommen muss man die 
oberen Teile zuerst abholen.
Gast
Matze schrieb:
> Hallo,
>
> versuche mich gerade mit den Grundzügen in die Assembler-Sprache ein
> zuarbeiten. ( ATmega16)
>
> Ich will anfangs mit einfachste Befehle arbeiten.

Wenn du dich mit dem AVR Assembler beschäftigen möchtest, dann empfehle 
ich dir auf jeden Fall das 'AVR Instruction Set Manual'

http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-0856-AVR-Instruction-Set-Manual.pdf

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 8 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.