Assembler im C-Projekt; Variable in Register

OP #4746184
Hallo,

ich bin gerade dabei mich durch den Source-Code eines ATMEL-Bootloader 
zu ackern. Dort wird unter anderem eine asm-Datei verwendet. An 
folgendem Code-Ausschnitt komme ich nicht weiter:
1
 
2
#if defined(__GNUC__)
3
  /**
4
   * For GCC:
5
   * \param address uint32_t r22:r25
6
   * \param nvm_cmd uint8_t  r20
7
   */
8
  in r25, RAMPZ         ; Store RAMPZ. Highest address byte is ignored, so using that
9
  out RAMPZ, r24        ; Load R24 into RAMPZ
10
  movw ZL, r22          ; Load R22:R23 into Z.
11
  lds r24, NVM_CMD      ; Store NVM command register (r24 is no longer needed)
12
  sts NVM_CMD, r20      ; Load prepared command into NVM Command register.

Ich muss sagen, dass meine Assembler-Kenntnisse ausbaufähig sind. Meine 
Frage ist: Wie ist sichergestellt, dass die Variablen address und 
nvm_cmd auch in den ensprechenden Registern liegen und nicht woanders? 
Wo wird das "zugewiesen"?

Grüße, Alex

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 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.