Daten in Inline-Assembbler ablegen

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • Daten in Inline-Assembbler ablegen

      Hallo zusammen

      Ich möchte in Inline-Assembler oder Libs sowas wie Datazeilen anlegen.
      Mit Byte funktioniert das gut.

      Source Code

      1. !.db 0,1,2,&h1,$6

      Wie kann ich Integer, Long oder Strings ablegen?

      Geht das mit Inline-Assembler überhaupt?

      Sowas meckert der Compiler an:

      Source Code

      1. !.dw $1234
      2. !.db "Hallo"
      Hat jemand eine Idee ohne das Bascom-Schlüsselwort Data zu verwenden?
    • Mitch64 wrote:

      Sowas meckert der Compiler an:
      Gut so. Wenn nicht würde er die Word und String Routinen mit aufnehmen müssen. Was in dem Fall eher nicht gewünscht ist. (Sonst würde man ja Data schreiben)
      Mit einem Word kann er mit starken Einschränkungen was anfangen. Ein String kennt er gar nicht .Im Speicher ist es z.B. $53,$6F Ob das als "So" oder 21359 gewertet oder einfach nur weitergereicht wird muß der Code sicherstellen.
    • Die Antwort ist, dass der Compiler das schlichtweg nicht implementiert hat.

      Hat also nix mit "Gut so" und Stringroutinen einbinden zu tun.
      Es ging ja nur um das Ablegen von Werten in die Datazeile.

      Aber es geht ja trotzdem über einen Trick.
      Viele wissen das vielleicht nicht, aber:

      Man kann in Assembler und Inline-Assembler ja auch umgekehrt Basic-Anweisungen schreiben.

      Beispiel

      In Basic könnte die Datazeile z.B. lauten:

      BASCOM Source Code

      1. Data 1 , 2% , 3& , "Hallo"


      Bei Inline-Assembler kommt ja das Ausrufezeichen davor.
      Damit der Compiler dann weiß, dass in der Inline-Assembler Zeile eine Basic-Anweisung kommt,
      muss da *Basic: dann vor der Basic-Anweisung stehen.

      In Inline-Assembler würde die Zeile dann so aussehen:


      Source Code

      1. !*Basic: Data 1 , 2% , 3& , "Hallo"


      In der Lib natürlich ohne das Anführungszeichen.

      Der Trick funktioniert auch mit DIM und anderen Anweisungen.
      Das braucht man vielleicht mal, wenn man eine Lib selber schreiben möchte und muss sich ein paar Byte RAM reservieren.
    • Mitch64 wrote:

      Die Antwort ist, dass der Compiler das schlichtweg nicht implementiert hat.
      Du arbeitest mit deinem Assembler am Compiler vorbei und bemerkst, dass der Compiler das nicht hat.
      Später im Text findest du eine Lösung, indem du den Compiler wieder in Assembler einbindest.
      Also hat es doch der Compiler?

      Wenn es eine Assembler-Anweisung gäbe, dann ginge das und du könntest das einbinden.
      Zu behaupten, dass der Compiler das nicht hat finde ich nicht korrekt, er hat es ja.