Hallo Besucher, der Thread wurde 1,3k mal aufgerufen und enthält 5 Antworten

letzter Beitrag von Vernunftmensch am

Strukturiertes ASS-Programmmieren

  • Hallo zusammen,


    ich habe hier ein Problem mit dem xa-Assembler mit dem ich unter Linux in Assembler für den C64 programmieren möchte.
    Das Problem besteht darin, dass ich versuche ein halbwegs strukturiertes Assembler-programm aufzubauen, das möglichst viel in einzelnen Unterroutinen verpackt und diese am Besten thematisch sortiert in unterschiedlichen Quellcodedateien speichere.
    Das "Hauptprogramm" includiert dann die einzelnen Dateien und ruft die einzelnen Unterroutinen per JSR auf.
    Allerdings erhalte ich das Problem, wenn Labeldefinition (also Beginn einer Unterroutinie) und der Sprungaufruf in unterschiedlichen Dateien stehen.
    Dann erhalte ich als Fehlermeldung immer "Label already defined error".


    Hat da wer eine Idee, wie man an solche Probleme am besten herangeht?



    Viele Grüße,
    Mentalysion

  • ich kenn mich zwar mit dem XA nicht so aus, aber vielleicht hilft diese Info aus dem XA-Manual:


    You can use more than one label for definition, except for explicit definition.Labels are case sensitive.If a label is proceeded by a '+', this label is defined global.If a label is proceeded by a '&', this label is defined one level 'up'in the block hierachy, and you can use more than one '&'.Redefinition of a label is possible by proceeding it with a dash '-'.

  • Heißer Tipp fürs strukturierte Programmieren: wenn Du eine Toolchain aus Assembler und Linker benutzt (z.B. ca65 als Assembler und ld65 als Linker, beide aus der cc65-Suite), brauchst Du gar nicht mehr mit Includes zu arbeiten. Einfach in jeder Sourcecodedatei die Symbole mit ".export" nach außen sichtbar machen, die Du von anderen Dateien aus verwenden willst. Der Linker kümmert sich dann am Schluss darum, die Adressen aus allen Dateien zusammenzuführen. Das löst spätestens dann haufenweise Probleme, wenn Du auch mal Code zur Laufzeit nachladen willst, dann kannst Du nämlich eh keine includes mehr benutzen.