Hallo PicNick,
diese Seite kannte ich schon, ist ja von Dir, nichtwahr? Ist auch gut für Einsteiger und zum Lernen/Auffrischen seiner Kenntnisse, keine Frage.

Das Problem ist aber ein anderes: Bascom nutzt intern alle möglichen Register von r0 bis r31. Dies ist sehr stark abhänging von dem jeweiligen BASCOM-Befehl welchen Du benutzt. Da ich ca. 50% Assembler nutze, kann ich natürlich nicht nach jedem BASCOM-Befehl erneut compilieren, das Ergebnis mit einem Disassembler begutachten um festzustellen welche Register nun wieder genutzt wurden. Ich muß mich ja beim Mischen von ASM/BASCOM/ASM unbedingt darauf verlassen können, das meine Register in der ASM-Nutzung nicht von Bascom verändert wurden.
Beispiel:
Ich möchte folgende BASCOM-Befehlzeile optimieren:
FOR i = 0 to 255 : LCD "Hallo PicNick" : NEXT i

Dies möchte ich mit dem Register r12 tun, also:
clr r12
hierweiter:
LCD "Hallo PicNick"
inc r12
brne hierweiter

Das Problem: ob jetzt tatsächlich 256x Dein Nick im LCD ausgegeben wird, ist unbedingt davon abhängig, ob Bascom intern bei der Umsetzung des LCD-Befehls zufälligerweise r12 nutzt od. eben nicht.
Stelle Dir einfach vor Du nutzt im obigen Beispiel I2C-Befehle statt den LCD-Befehl und statt r12 würdest Du r6 nehmen: bang! Warum? Weil in dem Fall Bascom ein error-Flag in r6 benutzt. Das ist soweit ja bekannt aus div. Literatur (z.B. Kühnel). Das habe ich bei der Einleitung des Themas ganz Oben unter Pkt. 1) aufgelistet: diese Register NIE selber in Assemblerzeilen nutzen. Klar.

Meine Frage zielt aber auf die RESTLICHEN Reg., also die in der obigen Auflistung 2) + 3). Lassen wir mal die Register-Paare X,Y,Z weg, weil Bascom diese z.T. auch nutzen wird, so bleiben Unsicherheiten bei den Reg.: r0, r1, r2, r3, r7, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25.

Ich habe eine Anwendung mit 50% Assembler, der Quell-Code geht über 18 DinA4-Seiten. Ich habe jetzt folgendes gemacht: am Anfang des Programms habe ich die fraglichen 21 obigen Register mit den Wert AAh beschrieben. Weiterhin kann ich über ein vorhandene Tastatur div. Funktionen einleiten. Jede Funktion benutzt div. (andere) BASCOM-Befehle. Eine besondere Funktion ist diese: die Ausgabe der 21 Reg. auf dem LCD-Display. Und jetzt kommts: wenn ich mir zuerst nach Prog.-Start die Reg. ansehe steht fast überall AAh drin. Arbeite ich immer mehr Funktion ab - und zwar NUR BASCOM-Befehle - und sehe mir zwischendurch die Register-Inhalte an, dann stelle ich fest: je mehr versch. BASCOM-Befehle abgearbeitet werden, desto mehr Reg. wurden genutzt und haben einen Wert <> AAh. Also? Am Ende waren fast alle Reg. verändert. Diesen Test hatte ich gemacht BEVOR ich mit Assembler anfing, ich meine hier in dem BASCOM-Projekt (nur soviel: ich prog. seit 20 Jahren in Assembler, z.B.: 6502, 8080, Z80, 68HC11, um mal Beispiele zu nennen).

Ich prog. gern in Assembler, mache auch viel Echtzeitanwendungen. Aus Bequemlichkeit möchte ich aber auf Bascom nicht verzichten, da ja einige Arbeit abgenommen wird, gerade bei Verwendung von versch. AVRs.

Als ich vor 4 Wochen mit Bascom anfing, war mir schon bewußt, das Bascom intern alle mögliche Reg. nutzt und vergeudet. Aber welche genau? Ich war u. bin, das gebe ich offen zu, ziemlich unsicher ob der Mix ASM/BASCOM/ASM überhaupt gutgeht. BEVOR ich also in ASM losprogrammieren könnte mußte ich - soviel war klar - mir einen Überblick über die Reg. verschaffen welche ich UNEINGESCHRÄNKT benutzen kann, ohne die Angst haben zu müssen, das nach einem neuen BASCOM-Befehl ich mein ASM umschreiben muß, weil plötzlich irgendwas (bereits ausgetestetes!) abstürzt...

Deshalb der Aufwand und meine Frage eingangs zum Thema!
Weiteres Beispiel: Bascom benutzt definitiv intern die Reg. r23 + r24. Dazu gibt es in der BASCOM-Hilfe auch den Hinweis:

"The compiler will use register R23 for this. So make sure it is not used."

Und da liegt ein Teil der Verwirrung: in den von Dir gemachten Beispiel wird u.a. auch r23 und r24 verwendet. Das gibt aber Kuddelmuddel wenn im ASM-Mix zwischenzeitlich Bascom darauf zugreift...

Deshalb die Frage an die Profis: welchen Reg. kann ich denn ohne größere Sorge und ohne vorangestellte PUSH/POPs benutzen?
Oder ist der BASCOM-Compiler für diesen Mix ungeeignet?
P.S. mir würden ja 6 Register genügen: 3 oberhalb u. 3 unterhalb von r16.

Grüße,
Mega128