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