> Ich würde gerne einen Assembler Befehl dafür einbauen um
> Programm-Speicher zu sparen.
Man kann in Assembler genauso speicherplatzverschwendend (oder
rechenzeitverschwendend) programmieren wie in jeder anderen
Programmiersprache. Effiziente Algorithmen sind nicht unbedingt von der
Programmiersprache abhängig, wobei es in BASCOM etwas schwieriger ist,
effizient zu programmieren, weil BASCOM viel unnötiges Zeugs macht (z.B.
sichern aller Register (auch der unbeteiligten) in der ISR).
Du möchtest DO - LOOP in ASM haben... - Ist ganz einfach, setzt zu
Beginn ein Label (Sprungmarke) und springst mit rjmp (sowas wie Goto)
zum Label zutück. Und zwischendurch prüfst Du die Abbruchbedingung und
springst ggf. aus der Schleife raus.
Die Frage, ob das effizient wird, wird aber woanders entschieden.
Man kann auf ein Ereignis warten, indem man es in einer Schleife prüft,
bis es eingetreten ist. Der Controller kann in dieser Zeit nix anderes
machen.
Man kann aber auch das Ereignis prüfen, wenn es nicht eingetreten ist,
etwas anderes sinnvolles tun und später nochmal prüfen. Dazu müssen aber
die Jobs der Mainloop so organisiert werden, dass sie recht kurz sind
und die Ereignis-Abfrage nicht zu lange blockieren.
Man kann aber auch Interrupts nutzen, um auf ein Ereignis zu reagieren.
Auch hier sind natürlich gewisse Regeln einzuhalten (z.B. kurze ISR),
was in BASCOM allerdings etwas schwieriger ist, weil es zuviel
Eigenleben entwickelt.
Also wenn Du schon aus Gründen der Rechenzeit oder des
Speicherverbrauchs in ASM programmieren willst, dann solltest Du
versuchen, das Programm komplett in ASM zu schreiben, also auf BASCOM zu
verzichten.
...