Es kam schon öfter vor, daß ich Assemblerprogramme bzw Teile daraus, die zB im AVR-Studio entwickelt wurden, in Bascom Programmen verwenden wollte. Um die gefundenen Routinen an die Bascom IDE anzupassen bedarf es immer eines gewissen Aufwandes. In der Bascom Hilfe gibt es asm Basisbeschreibungen, die auf das Topic nicht eingehen.

Deshalb möchte ich hier kurz kleine, von mir als funktionierend gefundene Möglichkeiten vorstellen, die mir die Arbeit sehr erleichtert haben und die ich so keiner Doku entnehmen konnte. (PCINT2 und PCINT1 sind Beispiele, die in der inc. bzw .def datei mit Bitnummern entsprechend dem Datenblatt definiert sind):

Code:
AVR Studio
andi R16,~(1<<PCINT2)       löschen eines Bits in Register R16

Bascom
andi R16,not(bits(PCINT2))  

in Bascom funkionieren "not" und "bits" auch innerhalb eines $asm blocks und fügen die entsprechende Konstante in den asm Befehl ein.


AVR Studio
ori R16,(1<<PCINT1)|(1<<PCINT2)

Bascom
ori R16,(bits(PCINT1)) or (bits(PCINT2))

Auch die "or" Verknüpfung funktioniert und wie in diesem Fall sollte nicht mit Klammern gespart werden.
Allgemein sieht es so aus, daß Basic Ausdrücke, die Konstante erzeugen von Bascom auch in asm Blöcken verarbeitet und eingesetzt werden. Da bleibt noch einiges auszuprobieren oder gibt es eine Doku darüber!?

Auch .equ und .def können in die Bascom IDE übernommen (kopiert) werden anstatt sie mit CONST bzw ALIAS zu ersetzen, wenn sie in einem "$asm" und "$end asm" Block eingeschlossen werden.


Gruß
Searcher

PS Gibt es Fallstricke? Gibt es eine Dokumentation zu dem Thema?