Hallo,

Zitat Zitat von oberallgeier Beitrag anzeigen
Unverständlich sind mir noch Zahlendarstellung dieser Art : rjmp .+8 , brne .-4 , brne .-12.
Ich benutze immer das Instruction set
http://ww1.microchip.com/downloads/e...set-manual.pdf

Da sieht man, daß das Sprungziel bei den meisten Sprünge wie auch die Sprünge bei Verzweigungen wie bei brne relativ mit einer Konstanten k angegeben werden. Der Assembler/Compiler rechnet die Konstante anhand des Sprunglabels aus und trägt es in den Befehl ein. Die .+8 bzw .-4 ist die relative Sprungweite. Dahinter schreibt der Assembler nochmal die Programmcounter Adresse als absoluten Wert wie 0x3A oder so ein. Die relative Sprungweite scheint zu groß zu sein, hat aber vermutlich damit zu tun, daß der Programmcounter schon auf den nächsten Befehl zeigt.


Ebenso unverständlich ist mir noch der Zusammenhang zwischen Assemblercode und Kommentar wie hier :
........rjmp .+8 ; 0x40 <__SREG__+0x1>
........brne .-4 ; 0x3a <__CCP__+0x6>
........brne .-12 ; 0x38 <__CCP__+0x4>

SREG hatte ich in der Studio4-Assemblerhilfe gefunden, ist klar. CCP dagegen gibts weder im Instruction Set Summary der Controllerdokumentation noch in der Studio4-Hilfe.
Der Compiler erzeugt auch eine .lst Datei. Dort findet man die Zuordnung der Namen zu Adressen unter DEFINED SYMBOLS ganz unten in der Datei.
Die 0x38 beim letzen brne liegt 0x4 Adressen über der Adresse von __CCP__ (0x3a liegt 0x6 über __CCP__). __CCP__ war bei mir das MCUSR Register (Schulterzuck )
Das gleiche mit __SREG__ . Wozu die Angabe gut ist? Keine Ahnung.


Lücken über Lücken - auch die Zeilen
........sbiw %0,1
........\n\t
........brne 1b
........: "=w" (__c) : "0" (__c)
sind geheimnisvoll.
Das sind die Inline Assembler Geheimnisse/Syntax von C. Aufschluß könnte der Artikel im RN-Wissen geben:
https://rn-wissen.de/wiki/index.php/...ler_in_avr-gcc

Ich sehe, dass ich sehr umfassende Wissenslücken zu Assembler habe. Daher sollte ich die Titelfrage ändern in: Wo kann man diese Fragen - und alle sonstigen Feinheiten - zu Assembler lernen? Buch? (www-)Tutorial? oder . . .
Da habe ich leider keine spezielle Empfehlung. Ich hatte meine ersten Assembler Erfahrungen mit dem C64. Jetzt versuche ich andere Beispielcodes zu verstehen bzw wie andere Authoren bestimmte Probleme lösen und nutze für meine asm-Routinen hauptsächlich das o.g. Instruction Set Manual.

Gruß
Searcher